From 1567a3ce0c8abcaa99c8e9121024d26c5b19bb13 Mon Sep 17 00:00:00 2001 From: PhillipRambo Date: Sat, 15 Nov 2025 21:26:37 +0100 Subject: [PATCH] upload freq divider --- .../CML_divider/cace/CML_divider.yaml | 115 ++++++++ .../scripts/__pycache__/freq.cpython-310.pyc | Bin 0 -> 863 bytes .../CML_divider/cace/scripts/freq.py | 41 +++ .../cace/templates/CML_core_tb.sch | 71 +++++ .../CML_divider/cace/templates/xschemrc | 1 + .../CML_divider/docs/CML_divider.md | 54 ++++ .../docs/CML_divider/schematic/frequency.png | Bin 0 -> 187075 bytes .../CML_divider/schematic/vo_diff_vs_time.png | Bin 0 -> 188877 bytes .../CML_divider/docs/CML_divider_schematic.md | 17 ++ .../docs/CML_divider_schematic.svg | 160 +++++++++++ .../CML_divider/docs/CML_divider_symbol.svg | 160 +++++++++++ .../parameters/Frequency/CML_core_tb.sch | 71 +++++ .../parameters/Frequency/frequency.png | Bin 0 -> 33283 bytes .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/CML_core_tb.sch | 71 +++++ .../Frequency/run_0/CML_core_tb_0.data | 85 ++++++ .../Frequency/run_0/CML_divider.sym | 30 ++ .../Frequency/run_0/conditions.yaml | 9 + .../Frequency/simulation_summary.csv | 2 + .../Frequency/simulation_summary.md | 5 + .../runs/RUN_2025-11-11_17-37-12/summary.md | 9 + .../parameters/Frequency/CML_core_tb.sch | 71 +++++ .../parameters/Frequency/frequency.png | Bin 0 -> 33283 bytes .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/CML_core_tb.sch | 71 +++++ .../Frequency/run_0/CML_core_tb_0.data | 85 ++++++ .../Frequency/run_0/CML_divider.sym | 30 ++ .../Frequency/run_0/conditions.yaml | 9 + .../Frequency/simulation_summary.csv | 2 + .../Frequency/simulation_summary.md | 5 + .../runs/RUN_2025-11-11_17-37-39/summary.md | 9 + .../parameters/Frequency/CML_core_tb.sch | 71 +++++ .../parameters/Frequency/frequency.png | Bin 0 -> 148425 bytes .../parameters/Frequency/run_00/.spiceinit | 30 ++ .../Frequency/run_00/CML_core_tb.sch | 71 +++++ .../Frequency/run_00/CML_core_tb_0.data | 85 ++++++ .../Frequency/run_00/CML_divider.sym | 30 ++ .../Frequency/run_00/conditions.yaml | 9 + .../parameters/Frequency/run_01/.spiceinit | 30 ++ .../Frequency/run_01/CML_core_tb.sch | 71 +++++ .../Frequency/run_01/CML_core_tb_1.data | 85 ++++++ .../Frequency/run_01/CML_divider.sym | 30 ++ .../Frequency/run_01/conditions.yaml | 9 + .../parameters/Frequency/run_02/.spiceinit | 30 ++ .../Frequency/run_02/CML_core_tb.sch | 71 +++++ .../Frequency/run_02/CML_core_tb_2.data | 85 ++++++ .../Frequency/run_02/CML_divider.sym | 30 ++ .../Frequency/run_02/conditions.yaml | 9 + .../parameters/Frequency/run_03/.spiceinit | 30 ++ .../Frequency/run_03/CML_core_tb.sch | 71 +++++ .../Frequency/run_03/CML_core_tb_3.data | 85 ++++++ .../Frequency/run_03/CML_divider.sym | 30 ++ .../Frequency/run_03/conditions.yaml | 9 + .../parameters/Frequency/run_04/.spiceinit | 30 ++ .../Frequency/run_04/CML_core_tb.sch | 71 +++++ .../Frequency/run_04/CML_core_tb_4.data | 85 ++++++ .../Frequency/run_04/CML_divider.sym | 30 ++ .../Frequency/run_04/conditions.yaml | 9 + .../parameters/Frequency/run_05/.spiceinit | 30 ++ .../Frequency/run_05/CML_core_tb.sch | 71 +++++ .../Frequency/run_05/CML_core_tb_5.data | 85 ++++++ .../Frequency/run_05/CML_divider.sym | 30 ++ .../Frequency/run_05/conditions.yaml | 9 + .../parameters/Frequency/run_06/.spiceinit | 30 ++ .../Frequency/run_06/CML_core_tb.sch | 71 +++++ .../Frequency/run_06/CML_core_tb_6.data | 85 ++++++ .../Frequency/run_06/CML_divider.sym | 30 ++ .../Frequency/run_06/conditions.yaml | 9 + .../parameters/Frequency/run_07/.spiceinit | 30 ++ .../Frequency/run_07/CML_core_tb.sch | 71 +++++ .../Frequency/run_07/CML_core_tb_7.data | 85 ++++++ .../Frequency/run_07/CML_divider.sym | 30 ++ .../Frequency/run_07/conditions.yaml | 9 + .../parameters/Frequency/run_08/.spiceinit | 30 ++ .../Frequency/run_08/CML_core_tb.sch | 71 +++++ .../Frequency/run_08/CML_core_tb_8.data | 85 ++++++ .../Frequency/run_08/CML_divider.sym | 30 ++ .../Frequency/run_08/conditions.yaml | 9 + .../parameters/Frequency/run_09/.spiceinit | 30 ++ .../Frequency/run_09/CML_core_tb.sch | 71 +++++ .../Frequency/run_09/CML_core_tb_9.data | 85 ++++++ .../Frequency/run_09/CML_divider.sym | 30 ++ .../Frequency/run_09/conditions.yaml | 9 + .../parameters/Frequency/run_10/.spiceinit | 30 ++ .../Frequency/run_10/CML_core_tb.sch | 71 +++++ .../Frequency/run_10/CML_core_tb_10.data | 85 ++++++ .../Frequency/run_10/CML_divider.sym | 30 ++ .../Frequency/run_10/conditions.yaml | 9 + .../parameters/Frequency/run_11/.spiceinit | 30 ++ .../Frequency/run_11/CML_core_tb.sch | 71 +++++ .../Frequency/run_11/CML_core_tb_11.data | 85 ++++++ .../Frequency/run_11/CML_divider.sym | 30 ++ .../Frequency/run_11/conditions.yaml | 9 + .../parameters/Frequency/run_12/.spiceinit | 30 ++ .../Frequency/run_12/CML_core_tb.sch | 71 +++++ .../Frequency/run_12/CML_core_tb_12.data | 85 ++++++ .../Frequency/run_12/CML_divider.sym | 30 ++ .../Frequency/run_12/conditions.yaml | 9 + .../parameters/Frequency/run_13/.spiceinit | 30 ++ .../Frequency/run_13/CML_core_tb.sch | 71 +++++ .../Frequency/run_13/CML_core_tb_13.data | 85 ++++++ .../Frequency/run_13/CML_divider.sym | 30 ++ .../Frequency/run_13/conditions.yaml | 9 + .../parameters/Frequency/run_14/.spiceinit | 30 ++ .../Frequency/run_14/CML_core_tb.sch | 71 +++++ .../Frequency/run_14/CML_core_tb_14.data | 85 ++++++ .../Frequency/run_14/CML_divider.sym | 30 ++ .../Frequency/run_14/conditions.yaml | 9 + .../parameters/Frequency/run_15/.spiceinit | 30 ++ .../Frequency/run_15/CML_core_tb.sch | 71 +++++ .../Frequency/run_15/CML_core_tb_15.data | 85 ++++++ .../Frequency/run_15/CML_divider.sym | 30 ++ .../Frequency/run_15/conditions.yaml | 9 + .../parameters/Frequency/run_16/.spiceinit | 30 ++ .../Frequency/run_16/CML_core_tb.sch | 71 +++++ .../Frequency/run_16/CML_core_tb_16.data | 85 ++++++ .../Frequency/run_16/CML_divider.sym | 30 ++ .../Frequency/run_16/conditions.yaml | 9 + .../parameters/Frequency/run_17/.spiceinit | 30 ++ .../Frequency/run_17/CML_core_tb.sch | 71 +++++ .../Frequency/run_17/CML_core_tb_17.data | 85 ++++++ .../Frequency/run_17/CML_divider.sym | 30 ++ .../Frequency/run_17/conditions.yaml | 9 + .../Frequency/simulation_summary.csv | 19 ++ .../Frequency/simulation_summary.md | 22 ++ .../runs/RUN_2025-11-11_17-38-36/summary.md | 9 + .../parameters/Frequency/CML_core_tb.sch | 71 +++++ .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/CML_core_tb.sch | 71 +++++ .../Frequency/run_0/CML_core_tb_0.data | 85 ++++++ .../Frequency/run_0/CML_divider.sym | 30 ++ .../Frequency/run_0/conditions.yaml | 9 + .../runs/RUN_2025-11-11_17-41-07/summary.md | 9 + .../parameters/Frequency/CML_core_tb.sch | 71 +++++ .../parameters/Frequency/frequency.png | Bin 0 -> 33283 bytes .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/CML_core_tb.sch | 71 +++++ .../Frequency/run_0/CML_core_tb_0.data | 85 ++++++ .../Frequency/run_0/CML_divider.sym | 30 ++ .../Frequency/run_0/conditions.yaml | 9 + .../Frequency/simulation_summary.csv | 2 + .../Frequency/simulation_summary.md | 5 + .../runs/RUN_2025-11-11_17-41-30/summary.md | 9 + .../parameters/Frequency/CML_core_tb.sch | 71 +++++ .../parameters/Frequency/frequency.png | Bin 0 -> 33283 bytes .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/CML_core_tb.sch | 71 +++++ .../Frequency/run_0/CML_core_tb_0.data | 85 ++++++ .../Frequency/run_0/CML_divider.sym | 30 ++ .../Frequency/run_0/conditions.yaml | 9 + .../Frequency/simulation_summary.csv | 2 + .../Frequency/simulation_summary.md | 5 + .../runs/RUN_2025-11-11_17-42-02/summary.md | 9 + .../parameters/Frequency/CML_core_tb.sch | 71 +++++ .../parameters/Frequency/frequency.png | Bin 0 -> 148425 bytes .../parameters/Frequency/run_00/.spiceinit | 30 ++ .../Frequency/run_00/CML_core_tb.sch | 71 +++++ .../Frequency/run_00/CML_core_tb_0.data | 85 ++++++ .../Frequency/run_00/CML_divider.sym | 30 ++ .../Frequency/run_00/conditions.yaml | 9 + .../parameters/Frequency/run_01/.spiceinit | 30 ++ .../Frequency/run_01/CML_core_tb.sch | 71 +++++ .../Frequency/run_01/CML_core_tb_1.data | 85 ++++++ .../Frequency/run_01/CML_divider.sym | 30 ++ .../Frequency/run_01/conditions.yaml | 9 + .../parameters/Frequency/run_02/.spiceinit | 30 ++ .../Frequency/run_02/CML_core_tb.sch | 71 +++++ .../Frequency/run_02/CML_core_tb_2.data | 85 ++++++ .../Frequency/run_02/CML_divider.sym | 30 ++ .../Frequency/run_02/conditions.yaml | 9 + .../parameters/Frequency/run_03/.spiceinit | 30 ++ .../Frequency/run_03/CML_core_tb.sch | 71 +++++ .../Frequency/run_03/CML_core_tb_3.data | 85 ++++++ .../Frequency/run_03/CML_divider.sym | 30 ++ .../Frequency/run_03/conditions.yaml | 9 + .../parameters/Frequency/run_04/.spiceinit | 30 ++ .../Frequency/run_04/CML_core_tb.sch | 71 +++++ .../Frequency/run_04/CML_core_tb_4.data | 85 ++++++ .../Frequency/run_04/CML_divider.sym | 30 ++ .../Frequency/run_04/conditions.yaml | 9 + .../parameters/Frequency/run_05/.spiceinit | 30 ++ .../Frequency/run_05/CML_core_tb.sch | 71 +++++ .../Frequency/run_05/CML_core_tb_5.data | 85 ++++++ .../Frequency/run_05/CML_divider.sym | 30 ++ .../Frequency/run_05/conditions.yaml | 9 + .../parameters/Frequency/run_06/.spiceinit | 30 ++ .../Frequency/run_06/CML_core_tb.sch | 71 +++++ .../Frequency/run_06/CML_core_tb_6.data | 85 ++++++ .../Frequency/run_06/CML_divider.sym | 30 ++ .../Frequency/run_06/conditions.yaml | 9 + .../parameters/Frequency/run_07/.spiceinit | 30 ++ .../Frequency/run_07/CML_core_tb.sch | 71 +++++ .../Frequency/run_07/CML_core_tb_7.data | 85 ++++++ .../Frequency/run_07/CML_divider.sym | 30 ++ .../Frequency/run_07/conditions.yaml | 9 + .../parameters/Frequency/run_08/.spiceinit | 30 ++ .../Frequency/run_08/CML_core_tb.sch | 71 +++++ .../Frequency/run_08/CML_core_tb_8.data | 85 ++++++ .../Frequency/run_08/CML_divider.sym | 30 ++ .../Frequency/run_08/conditions.yaml | 9 + .../parameters/Frequency/run_09/.spiceinit | 30 ++ .../Frequency/run_09/CML_core_tb.sch | 71 +++++ .../Frequency/run_09/CML_core_tb_9.data | 85 ++++++ .../Frequency/run_09/CML_divider.sym | 30 ++ .../Frequency/run_09/conditions.yaml | 9 + .../parameters/Frequency/run_10/.spiceinit | 30 ++ .../Frequency/run_10/CML_core_tb.sch | 71 +++++ .../Frequency/run_10/CML_core_tb_10.data | 85 ++++++ .../Frequency/run_10/CML_divider.sym | 30 ++ .../Frequency/run_10/conditions.yaml | 9 + .../parameters/Frequency/run_11/.spiceinit | 30 ++ .../Frequency/run_11/CML_core_tb.sch | 71 +++++ .../Frequency/run_11/CML_core_tb_11.data | 85 ++++++ .../Frequency/run_11/CML_divider.sym | 30 ++ .../Frequency/run_11/conditions.yaml | 9 + .../parameters/Frequency/run_12/.spiceinit | 30 ++ .../Frequency/run_12/CML_core_tb.sch | 71 +++++ .../Frequency/run_12/CML_core_tb_12.data | 85 ++++++ .../Frequency/run_12/CML_divider.sym | 30 ++ .../Frequency/run_12/conditions.yaml | 9 + .../parameters/Frequency/run_13/.spiceinit | 30 ++ .../Frequency/run_13/CML_core_tb.sch | 71 +++++ .../Frequency/run_13/CML_core_tb_13.data | 85 ++++++ .../Frequency/run_13/CML_divider.sym | 30 ++ .../Frequency/run_13/conditions.yaml | 9 + .../parameters/Frequency/run_14/.spiceinit | 30 ++ .../Frequency/run_14/CML_core_tb.sch | 71 +++++ .../Frequency/run_14/CML_core_tb_14.data | 85 ++++++ .../Frequency/run_14/CML_divider.sym | 30 ++ .../Frequency/run_14/conditions.yaml | 9 + .../parameters/Frequency/run_15/.spiceinit | 30 ++ .../Frequency/run_15/CML_core_tb.sch | 71 +++++ .../Frequency/run_15/CML_core_tb_15.data | 85 ++++++ .../Frequency/run_15/CML_divider.sym | 30 ++ .../Frequency/run_15/conditions.yaml | 9 + .../parameters/Frequency/run_16/.spiceinit | 30 ++ .../Frequency/run_16/CML_core_tb.sch | 71 +++++ .../Frequency/run_16/CML_core_tb_16.data | 85 ++++++ .../Frequency/run_16/CML_divider.sym | 30 ++ .../Frequency/run_16/conditions.yaml | 9 + .../parameters/Frequency/run_17/.spiceinit | 30 ++ .../Frequency/run_17/CML_core_tb.sch | 71 +++++ .../Frequency/run_17/CML_core_tb_17.data | 85 ++++++ .../Frequency/run_17/CML_divider.sym | 30 ++ .../Frequency/run_17/conditions.yaml | 9 + .../Frequency/simulation_summary.csv | 19 ++ .../Frequency/simulation_summary.md | 22 ++ .../runs/RUN_2025-11-11_17-42-24/summary.md | 9 + .../parameters/Frequency/CML_core_tb.sch | 71 +++++ .../parameters/Frequency/frequency.png | Bin 0 -> 187075 bytes .../parameters/Frequency/run_00/.spiceinit | 30 ++ .../Frequency/run_00/CML_core_tb.sch | 71 +++++ .../Frequency/run_00/CML_core_tb_0.data | 85 ++++++ .../Frequency/run_00/CML_divider.sym | 30 ++ .../Frequency/run_00/conditions.yaml | 9 + .../parameters/Frequency/run_01/.spiceinit | 30 ++ .../Frequency/run_01/CML_core_tb.sch | 71 +++++ .../Frequency/run_01/CML_core_tb_1.data | 85 ++++++ .../Frequency/run_01/CML_divider.sym | 30 ++ .../Frequency/run_01/conditions.yaml | 9 + .../parameters/Frequency/run_02/.spiceinit | 30 ++ .../Frequency/run_02/CML_core_tb.sch | 71 +++++ .../Frequency/run_02/CML_core_tb_2.data | 85 ++++++ .../Frequency/run_02/CML_divider.sym | 30 ++ .../Frequency/run_02/conditions.yaml | 9 + .../parameters/Frequency/run_03/.spiceinit | 30 ++ .../Frequency/run_03/CML_core_tb.sch | 71 +++++ .../Frequency/run_03/CML_core_tb_3.data | 85 ++++++ .../Frequency/run_03/CML_divider.sym | 30 ++ .../Frequency/run_03/conditions.yaml | 9 + .../parameters/Frequency/run_04/.spiceinit | 30 ++ .../Frequency/run_04/CML_core_tb.sch | 71 +++++ .../Frequency/run_04/CML_core_tb_4.data | 85 ++++++ .../Frequency/run_04/CML_divider.sym | 30 ++ .../Frequency/run_04/conditions.yaml | 9 + .../parameters/Frequency/run_05/.spiceinit | 30 ++ .../Frequency/run_05/CML_core_tb.sch | 71 +++++ .../Frequency/run_05/CML_core_tb_5.data | 85 ++++++ .../Frequency/run_05/CML_divider.sym | 30 ++ .../Frequency/run_05/conditions.yaml | 9 + .../parameters/Frequency/run_06/.spiceinit | 30 ++ .../Frequency/run_06/CML_core_tb.sch | 71 +++++ .../Frequency/run_06/CML_core_tb_6.data | 85 ++++++ .../Frequency/run_06/CML_divider.sym | 30 ++ .../Frequency/run_06/conditions.yaml | 9 + .../parameters/Frequency/run_07/.spiceinit | 30 ++ .../Frequency/run_07/CML_core_tb.sch | 71 +++++ .../Frequency/run_07/CML_core_tb_7.data | 85 ++++++ .../Frequency/run_07/CML_divider.sym | 30 ++ .../Frequency/run_07/conditions.yaml | 9 + .../parameters/Frequency/run_08/.spiceinit | 30 ++ .../Frequency/run_08/CML_core_tb.sch | 71 +++++ .../Frequency/run_08/CML_core_tb_8.data | 85 ++++++ .../Frequency/run_08/CML_divider.sym | 30 ++ .../Frequency/run_08/conditions.yaml | 9 + .../parameters/Frequency/run_09/.spiceinit | 30 ++ .../Frequency/run_09/CML_core_tb.sch | 71 +++++ .../Frequency/run_09/CML_core_tb_9.data | 85 ++++++ .../Frequency/run_09/CML_divider.sym | 30 ++ .../Frequency/run_09/conditions.yaml | 9 + .../parameters/Frequency/run_10/.spiceinit | 30 ++ .../Frequency/run_10/CML_core_tb.sch | 71 +++++ .../Frequency/run_10/CML_core_tb_10.data | 85 ++++++ .../Frequency/run_10/CML_divider.sym | 30 ++ .../Frequency/run_10/conditions.yaml | 9 + .../parameters/Frequency/run_11/.spiceinit | 30 ++ .../Frequency/run_11/CML_core_tb.sch | 71 +++++ .../Frequency/run_11/CML_core_tb_11.data | 85 ++++++ .../Frequency/run_11/CML_divider.sym | 30 ++ .../Frequency/run_11/conditions.yaml | 9 + .../parameters/Frequency/run_12/.spiceinit | 30 ++ .../Frequency/run_12/CML_core_tb.sch | 71 +++++ .../Frequency/run_12/CML_core_tb_12.data | 85 ++++++ .../Frequency/run_12/CML_divider.sym | 30 ++ .../Frequency/run_12/conditions.yaml | 9 + .../parameters/Frequency/run_13/.spiceinit | 30 ++ .../Frequency/run_13/CML_core_tb.sch | 71 +++++ .../Frequency/run_13/CML_core_tb_13.data | 85 ++++++ .../Frequency/run_13/CML_divider.sym | 30 ++ .../Frequency/run_13/conditions.yaml | 9 + .../parameters/Frequency/run_14/.spiceinit | 30 ++ .../Frequency/run_14/CML_core_tb.sch | 71 +++++ .../Frequency/run_14/CML_core_tb_14.data | 85 ++++++ .../Frequency/run_14/CML_divider.sym | 30 ++ .../Frequency/run_14/conditions.yaml | 9 + .../parameters/Frequency/run_15/.spiceinit | 30 ++ .../Frequency/run_15/CML_core_tb.sch | 71 +++++ .../Frequency/run_15/CML_core_tb_15.data | 85 ++++++ .../Frequency/run_15/CML_divider.sym | 30 ++ .../Frequency/run_15/conditions.yaml | 9 + .../parameters/Frequency/run_16/.spiceinit | 30 ++ .../Frequency/run_16/CML_core_tb.sch | 71 +++++ .../Frequency/run_16/CML_core_tb_16.data | 85 ++++++ .../Frequency/run_16/CML_divider.sym | 30 ++ .../Frequency/run_16/conditions.yaml | 9 + .../parameters/Frequency/run_17/.spiceinit | 30 ++ .../Frequency/run_17/CML_core_tb.sch | 71 +++++ .../Frequency/run_17/CML_core_tb_17.data | 85 ++++++ .../Frequency/run_17/CML_divider.sym | 30 ++ .../Frequency/run_17/conditions.yaml | 9 + .../parameters/Frequency/run_18/.spiceinit | 30 ++ .../Frequency/run_18/CML_core_tb.sch | 71 +++++ .../Frequency/run_18/CML_core_tb_18.data | 85 ++++++ .../Frequency/run_18/CML_divider.sym | 30 ++ .../Frequency/run_18/conditions.yaml | 9 + .../parameters/Frequency/run_19/.spiceinit | 30 ++ .../Frequency/run_19/CML_core_tb.sch | 71 +++++ .../Frequency/run_19/CML_core_tb_19.data | 85 ++++++ .../Frequency/run_19/CML_divider.sym | 30 ++ .../Frequency/run_19/conditions.yaml | 9 + .../parameters/Frequency/run_20/.spiceinit | 30 ++ .../Frequency/run_20/CML_core_tb.sch | 71 +++++ .../Frequency/run_20/CML_core_tb_20.data | 85 ++++++ .../Frequency/run_20/CML_divider.sym | 30 ++ .../Frequency/run_20/conditions.yaml | 9 + .../parameters/Frequency/run_21/.spiceinit | 30 ++ .../Frequency/run_21/CML_core_tb.sch | 71 +++++ .../Frequency/run_21/CML_core_tb_21.data | 85 ++++++ .../Frequency/run_21/CML_divider.sym | 30 ++ .../Frequency/run_21/conditions.yaml | 9 + .../parameters/Frequency/run_22/.spiceinit | 30 ++ .../Frequency/run_22/CML_core_tb.sch | 71 +++++ .../Frequency/run_22/CML_core_tb_22.data | 85 ++++++ .../Frequency/run_22/CML_divider.sym | 30 ++ .../Frequency/run_22/conditions.yaml | 9 + .../parameters/Frequency/run_23/.spiceinit | 30 ++ .../Frequency/run_23/CML_core_tb.sch | 71 +++++ .../Frequency/run_23/CML_core_tb_23.data | 85 ++++++ .../Frequency/run_23/CML_divider.sym | 30 ++ .../Frequency/run_23/conditions.yaml | 9 + .../parameters/Frequency/run_24/.spiceinit | 30 ++ .../Frequency/run_24/CML_core_tb.sch | 71 +++++ .../Frequency/run_24/CML_core_tb_24.data | 85 ++++++ .../Frequency/run_24/CML_divider.sym | 30 ++ .../Frequency/run_24/conditions.yaml | 9 + .../parameters/Frequency/run_25/.spiceinit | 30 ++ .../Frequency/run_25/CML_core_tb.sch | 71 +++++ .../Frequency/run_25/CML_core_tb_25.data | 85 ++++++ .../Frequency/run_25/CML_divider.sym | 30 ++ .../Frequency/run_25/conditions.yaml | 9 + .../parameters/Frequency/run_26/.spiceinit | 30 ++ .../Frequency/run_26/CML_core_tb.sch | 71 +++++ .../Frequency/run_26/CML_core_tb_26.data | 85 ++++++ .../Frequency/run_26/CML_divider.sym | 30 ++ .../Frequency/run_26/conditions.yaml | 9 + .../Frequency/simulation_summary.csv | 28 ++ .../Frequency/simulation_summary.md | 31 +++ .../parameters/Frequency/CML_core_tb.sch | 71 +++++ .../parameters/Frequency/frequency.png | Bin 0 -> 187075 bytes .../parameters/Frequency/run_00/.spiceinit | 30 ++ .../Frequency/run_00/CML_core_tb.sch | 71 +++++ .../Frequency/run_00/CML_core_tb_0.data | 85 ++++++ .../Frequency/run_00/CML_divider.sym | 30 ++ .../Frequency/run_00/conditions.yaml | 9 + .../parameters/Frequency/run_01/.spiceinit | 30 ++ .../Frequency/run_01/CML_core_tb.sch | 71 +++++ .../Frequency/run_01/CML_core_tb_1.data | 85 ++++++ .../Frequency/run_01/CML_divider.sym | 30 ++ .../Frequency/run_01/conditions.yaml | 9 + .../parameters/Frequency/run_02/.spiceinit | 30 ++ .../Frequency/run_02/CML_core_tb.sch | 71 +++++ .../Frequency/run_02/CML_core_tb_2.data | 85 ++++++ .../Frequency/run_02/CML_divider.sym | 30 ++ .../Frequency/run_02/conditions.yaml | 9 + .../parameters/Frequency/run_03/.spiceinit | 30 ++ .../Frequency/run_03/CML_core_tb.sch | 71 +++++ .../Frequency/run_03/CML_core_tb_3.data | 85 ++++++ .../Frequency/run_03/CML_divider.sym | 30 ++ .../Frequency/run_03/conditions.yaml | 9 + .../parameters/Frequency/run_04/.spiceinit | 30 ++ .../Frequency/run_04/CML_core_tb.sch | 71 +++++ .../Frequency/run_04/CML_core_tb_4.data | 85 ++++++ .../Frequency/run_04/CML_divider.sym | 30 ++ .../Frequency/run_04/conditions.yaml | 9 + .../parameters/Frequency/run_05/.spiceinit | 30 ++ .../Frequency/run_05/CML_core_tb.sch | 71 +++++ .../Frequency/run_05/CML_core_tb_5.data | 85 ++++++ .../Frequency/run_05/CML_divider.sym | 30 ++ .../Frequency/run_05/conditions.yaml | 9 + .../parameters/Frequency/run_06/.spiceinit | 30 ++ .../Frequency/run_06/CML_core_tb.sch | 71 +++++ .../Frequency/run_06/CML_core_tb_6.data | 85 ++++++ .../Frequency/run_06/CML_divider.sym | 30 ++ .../Frequency/run_06/conditions.yaml | 9 + .../parameters/Frequency/run_07/.spiceinit | 30 ++ .../Frequency/run_07/CML_core_tb.sch | 71 +++++ .../Frequency/run_07/CML_core_tb_7.data | 85 ++++++ .../Frequency/run_07/CML_divider.sym | 30 ++ .../Frequency/run_07/conditions.yaml | 9 + .../parameters/Frequency/run_08/.spiceinit | 30 ++ .../Frequency/run_08/CML_core_tb.sch | 71 +++++ .../Frequency/run_08/CML_core_tb_8.data | 85 ++++++ .../Frequency/run_08/CML_divider.sym | 30 ++ .../Frequency/run_08/conditions.yaml | 9 + .../parameters/Frequency/run_09/.spiceinit | 30 ++ .../Frequency/run_09/CML_core_tb.sch | 71 +++++ .../Frequency/run_09/CML_core_tb_9.data | 85 ++++++ .../Frequency/run_09/CML_divider.sym | 30 ++ .../Frequency/run_09/conditions.yaml | 9 + .../parameters/Frequency/run_10/.spiceinit | 30 ++ .../Frequency/run_10/CML_core_tb.sch | 71 +++++ .../Frequency/run_10/CML_core_tb_10.data | 85 ++++++ .../Frequency/run_10/CML_divider.sym | 30 ++ .../Frequency/run_10/conditions.yaml | 9 + .../parameters/Frequency/run_11/.spiceinit | 30 ++ .../Frequency/run_11/CML_core_tb.sch | 71 +++++ .../Frequency/run_11/CML_core_tb_11.data | 85 ++++++ .../Frequency/run_11/CML_divider.sym | 30 ++ .../Frequency/run_11/conditions.yaml | 9 + .../parameters/Frequency/run_12/.spiceinit | 30 ++ .../Frequency/run_12/CML_core_tb.sch | 71 +++++ .../Frequency/run_12/CML_core_tb_12.data | 85 ++++++ .../Frequency/run_12/CML_divider.sym | 30 ++ .../Frequency/run_12/conditions.yaml | 9 + .../parameters/Frequency/run_13/.spiceinit | 30 ++ .../Frequency/run_13/CML_core_tb.sch | 71 +++++ .../Frequency/run_13/CML_core_tb_13.data | 85 ++++++ .../Frequency/run_13/CML_divider.sym | 30 ++ .../Frequency/run_13/conditions.yaml | 9 + .../parameters/Frequency/run_14/.spiceinit | 30 ++ .../Frequency/run_14/CML_core_tb.sch | 71 +++++ .../Frequency/run_14/CML_core_tb_14.data | 85 ++++++ .../Frequency/run_14/CML_divider.sym | 30 ++ .../Frequency/run_14/conditions.yaml | 9 + .../parameters/Frequency/run_15/.spiceinit | 30 ++ .../Frequency/run_15/CML_core_tb.sch | 71 +++++ .../Frequency/run_15/CML_core_tb_15.data | 85 ++++++ .../Frequency/run_15/CML_divider.sym | 30 ++ .../Frequency/run_15/conditions.yaml | 9 + .../parameters/Frequency/run_16/.spiceinit | 30 ++ .../Frequency/run_16/CML_core_tb.sch | 71 +++++ .../Frequency/run_16/CML_core_tb_16.data | 85 ++++++ .../Frequency/run_16/CML_divider.sym | 30 ++ .../Frequency/run_16/conditions.yaml | 9 + .../parameters/Frequency/run_17/.spiceinit | 30 ++ .../Frequency/run_17/CML_core_tb.sch | 71 +++++ .../Frequency/run_17/CML_core_tb_17.data | 85 ++++++ .../Frequency/run_17/CML_divider.sym | 30 ++ .../Frequency/run_17/conditions.yaml | 9 + .../parameters/Frequency/run_18/.spiceinit | 30 ++ .../Frequency/run_18/CML_core_tb.sch | 71 +++++ .../Frequency/run_18/CML_core_tb_18.data | 85 ++++++ .../Frequency/run_18/CML_divider.sym | 30 ++ .../Frequency/run_18/conditions.yaml | 9 + .../parameters/Frequency/run_19/.spiceinit | 30 ++ .../Frequency/run_19/CML_core_tb.sch | 71 +++++ .../Frequency/run_19/CML_core_tb_19.data | 85 ++++++ .../Frequency/run_19/CML_divider.sym | 30 ++ .../Frequency/run_19/conditions.yaml | 9 + .../parameters/Frequency/run_20/.spiceinit | 30 ++ .../Frequency/run_20/CML_core_tb.sch | 71 +++++ .../Frequency/run_20/CML_core_tb_20.data | 85 ++++++ .../Frequency/run_20/CML_divider.sym | 30 ++ .../Frequency/run_20/conditions.yaml | 9 + .../parameters/Frequency/run_21/.spiceinit | 30 ++ .../Frequency/run_21/CML_core_tb.sch | 71 +++++ .../Frequency/run_21/CML_core_tb_21.data | 85 ++++++ .../Frequency/run_21/CML_divider.sym | 30 ++ .../Frequency/run_21/conditions.yaml | 9 + .../parameters/Frequency/run_22/.spiceinit | 30 ++ .../Frequency/run_22/CML_core_tb.sch | 71 +++++ .../Frequency/run_22/CML_core_tb_22.data | 85 ++++++ .../Frequency/run_22/CML_divider.sym | 30 ++ .../Frequency/run_22/conditions.yaml | 9 + .../parameters/Frequency/run_23/.spiceinit | 30 ++ .../Frequency/run_23/CML_core_tb.sch | 71 +++++ .../Frequency/run_23/CML_core_tb_23.data | 85 ++++++ .../Frequency/run_23/CML_divider.sym | 30 ++ .../Frequency/run_23/conditions.yaml | 9 + .../parameters/Frequency/run_24/.spiceinit | 30 ++ .../Frequency/run_24/CML_core_tb.sch | 71 +++++ .../Frequency/run_24/CML_core_tb_24.data | 85 ++++++ .../Frequency/run_24/CML_divider.sym | 30 ++ .../Frequency/run_24/conditions.yaml | 9 + .../parameters/Frequency/run_25/.spiceinit | 30 ++ .../Frequency/run_25/CML_core_tb.sch | 71 +++++ .../Frequency/run_25/CML_core_tb_25.data | 85 ++++++ .../Frequency/run_25/CML_divider.sym | 30 ++ .../Frequency/run_25/conditions.yaml | 9 + .../parameters/Frequency/run_26/.spiceinit | 30 ++ .../Frequency/run_26/CML_core_tb.sch | 71 +++++ .../Frequency/run_26/CML_core_tb_26.data | 85 ++++++ .../Frequency/run_26/CML_divider.sym | 30 ++ .../Frequency/run_26/conditions.yaml | 9 + .../Frequency/simulation_summary.csv | 28 ++ .../Frequency/simulation_summary.md | 31 +++ .../runs/RUN_2025-11-11_17-55-08/summary.md | 11 + .../parameters/Amplitude/CML_core_tb.sch | 71 +++++ .../parameters/Amplitude/run_00/.spiceinit | 30 ++ .../Amplitude/run_00/CML_core_tb.sch | 71 +++++ .../Amplitude/run_00/CML_core_tb_0.data | 85 ++++++ .../Amplitude/run_00/CML_divider.sym | 30 ++ .../Amplitude/run_00/conditions.yaml | 9 + .../parameters/Amplitude/run_01/.spiceinit | 30 ++ .../Amplitude/run_01/CML_core_tb.sch | 71 +++++ .../Amplitude/run_01/CML_core_tb_1.data | 85 ++++++ .../Amplitude/run_01/CML_divider.sym | 30 ++ .../Amplitude/run_01/conditions.yaml | 9 + .../parameters/Amplitude/run_02/.spiceinit | 30 ++ .../Amplitude/run_02/CML_core_tb.sch | 71 +++++ .../Amplitude/run_02/CML_core_tb_2.data | 85 ++++++ .../Amplitude/run_02/CML_divider.sym | 30 ++ .../Amplitude/run_02/conditions.yaml | 9 + .../parameters/Amplitude/run_03/.spiceinit | 30 ++ .../Amplitude/run_03/CML_core_tb.sch | 71 +++++ .../Amplitude/run_03/CML_core_tb_3.data | 85 ++++++ .../Amplitude/run_03/CML_divider.sym | 30 ++ .../Amplitude/run_03/conditions.yaml | 9 + .../parameters/Amplitude/run_04/.spiceinit | 30 ++ .../Amplitude/run_04/CML_core_tb.sch | 71 +++++ .../Amplitude/run_04/CML_core_tb_4.data | 85 ++++++ .../Amplitude/run_04/CML_divider.sym | 30 ++ .../Amplitude/run_04/conditions.yaml | 9 + .../parameters/Amplitude/run_05/.spiceinit | 30 ++ .../Amplitude/run_05/CML_core_tb.sch | 71 +++++ .../Amplitude/run_05/CML_core_tb_5.data | 85 ++++++ .../Amplitude/run_05/CML_divider.sym | 30 ++ .../Amplitude/run_05/conditions.yaml | 9 + .../parameters/Amplitude/run_06/.spiceinit | 30 ++ .../Amplitude/run_06/CML_core_tb.sch | 71 +++++ .../Amplitude/run_06/CML_core_tb_6.data | 85 ++++++ .../Amplitude/run_06/CML_divider.sym | 30 ++ .../Amplitude/run_06/conditions.yaml | 9 + .../parameters/Amplitude/run_07/.spiceinit | 30 ++ .../Amplitude/run_07/CML_core_tb.sch | 71 +++++ .../Amplitude/run_07/CML_core_tb_7.data | 85 ++++++ .../Amplitude/run_07/CML_divider.sym | 30 ++ .../Amplitude/run_07/conditions.yaml | 9 + .../parameters/Amplitude/run_08/.spiceinit | 30 ++ .../Amplitude/run_08/CML_core_tb.sch | 71 +++++ .../Amplitude/run_08/CML_core_tb_8.data | 85 ++++++ .../Amplitude/run_08/CML_divider.sym | 30 ++ .../Amplitude/run_08/conditions.yaml | 9 + .../parameters/Amplitude/run_09/.spiceinit | 30 ++ .../Amplitude/run_09/CML_core_tb.sch | 71 +++++ .../Amplitude/run_09/CML_core_tb_9.data | 85 ++++++ .../Amplitude/run_09/CML_divider.sym | 30 ++ .../Amplitude/run_09/conditions.yaml | 9 + .../parameters/Amplitude/run_10/.spiceinit | 30 ++ .../Amplitude/run_10/CML_core_tb.sch | 71 +++++ .../Amplitude/run_10/CML_core_tb_10.data | 85 ++++++ .../Amplitude/run_10/CML_divider.sym | 30 ++ .../Amplitude/run_10/conditions.yaml | 9 + .../parameters/Amplitude/run_11/.spiceinit | 30 ++ .../Amplitude/run_11/CML_core_tb.sch | 71 +++++ .../Amplitude/run_11/CML_core_tb_11.data | 85 ++++++ .../Amplitude/run_11/CML_divider.sym | 30 ++ .../Amplitude/run_11/conditions.yaml | 9 + .../parameters/Amplitude/run_12/.spiceinit | 30 ++ .../Amplitude/run_12/CML_core_tb.sch | 71 +++++ .../Amplitude/run_12/CML_core_tb_12.data | 85 ++++++ .../Amplitude/run_12/CML_divider.sym | 30 ++ .../Amplitude/run_12/conditions.yaml | 9 + .../parameters/Amplitude/run_13/.spiceinit | 30 ++ .../Amplitude/run_13/CML_core_tb.sch | 71 +++++ .../Amplitude/run_13/CML_core_tb_13.data | 85 ++++++ .../Amplitude/run_13/CML_divider.sym | 30 ++ .../Amplitude/run_13/conditions.yaml | 9 + .../parameters/Amplitude/run_14/.spiceinit | 30 ++ .../Amplitude/run_14/CML_core_tb.sch | 71 +++++ .../Amplitude/run_14/CML_core_tb_14.data | 85 ++++++ .../Amplitude/run_14/CML_divider.sym | 30 ++ .../Amplitude/run_14/conditions.yaml | 9 + .../parameters/Amplitude/run_15/.spiceinit | 30 ++ .../Amplitude/run_15/CML_core_tb.sch | 71 +++++ .../Amplitude/run_15/CML_core_tb_15.data | 85 ++++++ .../Amplitude/run_15/CML_divider.sym | 30 ++ .../Amplitude/run_15/conditions.yaml | 9 + .../parameters/Amplitude/run_16/.spiceinit | 30 ++ .../Amplitude/run_16/CML_core_tb.sch | 71 +++++ .../Amplitude/run_16/CML_core_tb_16.data | 85 ++++++ .../Amplitude/run_16/CML_divider.sym | 30 ++ .../Amplitude/run_16/conditions.yaml | 9 + .../parameters/Amplitude/run_17/.spiceinit | 30 ++ .../Amplitude/run_17/CML_core_tb.sch | 71 +++++ .../Amplitude/run_17/CML_core_tb_17.data | 85 ++++++ .../Amplitude/run_17/CML_divider.sym | 30 ++ .../Amplitude/run_17/conditions.yaml | 9 + .../parameters/Amplitude/run_18/.spiceinit | 30 ++ .../Amplitude/run_18/CML_core_tb.sch | 71 +++++ .../Amplitude/run_18/CML_core_tb_18.data | 85 ++++++ .../Amplitude/run_18/CML_divider.sym | 30 ++ .../Amplitude/run_18/conditions.yaml | 9 + .../parameters/Amplitude/run_19/.spiceinit | 30 ++ .../Amplitude/run_19/CML_core_tb.sch | 71 +++++ .../Amplitude/run_19/CML_core_tb_19.data | 85 ++++++ .../Amplitude/run_19/CML_divider.sym | 30 ++ .../Amplitude/run_19/conditions.yaml | 9 + .../parameters/Amplitude/run_20/.spiceinit | 30 ++ .../Amplitude/run_20/CML_core_tb.sch | 71 +++++ .../Amplitude/run_20/CML_core_tb_20.data | 85 ++++++ .../Amplitude/run_20/CML_divider.sym | 30 ++ .../Amplitude/run_20/conditions.yaml | 9 + .../parameters/Amplitude/run_21/.spiceinit | 30 ++ .../Amplitude/run_21/CML_core_tb.sch | 71 +++++ .../Amplitude/run_21/CML_core_tb_21.data | 85 ++++++ .../Amplitude/run_21/CML_divider.sym | 30 ++ .../Amplitude/run_21/conditions.yaml | 9 + .../parameters/Amplitude/run_22/.spiceinit | 30 ++ .../Amplitude/run_22/CML_core_tb.sch | 71 +++++ .../Amplitude/run_22/CML_core_tb_22.data | 85 ++++++ .../Amplitude/run_22/CML_divider.sym | 30 ++ .../Amplitude/run_22/conditions.yaml | 9 + .../parameters/Amplitude/run_23/.spiceinit | 30 ++ .../Amplitude/run_23/CML_core_tb.sch | 71 +++++ .../Amplitude/run_23/CML_core_tb_23.data | 85 ++++++ .../Amplitude/run_23/CML_divider.sym | 30 ++ .../Amplitude/run_23/conditions.yaml | 9 + .../parameters/Amplitude/run_24/.spiceinit | 30 ++ .../Amplitude/run_24/CML_core_tb.sch | 71 +++++ .../Amplitude/run_24/CML_core_tb_24.data | 85 ++++++ .../Amplitude/run_24/CML_divider.sym | 30 ++ .../Amplitude/run_24/conditions.yaml | 9 + .../parameters/Amplitude/run_25/.spiceinit | 30 ++ .../Amplitude/run_25/CML_core_tb.sch | 71 +++++ .../Amplitude/run_25/CML_core_tb_25.data | 85 ++++++ .../Amplitude/run_25/CML_divider.sym | 30 ++ .../Amplitude/run_25/conditions.yaml | 9 + .../parameters/Amplitude/run_26/.spiceinit | 30 ++ .../Amplitude/run_26/CML_core_tb.sch | 71 +++++ .../Amplitude/run_26/CML_core_tb_26.data | 85 ++++++ .../Amplitude/run_26/CML_divider.sym | 30 ++ .../Amplitude/run_26/conditions.yaml | 9 + .../Amplitude/simulation_summary.csv | 28 ++ .../Amplitude/simulation_summary.md | 31 +++ .../parameters/Frequency/CML_core_tb.sch | 71 +++++ .../parameters/Frequency/frequency.png | Bin 0 -> 187075 bytes .../parameters/Frequency/run_00/.spiceinit | 30 ++ .../Frequency/run_00/CML_core_tb.sch | 71 +++++ .../Frequency/run_00/CML_core_tb_0.data | 85 ++++++ .../Frequency/run_00/CML_divider.sym | 30 ++ .../Frequency/run_00/conditions.yaml | 9 + .../parameters/Frequency/run_01/.spiceinit | 30 ++ .../Frequency/run_01/CML_core_tb.sch | 71 +++++ .../Frequency/run_01/CML_core_tb_1.data | 85 ++++++ .../Frequency/run_01/CML_divider.sym | 30 ++ .../Frequency/run_01/conditions.yaml | 9 + .../parameters/Frequency/run_02/.spiceinit | 30 ++ .../Frequency/run_02/CML_core_tb.sch | 71 +++++ .../Frequency/run_02/CML_core_tb_2.data | 85 ++++++ .../Frequency/run_02/CML_divider.sym | 30 ++ .../Frequency/run_02/conditions.yaml | 9 + .../parameters/Frequency/run_03/.spiceinit | 30 ++ .../Frequency/run_03/CML_core_tb.sch | 71 +++++ .../Frequency/run_03/CML_core_tb_3.data | 85 ++++++ .../Frequency/run_03/CML_divider.sym | 30 ++ .../Frequency/run_03/conditions.yaml | 9 + .../parameters/Frequency/run_04/.spiceinit | 30 ++ .../Frequency/run_04/CML_core_tb.sch | 71 +++++ .../Frequency/run_04/CML_core_tb_4.data | 85 ++++++ .../Frequency/run_04/CML_divider.sym | 30 ++ .../Frequency/run_04/conditions.yaml | 9 + .../parameters/Frequency/run_05/.spiceinit | 30 ++ .../Frequency/run_05/CML_core_tb.sch | 71 +++++ .../Frequency/run_05/CML_core_tb_5.data | 85 ++++++ .../Frequency/run_05/CML_divider.sym | 30 ++ .../Frequency/run_05/conditions.yaml | 9 + .../parameters/Frequency/run_06/.spiceinit | 30 ++ .../Frequency/run_06/CML_core_tb.sch | 71 +++++ .../Frequency/run_06/CML_core_tb_6.data | 85 ++++++ .../Frequency/run_06/CML_divider.sym | 30 ++ .../Frequency/run_06/conditions.yaml | 9 + .../parameters/Frequency/run_07/.spiceinit | 30 ++ .../Frequency/run_07/CML_core_tb.sch | 71 +++++ .../Frequency/run_07/CML_core_tb_7.data | 85 ++++++ .../Frequency/run_07/CML_divider.sym | 30 ++ .../Frequency/run_07/conditions.yaml | 9 + .../parameters/Frequency/run_08/.spiceinit | 30 ++ .../Frequency/run_08/CML_core_tb.sch | 71 +++++ .../Frequency/run_08/CML_core_tb_8.data | 85 ++++++ .../Frequency/run_08/CML_divider.sym | 30 ++ .../Frequency/run_08/conditions.yaml | 9 + .../parameters/Frequency/run_09/.spiceinit | 30 ++ .../Frequency/run_09/CML_core_tb.sch | 71 +++++ .../Frequency/run_09/CML_core_tb_9.data | 85 ++++++ .../Frequency/run_09/CML_divider.sym | 30 ++ .../Frequency/run_09/conditions.yaml | 9 + .../parameters/Frequency/run_10/.spiceinit | 30 ++ .../Frequency/run_10/CML_core_tb.sch | 71 +++++ .../Frequency/run_10/CML_core_tb_10.data | 85 ++++++ .../Frequency/run_10/CML_divider.sym | 30 ++ .../Frequency/run_10/conditions.yaml | 9 + .../parameters/Frequency/run_11/.spiceinit | 30 ++ .../Frequency/run_11/CML_core_tb.sch | 71 +++++ .../Frequency/run_11/CML_core_tb_11.data | 85 ++++++ .../Frequency/run_11/CML_divider.sym | 30 ++ .../Frequency/run_11/conditions.yaml | 9 + .../parameters/Frequency/run_12/.spiceinit | 30 ++ .../Frequency/run_12/CML_core_tb.sch | 71 +++++ .../Frequency/run_12/CML_core_tb_12.data | 85 ++++++ .../Frequency/run_12/CML_divider.sym | 30 ++ .../Frequency/run_12/conditions.yaml | 9 + .../parameters/Frequency/run_13/.spiceinit | 30 ++ .../Frequency/run_13/CML_core_tb.sch | 71 +++++ .../Frequency/run_13/CML_core_tb_13.data | 85 ++++++ .../Frequency/run_13/CML_divider.sym | 30 ++ .../Frequency/run_13/conditions.yaml | 9 + .../parameters/Frequency/run_14/.spiceinit | 30 ++ .../Frequency/run_14/CML_core_tb.sch | 71 +++++ .../Frequency/run_14/CML_core_tb_14.data | 85 ++++++ .../Frequency/run_14/CML_divider.sym | 30 ++ .../Frequency/run_14/conditions.yaml | 9 + .../parameters/Frequency/run_15/.spiceinit | 30 ++ .../Frequency/run_15/CML_core_tb.sch | 71 +++++ .../Frequency/run_15/CML_core_tb_15.data | 85 ++++++ .../Frequency/run_15/CML_divider.sym | 30 ++ .../Frequency/run_15/conditions.yaml | 9 + .../parameters/Frequency/run_16/.spiceinit | 30 ++ .../Frequency/run_16/CML_core_tb.sch | 71 +++++ .../Frequency/run_16/CML_core_tb_16.data | 85 ++++++ .../Frequency/run_16/CML_divider.sym | 30 ++ .../Frequency/run_16/conditions.yaml | 9 + .../parameters/Frequency/run_17/.spiceinit | 30 ++ .../Frequency/run_17/CML_core_tb.sch | 71 +++++ .../Frequency/run_17/CML_core_tb_17.data | 85 ++++++ .../Frequency/run_17/CML_divider.sym | 30 ++ .../Frequency/run_17/conditions.yaml | 9 + .../parameters/Frequency/run_18/.spiceinit | 30 ++ .../Frequency/run_18/CML_core_tb.sch | 71 +++++ .../Frequency/run_18/CML_core_tb_18.data | 85 ++++++ .../Frequency/run_18/CML_divider.sym | 30 ++ .../Frequency/run_18/conditions.yaml | 9 + .../parameters/Frequency/run_19/.spiceinit | 30 ++ .../Frequency/run_19/CML_core_tb.sch | 71 +++++ .../Frequency/run_19/CML_core_tb_19.data | 85 ++++++ .../Frequency/run_19/CML_divider.sym | 30 ++ .../Frequency/run_19/conditions.yaml | 9 + .../parameters/Frequency/run_20/.spiceinit | 30 ++ .../Frequency/run_20/CML_core_tb.sch | 71 +++++ .../Frequency/run_20/CML_core_tb_20.data | 85 ++++++ .../Frequency/run_20/CML_divider.sym | 30 ++ .../Frequency/run_20/conditions.yaml | 9 + .../parameters/Frequency/run_21/.spiceinit | 30 ++ .../Frequency/run_21/CML_core_tb.sch | 71 +++++ .../Frequency/run_21/CML_core_tb_21.data | 85 ++++++ .../Frequency/run_21/CML_divider.sym | 30 ++ .../Frequency/run_21/conditions.yaml | 9 + .../parameters/Frequency/run_22/.spiceinit | 30 ++ .../Frequency/run_22/CML_core_tb.sch | 71 +++++ .../Frequency/run_22/CML_core_tb_22.data | 85 ++++++ .../Frequency/run_22/CML_divider.sym | 30 ++ .../Frequency/run_22/conditions.yaml | 9 + .../parameters/Frequency/run_23/.spiceinit | 30 ++ .../Frequency/run_23/CML_core_tb.sch | 71 +++++ .../Frequency/run_23/CML_core_tb_23.data | 85 ++++++ .../Frequency/run_23/CML_divider.sym | 30 ++ .../Frequency/run_23/conditions.yaml | 9 + .../parameters/Frequency/run_24/.spiceinit | 30 ++ .../Frequency/run_24/CML_core_tb.sch | 71 +++++ .../Frequency/run_24/CML_core_tb_24.data | 85 ++++++ .../Frequency/run_24/CML_divider.sym | 30 ++ .../Frequency/run_24/conditions.yaml | 9 + .../parameters/Frequency/run_25/.spiceinit | 30 ++ .../Frequency/run_25/CML_core_tb.sch | 71 +++++ .../Frequency/run_25/CML_core_tb_25.data | 85 ++++++ .../Frequency/run_25/CML_divider.sym | 30 ++ .../Frequency/run_25/conditions.yaml | 9 + .../parameters/Frequency/run_26/.spiceinit | 30 ++ .../Frequency/run_26/CML_core_tb.sch | 71 +++++ .../Frequency/run_26/CML_core_tb_26.data | 85 ++++++ .../Frequency/run_26/CML_divider.sym | 30 ++ .../Frequency/run_26/conditions.yaml | 9 + .../Frequency/simulation_summary.csv | 28 ++ .../Frequency/simulation_summary.md | 31 +++ .../parameters/VoltageSwing/CML_core_tb.sch | 71 +++++ .../parameters/VoltageSwing/run_00/.spiceinit | 30 ++ .../VoltageSwing/run_00/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_00/CML_core_tb_0.data | 85 ++++++ .../VoltageSwing/run_00/CML_divider.sym | 30 ++ .../VoltageSwing/run_00/conditions.yaml | 9 + .../parameters/VoltageSwing/run_01/.spiceinit | 30 ++ .../VoltageSwing/run_01/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_01/CML_core_tb_1.data | 85 ++++++ .../VoltageSwing/run_01/CML_divider.sym | 30 ++ .../VoltageSwing/run_01/conditions.yaml | 9 + .../parameters/VoltageSwing/run_02/.spiceinit | 30 ++ .../VoltageSwing/run_02/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_02/CML_core_tb_2.data | 85 ++++++ .../VoltageSwing/run_02/CML_divider.sym | 30 ++ .../VoltageSwing/run_02/conditions.yaml | 9 + .../parameters/VoltageSwing/run_03/.spiceinit | 30 ++ .../VoltageSwing/run_03/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_03/CML_core_tb_3.data | 85 ++++++ .../VoltageSwing/run_03/CML_divider.sym | 30 ++ .../VoltageSwing/run_03/conditions.yaml | 9 + .../parameters/VoltageSwing/run_04/.spiceinit | 30 ++ .../VoltageSwing/run_04/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_04/CML_core_tb_4.data | 85 ++++++ .../VoltageSwing/run_04/CML_divider.sym | 30 ++ .../VoltageSwing/run_04/conditions.yaml | 9 + .../parameters/VoltageSwing/run_05/.spiceinit | 30 ++ .../VoltageSwing/run_05/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_05/CML_core_tb_5.data | 85 ++++++ .../VoltageSwing/run_05/CML_divider.sym | 30 ++ .../VoltageSwing/run_05/conditions.yaml | 9 + .../parameters/VoltageSwing/run_06/.spiceinit | 30 ++ .../VoltageSwing/run_06/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_06/CML_core_tb_6.data | 85 ++++++ .../VoltageSwing/run_06/CML_divider.sym | 30 ++ .../VoltageSwing/run_06/conditions.yaml | 9 + .../parameters/VoltageSwing/run_07/.spiceinit | 30 ++ .../VoltageSwing/run_07/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_07/CML_core_tb_7.data | 85 ++++++ .../VoltageSwing/run_07/CML_divider.sym | 30 ++ .../VoltageSwing/run_07/conditions.yaml | 9 + .../parameters/VoltageSwing/run_08/.spiceinit | 30 ++ .../VoltageSwing/run_08/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_08/CML_core_tb_8.data | 85 ++++++ .../VoltageSwing/run_08/CML_divider.sym | 30 ++ .../VoltageSwing/run_08/conditions.yaml | 9 + .../parameters/VoltageSwing/run_09/.spiceinit | 30 ++ .../VoltageSwing/run_09/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_09/CML_core_tb_9.data | 85 ++++++ .../VoltageSwing/run_09/CML_divider.sym | 30 ++ .../VoltageSwing/run_09/conditions.yaml | 9 + .../parameters/VoltageSwing/run_10/.spiceinit | 30 ++ .../VoltageSwing/run_10/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_10/CML_core_tb_10.data | 85 ++++++ .../VoltageSwing/run_10/CML_divider.sym | 30 ++ .../VoltageSwing/run_10/conditions.yaml | 9 + .../parameters/VoltageSwing/run_11/.spiceinit | 30 ++ .../VoltageSwing/run_11/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_11/CML_core_tb_11.data | 85 ++++++ .../VoltageSwing/run_11/CML_divider.sym | 30 ++ .../VoltageSwing/run_11/conditions.yaml | 9 + .../parameters/VoltageSwing/run_12/.spiceinit | 30 ++ .../VoltageSwing/run_12/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_12/CML_core_tb_12.data | 85 ++++++ .../VoltageSwing/run_12/CML_divider.sym | 30 ++ .../VoltageSwing/run_12/conditions.yaml | 9 + .../parameters/VoltageSwing/run_13/.spiceinit | 30 ++ .../VoltageSwing/run_13/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_13/CML_core_tb_13.data | 85 ++++++ .../VoltageSwing/run_13/CML_divider.sym | 30 ++ .../VoltageSwing/run_13/conditions.yaml | 9 + .../parameters/VoltageSwing/run_14/.spiceinit | 30 ++ .../VoltageSwing/run_14/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_14/CML_core_tb_14.data | 85 ++++++ .../VoltageSwing/run_14/CML_divider.sym | 30 ++ .../VoltageSwing/run_14/conditions.yaml | 9 + .../parameters/VoltageSwing/run_15/.spiceinit | 30 ++ .../VoltageSwing/run_15/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_15/CML_core_tb_15.data | 85 ++++++ .../VoltageSwing/run_15/CML_divider.sym | 30 ++ .../VoltageSwing/run_15/conditions.yaml | 9 + .../parameters/VoltageSwing/run_16/.spiceinit | 30 ++ .../VoltageSwing/run_16/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_16/CML_core_tb_16.data | 85 ++++++ .../VoltageSwing/run_16/CML_divider.sym | 30 ++ .../VoltageSwing/run_16/conditions.yaml | 9 + .../parameters/VoltageSwing/run_17/.spiceinit | 30 ++ .../VoltageSwing/run_17/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_17/CML_core_tb_17.data | 85 ++++++ .../VoltageSwing/run_17/CML_divider.sym | 30 ++ .../VoltageSwing/run_17/conditions.yaml | 9 + .../parameters/VoltageSwing/run_18/.spiceinit | 30 ++ .../VoltageSwing/run_18/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_18/CML_core_tb_18.data | 85 ++++++ .../VoltageSwing/run_18/CML_divider.sym | 30 ++ .../VoltageSwing/run_18/conditions.yaml | 9 + .../parameters/VoltageSwing/run_19/.spiceinit | 30 ++ .../VoltageSwing/run_19/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_19/CML_core_tb_19.data | 85 ++++++ .../VoltageSwing/run_19/CML_divider.sym | 30 ++ .../VoltageSwing/run_19/conditions.yaml | 9 + .../parameters/VoltageSwing/run_20/.spiceinit | 30 ++ .../VoltageSwing/run_20/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_20/CML_core_tb_20.data | 85 ++++++ .../VoltageSwing/run_20/CML_divider.sym | 30 ++ .../VoltageSwing/run_20/conditions.yaml | 9 + .../parameters/VoltageSwing/run_21/.spiceinit | 30 ++ .../VoltageSwing/run_21/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_21/CML_core_tb_21.data | 85 ++++++ .../VoltageSwing/run_21/CML_divider.sym | 30 ++ .../VoltageSwing/run_21/conditions.yaml | 9 + .../parameters/VoltageSwing/run_22/.spiceinit | 30 ++ .../VoltageSwing/run_22/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_22/CML_core_tb_22.data | 85 ++++++ .../VoltageSwing/run_22/CML_divider.sym | 30 ++ .../VoltageSwing/run_22/conditions.yaml | 9 + .../parameters/VoltageSwing/run_23/.spiceinit | 30 ++ .../VoltageSwing/run_23/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_23/CML_core_tb_23.data | 85 ++++++ .../VoltageSwing/run_23/CML_divider.sym | 30 ++ .../VoltageSwing/run_23/conditions.yaml | 9 + .../parameters/VoltageSwing/run_24/.spiceinit | 30 ++ .../VoltageSwing/run_24/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_24/CML_core_tb_24.data | 85 ++++++ .../VoltageSwing/run_24/CML_divider.sym | 30 ++ .../VoltageSwing/run_24/conditions.yaml | 9 + .../parameters/VoltageSwing/run_25/.spiceinit | 30 ++ .../VoltageSwing/run_25/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_25/CML_core_tb_25.data | 85 ++++++ .../VoltageSwing/run_25/CML_divider.sym | 30 ++ .../VoltageSwing/run_25/conditions.yaml | 9 + .../parameters/VoltageSwing/run_26/.spiceinit | 30 ++ .../VoltageSwing/run_26/CML_core_tb.sch | 71 +++++ .../VoltageSwing/run_26/CML_core_tb_26.data | 85 ++++++ .../VoltageSwing/run_26/CML_divider.sym | 30 ++ .../VoltageSwing/run_26/conditions.yaml | 9 + .../VoltageSwing/simulation_summary.csv | 28 ++ .../VoltageSwing/simulation_summary.md | 31 +++ .../runs/RUN_2025-11-11_17-57-35/summary.md | 11 + .../parameters/ac_params/CML_core_tb.sch | 71 +++++ .../parameters/ac_params/run_00/.spiceinit | 30 ++ .../ac_params/run_00/CML_core_tb.sch | 71 +++++ .../ac_params/run_00/CML_core_tb_0.data | 85 ++++++ .../ac_params/run_00/CML_divider.sym | 30 ++ .../ac_params/run_00/conditions.yaml | 9 + .../parameters/ac_params/run_01/.spiceinit | 30 ++ .../ac_params/run_01/CML_core_tb.sch | 71 +++++ .../ac_params/run_01/CML_core_tb_1.data | 85 ++++++ .../ac_params/run_01/CML_divider.sym | 30 ++ .../ac_params/run_01/conditions.yaml | 9 + .../parameters/ac_params/run_02/.spiceinit | 30 ++ .../ac_params/run_02/CML_core_tb.sch | 71 +++++ .../ac_params/run_02/CML_core_tb_2.data | 85 ++++++ .../ac_params/run_02/CML_divider.sym | 30 ++ .../ac_params/run_02/conditions.yaml | 9 + .../parameters/ac_params/run_03/.spiceinit | 30 ++ .../ac_params/run_03/CML_core_tb.sch | 71 +++++ .../ac_params/run_03/CML_core_tb_3.data | 85 ++++++ .../ac_params/run_03/CML_divider.sym | 30 ++ .../ac_params/run_03/conditions.yaml | 9 + .../parameters/ac_params/run_04/.spiceinit | 30 ++ .../ac_params/run_04/CML_core_tb.sch | 71 +++++ .../ac_params/run_04/CML_core_tb_4.data | 85 ++++++ .../ac_params/run_04/CML_divider.sym | 30 ++ .../ac_params/run_04/conditions.yaml | 9 + .../parameters/ac_params/run_05/.spiceinit | 30 ++ .../ac_params/run_05/CML_core_tb.sch | 71 +++++ .../ac_params/run_05/CML_core_tb_5.data | 85 ++++++ .../ac_params/run_05/CML_divider.sym | 30 ++ .../ac_params/run_05/conditions.yaml | 9 + .../parameters/ac_params/run_06/.spiceinit | 30 ++ .../ac_params/run_06/CML_core_tb.sch | 71 +++++ .../ac_params/run_06/CML_core_tb_6.data | 85 ++++++ .../ac_params/run_06/CML_divider.sym | 30 ++ .../ac_params/run_06/conditions.yaml | 9 + .../parameters/ac_params/run_07/.spiceinit | 30 ++ .../ac_params/run_07/CML_core_tb.sch | 71 +++++ .../ac_params/run_07/CML_core_tb_7.data | 85 ++++++ .../ac_params/run_07/CML_divider.sym | 30 ++ .../ac_params/run_07/conditions.yaml | 9 + .../parameters/ac_params/run_08/.spiceinit | 30 ++ .../ac_params/run_08/CML_core_tb.sch | 71 +++++ .../ac_params/run_08/CML_core_tb_8.data | 85 ++++++ .../ac_params/run_08/CML_divider.sym | 30 ++ .../ac_params/run_08/conditions.yaml | 9 + .../parameters/ac_params/run_09/.spiceinit | 30 ++ .../ac_params/run_09/CML_core_tb.sch | 71 +++++ .../ac_params/run_09/CML_core_tb_9.data | 85 ++++++ .../ac_params/run_09/CML_divider.sym | 30 ++ .../ac_params/run_09/conditions.yaml | 9 + .../parameters/ac_params/run_10/.spiceinit | 30 ++ .../ac_params/run_10/CML_core_tb.sch | 71 +++++ .../ac_params/run_10/CML_core_tb_10.data | 85 ++++++ .../ac_params/run_10/CML_divider.sym | 30 ++ .../ac_params/run_10/conditions.yaml | 9 + .../parameters/ac_params/run_11/.spiceinit | 30 ++ .../ac_params/run_11/CML_core_tb.sch | 71 +++++ .../ac_params/run_11/CML_core_tb_11.data | 85 ++++++ .../ac_params/run_11/CML_divider.sym | 30 ++ .../ac_params/run_11/conditions.yaml | 9 + .../parameters/ac_params/run_12/.spiceinit | 30 ++ .../ac_params/run_12/CML_core_tb.sch | 71 +++++ .../ac_params/run_12/CML_core_tb_12.data | 85 ++++++ .../ac_params/run_12/CML_divider.sym | 30 ++ .../ac_params/run_12/conditions.yaml | 9 + .../parameters/ac_params/run_13/.spiceinit | 30 ++ .../ac_params/run_13/CML_core_tb.sch | 71 +++++ .../ac_params/run_13/CML_core_tb_13.data | 85 ++++++ .../ac_params/run_13/CML_divider.sym | 30 ++ .../ac_params/run_13/conditions.yaml | 9 + .../parameters/ac_params/run_14/.spiceinit | 30 ++ .../ac_params/run_14/CML_core_tb.sch | 71 +++++ .../ac_params/run_14/CML_core_tb_14.data | 85 ++++++ .../ac_params/run_14/CML_divider.sym | 30 ++ .../ac_params/run_14/conditions.yaml | 9 + .../parameters/ac_params/run_15/.spiceinit | 30 ++ .../ac_params/run_15/CML_core_tb.sch | 71 +++++ .../ac_params/run_15/CML_core_tb_15.data | 85 ++++++ .../ac_params/run_15/CML_divider.sym | 30 ++ .../ac_params/run_15/conditions.yaml | 9 + .../parameters/ac_params/run_16/.spiceinit | 30 ++ .../ac_params/run_16/CML_core_tb.sch | 71 +++++ .../ac_params/run_16/CML_core_tb_16.data | 85 ++++++ .../ac_params/run_16/CML_divider.sym | 30 ++ .../ac_params/run_16/conditions.yaml | 9 + .../parameters/ac_params/run_17/.spiceinit | 30 ++ .../ac_params/run_17/CML_core_tb.sch | 71 +++++ .../ac_params/run_17/CML_core_tb_17.data | 85 ++++++ .../ac_params/run_17/CML_divider.sym | 30 ++ .../ac_params/run_17/conditions.yaml | 9 + .../parameters/ac_params/run_18/.spiceinit | 30 ++ .../ac_params/run_18/CML_core_tb.sch | 71 +++++ .../ac_params/run_18/CML_core_tb_18.data | 85 ++++++ .../ac_params/run_18/CML_divider.sym | 30 ++ .../ac_params/run_18/conditions.yaml | 9 + .../parameters/ac_params/run_19/.spiceinit | 30 ++ .../ac_params/run_19/CML_core_tb.sch | 71 +++++ .../ac_params/run_19/CML_core_tb_19.data | 85 ++++++ .../ac_params/run_19/CML_divider.sym | 30 ++ .../ac_params/run_19/conditions.yaml | 9 + .../parameters/ac_params/run_20/.spiceinit | 30 ++ .../ac_params/run_20/CML_core_tb.sch | 71 +++++ .../ac_params/run_20/CML_core_tb_20.data | 85 ++++++ .../ac_params/run_20/CML_divider.sym | 30 ++ .../ac_params/run_20/conditions.yaml | 9 + .../parameters/ac_params/run_21/.spiceinit | 30 ++ .../ac_params/run_21/CML_core_tb.sch | 71 +++++ .../ac_params/run_21/CML_core_tb_21.data | 85 ++++++ .../ac_params/run_21/CML_divider.sym | 30 ++ .../ac_params/run_21/conditions.yaml | 9 + .../parameters/ac_params/run_22/.spiceinit | 30 ++ .../ac_params/run_22/CML_core_tb.sch | 71 +++++ .../ac_params/run_22/CML_core_tb_22.data | 85 ++++++ .../ac_params/run_22/CML_divider.sym | 30 ++ .../ac_params/run_22/conditions.yaml | 9 + .../parameters/ac_params/run_23/.spiceinit | 30 ++ .../ac_params/run_23/CML_core_tb.sch | 71 +++++ .../ac_params/run_23/CML_core_tb_23.data | 85 ++++++ .../ac_params/run_23/CML_divider.sym | 30 ++ .../ac_params/run_23/conditions.yaml | 9 + .../parameters/ac_params/run_24/.spiceinit | 30 ++ .../ac_params/run_24/CML_core_tb.sch | 71 +++++ .../ac_params/run_24/CML_core_tb_24.data | 85 ++++++ .../ac_params/run_24/CML_divider.sym | 30 ++ .../ac_params/run_24/conditions.yaml | 9 + .../parameters/ac_params/run_25/.spiceinit | 30 ++ .../ac_params/run_25/CML_core_tb.sch | 71 +++++ .../ac_params/run_25/CML_core_tb_25.data | 85 ++++++ .../ac_params/run_25/CML_divider.sym | 30 ++ .../ac_params/run_25/conditions.yaml | 9 + .../parameters/ac_params/run_26/.spiceinit | 30 ++ .../ac_params/run_26/CML_core_tb.sch | 71 +++++ .../ac_params/run_26/CML_core_tb_26.data | 85 ++++++ .../ac_params/run_26/CML_divider.sym | 30 ++ .../ac_params/run_26/conditions.yaml | 9 + .../ac_params/simulation_summary.csv | 28 ++ .../ac_params/simulation_summary.md | 31 +++ .../parameters/ac_params/vo_diff_vs_time.png | Bin 0 -> 188877 bytes .../runs/RUN_2025-11-11_17-59-49/summary.md | 11 + .../CML_divider/testbench/CML_core_tb.sch | 171 ++++++++++++ .../testbench/simulations/CML_core_tb.save | 122 ++++++++ .../CML_divider/testbench/xschemrc | 18 ++ .../CML_divider/xschem/CML_divider.sch | 263 ++++++++++++++++++ .../CML_divider/xschem/CML_divider.sym | 30 ++ .../CML_divider/xschem/xschemrc | 12 + .../cace/differential_oscillator.yaml | 85 ++++++ .../scripts/__pycache__/freq.cpython-310.pyc | Bin 0 -> 704 bytes .../diff_Roscillator/cace/scripts/freq.py | 30 ++ .../cace/templates/diff_oscillator_tb.sch | 65 +++++ .../diff_Roscillator/cace/templates/xschemrc | 18 ++ .../docs/diff_ring_oscillator.md | 50 ++++ .../schematic/frequency.png | Bin 0 -> 42515 bytes .../docs/diff_ring_oscillator_schematic.md | 15 + .../docs/diff_ring_oscillator_schematic.svg | 160 +++++++++++ .../docs/diff_ring_oscillator_symbol.svg | 160 +++++++++++ .../Frequency/diff_oscillator_tb.sch | 42 +++ .../parameters/Frequency/frequency.png | Bin 0 -> 16308 bytes .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/conditions.yaml | 8 + .../Frequency/run_0/diff_oscillator_tb.sch | 42 +++ .../Frequency/run_0/diff_oscillator_tb_0.data | 208 ++++++++++++++ .../Frequency/run_0/diff_ring_oscillator.sym | 27 ++ .../Frequency/simulation_summary.csv | 2 + .../Frequency/simulation_summary.md | 5 + .../runs/RUN_2025-08-20_14-36-06/summary.md | 9 + .../Frequency/diff_oscillator_tb.sch | 42 +++ .../parameters/Frequency/frequency.png | Bin 0 -> 16308 bytes .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/conditions.yaml | 8 + .../Frequency/run_0/diff_oscillator_tb.sch | 42 +++ .../Frequency/run_0/diff_oscillator_tb_0.data | 208 ++++++++++++++ .../Frequency/run_0/diff_ring_oscillator.sym | 27 ++ .../Frequency/simulation_summary.csv | 2 + .../Frequency/simulation_summary.md | 5 + .../runs/RUN_2025-08-20_14-53-50/summary.md | 9 + .../Frequency/diff_oscillator_tb.sch | 42 +++ .../parameters/Frequency/frequency.png | Bin 0 -> 15407 bytes .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/conditions.yaml | 8 + .../Frequency/run_0/diff_oscillator_tb.sch | 42 +++ .../Frequency/run_0/diff_oscillator_tb_0.data | 208 ++++++++++++++ .../Frequency/run_0/diff_ring_oscillator.sym | 27 ++ .../Frequency/simulation_summary.csv | 2 + .../Frequency/simulation_summary.md | 5 + .../runs/RUN_2025-08-20_14-54-56/summary.md | 9 + .../Frequency/diff_oscillator_tb.sch | 61 ++++ .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/conditions.yaml | 8 + .../Frequency/run_0/diff_oscillator_tb.sch | 61 ++++ .../Frequency/run_0/diff_ring_oscillator.sym | 27 ++ .../runs/RUN_2025-08-20_15-04-40/summary.md | 9 + .../Frequency/diff_oscillator_tb.sch | 60 ++++ .../parameters/Frequency/frequency.png | Bin 0 -> 16308 bytes .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/conditions.yaml | 8 + .../Frequency/run_0/diff_oscillator_tb.sch | 60 ++++ .../Frequency/run_0/diff_oscillator_tb_0.data | 208 ++++++++++++++ .../Frequency/run_0/diff_ring_oscillator.sym | 27 ++ .../Frequency/simulation_summary.csv | 2 + .../Frequency/simulation_summary.md | 5 + .../runs/RUN_2025-08-20_15-04-51/summary.md | 9 + .../Frequency/diff_oscillator_tb.sch | 65 +++++ .../parameters/Frequency/frequency.png | Bin 0 -> 44016 bytes .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/conditions.yaml | 8 + .../Frequency/run_0/diff_oscillator_tb.sch | 65 +++++ .../Frequency/run_0/diff_oscillator_tb_0.data | 208 ++++++++++++++ .../Frequency/run_0/diff_ring_oscillator.sym | 27 ++ .../Frequency/simulation_summary.csv | 2 + .../Frequency/simulation_summary.md | 5 + .../runs/RUN_2025-08-20_15-27-09/summary.md | 9 + .../Frequency/diff_oscillator_tb.sch | 65 +++++ .../parameters/Frequency/frequency.png | Bin 0 -> 44016 bytes .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/conditions.yaml | 8 + .../Frequency/run_0/diff_oscillator_tb.sch | 65 +++++ .../Frequency/run_0/diff_oscillator_tb_0.data | 208 ++++++++++++++ .../Frequency/run_0/diff_ring_oscillator.sym | 27 ++ .../Frequency/simulation_summary.csv | 2 + .../Frequency/simulation_summary.md | 5 + .../runs/RUN_2025-08-20_15-28-35/summary.md | 9 + .../Frequency/diff_oscillator_tb.sch | 65 +++++ .../parameters/Frequency/frequency.png | Bin 0 -> 44016 bytes .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/conditions.yaml | 8 + .../Frequency/run_0/diff_oscillator_tb.sch | 65 +++++ .../Frequency/run_0/diff_oscillator_tb_0.data | 208 ++++++++++++++ .../Frequency/run_0/diff_ring_oscillator.sym | 27 ++ .../Frequency/simulation_summary.csv | 2 + .../Frequency/simulation_summary.md | 5 + .../runs/RUN_2025-08-20_15-29-02/summary.md | 9 + .../Frequency/diff_oscillator_tb.sch | 65 +++++ .../parameters/Frequency/frequency.png | Bin 0 -> 44016 bytes .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/conditions.yaml | 8 + .../Frequency/run_0/diff_oscillator_tb.sch | 65 +++++ .../Frequency/run_0/diff_oscillator_tb_0.data | 208 ++++++++++++++ .../Frequency/run_0/diff_ring_oscillator.sym | 27 ++ .../Frequency/simulation_summary.csv | 2 + .../Frequency/simulation_summary.md | 5 + .../runs/RUN_2025-08-20_17-00-02/summary.md | 9 + .../Frequency/diff_oscillator_tb.sch | 65 +++++ .../parameters/Frequency/frequency.png | Bin 0 -> 43353 bytes .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/conditions.yaml | 8 + .../Frequency/run_0/diff_oscillator_tb.sch | 65 +++++ .../Frequency/run_0/diff_oscillator_tb_0.data | 185 ++++++++++++ .../Frequency/run_0/diff_ring_oscillator.sym | 27 ++ .../Frequency/simulation_summary.csv | 2 + .../Frequency/simulation_summary.md | 5 + .../runs/RUN_2025-08-28_13-03-04/summary.md | 9 + .../Frequency/diff_oscillator_tb.sch | 65 +++++ .../parameters/Frequency/frequency.png | Bin 0 -> 43353 bytes .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/conditions.yaml | 8 + .../Frequency/run_0/diff_oscillator_tb.sch | 65 +++++ .../Frequency/run_0/diff_oscillator_tb_0.data | 185 ++++++++++++ .../Frequency/run_0/diff_ring_oscillator.sym | 27 ++ .../Frequency/simulation_summary.csv | 2 + .../Frequency/simulation_summary.md | 5 + .../runs/RUN_2025-08-28_13-08-46/summary.md | 9 + .../Frequency/diff_oscillator_tb.sch | 65 +++++ .../parameters/Frequency/frequency.png | Bin 0 -> 42515 bytes .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/conditions.yaml | 8 + .../Frequency/run_0/diff_oscillator_tb.sch | 65 +++++ .../Frequency/run_0/diff_oscillator_tb_0.data | 185 ++++++++++++ .../Frequency/run_0/diff_ring_oscillator.sym | 27 ++ .../Frequency/simulation_summary.csv | 2 + .../Frequency/simulation_summary.md | 5 + .../runs/RUN_2025-11-11_14-28-29/summary.md | 9 + .../Frequency/diff_oscillator_tb.sch | 65 +++++ .../parameters/Frequency/frequency.png | Bin 0 -> 42515 bytes .../parameters/Frequency/run_0/.spiceinit | 30 ++ .../Frequency/run_0/conditions.yaml | 8 + .../Frequency/run_0/diff_oscillator_tb.sch | 65 +++++ .../Frequency/run_0/diff_oscillator_tb_0.data | 185 ++++++++++++ .../Frequency/run_0/diff_ring_oscillator.sym | 27 ++ .../Frequency/simulation_summary.csv | 2 + .../Frequency/simulation_summary.md | 5 + .../runs/RUN_2025-11-11_17-40-06/summary.md | 9 + .../testbench/diff_oscillator_tb.sch | 98 ++++--- .../testbench/diff_oscillator_tb.sym | 14 + .../diff_Roscillator/testbench/python/freq.py | 54 ++++ .../testbench/python/pn_spectrum.py | 186 +++++++++++++ .../simulations/diff_oscillator_tb.save | 120 ++++---- .../differential_output_phase_noise.png | Bin 0 -> 141938 bytes .../diff_Roscillator/testbench/xschemrc | 2 +- .../xschem/diff_ring_oscillator.sch | 37 +++ .../xschem/diff_ring_oscillator.sym | 27 ++ .../differential_core.sch | 0 .../differential_core.sym | 0 .../diff_Roscillator/xschem/xschemrc | 18 ++ 1237 files changed, 54404 insertions(+), 112 deletions(-) create mode 100644 modules/module_4_type_2_PLL/CML_divider/cace/CML_divider.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/cace/scripts/__pycache__/freq.cpython-310.pyc create mode 100644 modules/module_4_type_2_PLL/CML_divider/cace/scripts/freq.py create mode 100644 modules/module_4_type_2_PLL/CML_divider/cace/templates/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/cace/templates/xschemrc create mode 100644 modules/module_4_type_2_PLL/CML_divider/docs/CML_divider.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/docs/CML_divider/schematic/frequency.png create mode 100644 modules/module_4_type_2_PLL/CML_divider/docs/CML_divider/schematic/vo_diff_vs_time.png create mode 100644 modules/module_4_type_2_PLL/CML_divider/docs/CML_divider_schematic.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/docs/CML_divider_schematic.svg create mode 100644 modules/module_4_type_2_PLL/CML_divider/docs/CML_divider_symbol.svg create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-12/parameters/Frequency/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-12/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-12/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-12/parameters/Frequency/run_0/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-12/parameters/Frequency/run_0/CML_core_tb_0.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-12/parameters/Frequency/run_0/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-12/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-12/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-12/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-12/summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-39/parameters/Frequency/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-39/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-39/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-39/parameters/Frequency/run_0/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-39/parameters/Frequency/run_0/CML_core_tb_0.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-39/parameters/Frequency/run_0/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-39/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-39/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-39/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-39/summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/CML_core_tb_0.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/CML_core_tb_1.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/CML_core_tb_2.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/CML_core_tb_3.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/CML_core_tb_4.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/CML_core_tb_5.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/CML_core_tb_6.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/CML_core_tb_7.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/CML_core_tb_8.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/CML_core_tb_9.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/CML_core_tb_10.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/CML_core_tb_11.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/CML_core_tb_12.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/CML_core_tb_13.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/CML_core_tb_14.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/CML_core_tb_15.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/CML_core_tb_16.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/CML_core_tb_17.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/CML_core_tb_0.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-30/parameters/Frequency/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-30/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-30/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-30/parameters/Frequency/run_0/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-30/parameters/Frequency/run_0/CML_core_tb_0.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-30/parameters/Frequency/run_0/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-30/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-30/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-30/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-30/summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-02/parameters/Frequency/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-02/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-02/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-02/parameters/Frequency/run_0/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-02/parameters/Frequency/run_0/CML_core_tb_0.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-02/parameters/Frequency/run_0/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-02/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-02/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-02/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-02/summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/CML_core_tb_0.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/CML_core_tb_1.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/CML_core_tb_2.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/CML_core_tb_3.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/CML_core_tb_4.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/CML_core_tb_5.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/CML_core_tb_6.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/CML_core_tb_7.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/CML_core_tb_8.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/CML_core_tb_9.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/CML_core_tb_10.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/CML_core_tb_11.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/CML_core_tb_12.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/CML_core_tb_13.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/CML_core_tb_14.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/CML_core_tb_15.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/CML_core_tb_16.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/CML_core_tb_17.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/CML_core_tb_0.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/CML_core_tb_1.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/CML_core_tb_2.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/CML_core_tb_3.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/CML_core_tb_4.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/CML_core_tb_5.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/CML_core_tb_6.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/CML_core_tb_7.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/CML_core_tb_8.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/CML_core_tb_9.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/CML_core_tb_10.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/CML_core_tb_11.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/CML_core_tb_12.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/CML_core_tb_13.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/CML_core_tb_14.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/CML_core_tb_15.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/CML_core_tb_16.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/CML_core_tb_17.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/CML_core_tb_18.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/CML_core_tb_19.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/CML_core_tb_20.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/CML_core_tb_21.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/CML_core_tb_22.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/CML_core_tb_23.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/CML_core_tb_24.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/CML_core_tb_25.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/CML_core_tb_26.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/CML_core_tb_0.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/CML_core_tb_1.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/CML_core_tb_2.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/CML_core_tb_3.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/CML_core_tb_4.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/CML_core_tb_5.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/CML_core_tb_6.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/CML_core_tb_7.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/CML_core_tb_8.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/CML_core_tb_9.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/CML_core_tb_10.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/CML_core_tb_11.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/CML_core_tb_12.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/CML_core_tb_13.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/CML_core_tb_14.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/CML_core_tb_15.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/CML_core_tb_16.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/CML_core_tb_17.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/CML_core_tb_18.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/CML_core_tb_19.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/CML_core_tb_20.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/CML_core_tb_21.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/CML_core_tb_22.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/CML_core_tb_23.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/CML_core_tb_24.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/CML_core_tb_25.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/CML_core_tb_26.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/CML_core_tb_0.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/CML_core_tb_1.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/CML_core_tb_2.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/CML_core_tb_3.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/CML_core_tb_4.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/CML_core_tb_5.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/CML_core_tb_6.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/CML_core_tb_7.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/CML_core_tb_8.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/CML_core_tb_9.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/CML_core_tb_10.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/CML_core_tb_11.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/CML_core_tb_12.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/CML_core_tb_13.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/CML_core_tb_14.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/CML_core_tb_15.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/CML_core_tb_16.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/CML_core_tb_17.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/CML_core_tb_18.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/CML_core_tb_19.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/CML_core_tb_20.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/CML_core_tb_21.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/CML_core_tb_22.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/CML_core_tb_23.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/CML_core_tb_24.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/CML_core_tb_25.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/CML_core_tb_26.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/CML_core_tb_0.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/CML_core_tb_1.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/CML_core_tb_2.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/CML_core_tb_3.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/CML_core_tb_4.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/CML_core_tb_5.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/CML_core_tb_6.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/CML_core_tb_7.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/CML_core_tb_8.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/CML_core_tb_9.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/CML_core_tb_10.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/CML_core_tb_11.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/CML_core_tb_12.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/CML_core_tb_13.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/CML_core_tb_14.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/CML_core_tb_15.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/CML_core_tb_16.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/CML_core_tb_17.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/CML_core_tb_18.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/CML_core_tb_19.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/CML_core_tb_20.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/CML_core_tb_21.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/CML_core_tb_22.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/CML_core_tb_23.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/CML_core_tb_24.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/CML_core_tb_25.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/CML_core_tb_26.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/CML_core_tb_0.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/CML_core_tb_1.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/CML_core_tb_2.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/CML_core_tb_3.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/CML_core_tb_4.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/CML_core_tb_5.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/CML_core_tb_6.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/CML_core_tb_7.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/CML_core_tb_8.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/CML_core_tb_9.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/CML_core_tb_10.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/CML_core_tb_11.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/CML_core_tb_12.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/CML_core_tb_13.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/CML_core_tb_14.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/CML_core_tb_15.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/CML_core_tb_16.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/CML_core_tb_17.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/CML_core_tb_18.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/CML_core_tb_19.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/CML_core_tb_20.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/CML_core_tb_21.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/CML_core_tb_22.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/CML_core_tb_23.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/CML_core_tb_24.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/CML_core_tb_25.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/CML_core_tb_26.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/CML_core_tb_0.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/CML_core_tb_1.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/CML_core_tb_2.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/CML_core_tb_3.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/CML_core_tb_4.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/CML_core_tb_5.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/CML_core_tb_6.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/CML_core_tb_7.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/CML_core_tb_8.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/CML_core_tb_9.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/CML_core_tb_10.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/CML_core_tb_11.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/CML_core_tb_12.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/CML_core_tb_13.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/CML_core_tb_14.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/CML_core_tb_15.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/CML_core_tb_16.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/CML_core_tb_17.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/CML_core_tb_18.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/CML_core_tb_19.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/CML_core_tb_20.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/CML_core_tb_21.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/CML_core_tb_22.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/CML_core_tb_23.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/CML_core_tb_24.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/CML_core_tb_25.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/.spiceinit create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/CML_core_tb_26.data create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/vo_diff_vs_time.png create mode 100644 modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/summary.md create mode 100644 modules/module_4_type_2_PLL/CML_divider/testbench/CML_core_tb.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/testbench/simulations/CML_core_tb.save create mode 100644 modules/module_4_type_2_PLL/CML_divider/testbench/xschemrc create mode 100644 modules/module_4_type_2_PLL/CML_divider/xschem/CML_divider.sch create mode 100644 modules/module_4_type_2_PLL/CML_divider/xschem/CML_divider.sym create mode 100644 modules/module_4_type_2_PLL/CML_divider/xschem/xschemrc create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/cace/differential_oscillator.yaml create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/cace/scripts/__pycache__/freq.cpython-310.pyc create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/cace/scripts/freq.py create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/cace/templates/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/cace/templates/xschemrc create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator/schematic/frequency.png create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator_schematic.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator_schematic.svg create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator_symbol.svg create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/diff_oscillator_tb_0.data create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/diff_ring_oscillator.sym create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/diff_oscillator_tb_0.data create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/diff_ring_oscillator.sym create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/diff_oscillator_tb_0.data create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/diff_ring_oscillator.sym create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/diff_ring_oscillator.sym create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/diff_oscillator_tb_0.data create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/diff_ring_oscillator.sym create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-27-09/parameters/Frequency/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-27-09/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-27-09/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-27-09/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-27-09/parameters/Frequency/run_0/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-27-09/parameters/Frequency/run_0/diff_oscillator_tb_0.data create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-27-09/parameters/Frequency/run_0/diff_ring_oscillator.sym create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-27-09/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-27-09/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-27-09/summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-28-35/parameters/Frequency/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-28-35/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-28-35/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-28-35/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-28-35/parameters/Frequency/run_0/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-28-35/parameters/Frequency/run_0/diff_oscillator_tb_0.data create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-28-35/parameters/Frequency/run_0/diff_ring_oscillator.sym create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-28-35/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-28-35/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-28-35/summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-29-02/parameters/Frequency/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-29-02/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-29-02/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-29-02/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-29-02/parameters/Frequency/run_0/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-29-02/parameters/Frequency/run_0/diff_oscillator_tb_0.data create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-29-02/parameters/Frequency/run_0/diff_ring_oscillator.sym create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-29-02/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-29-02/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-29-02/summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_17-00-02/parameters/Frequency/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_17-00-02/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_17-00-02/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_17-00-02/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_17-00-02/parameters/Frequency/run_0/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_17-00-02/parameters/Frequency/run_0/diff_oscillator_tb_0.data create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_17-00-02/parameters/Frequency/run_0/diff_ring_oscillator.sym create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_17-00-02/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_17-00-02/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_17-00-02/summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/diff_oscillator_tb_0.data create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/diff_ring_oscillator.sym create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/diff_oscillator_tb_0.data create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/diff_ring_oscillator.sym create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/diff_oscillator_tb_0.data create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/diff_ring_oscillator.sym create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/frequency.png create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/.spiceinit create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/conditions.yaml create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/diff_oscillator_tb.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/diff_oscillator_tb_0.data create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/diff_ring_oscillator.sym create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/simulation_summary.csv create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/simulation_summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/summary.md create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/testbench/diff_oscillator_tb.sym create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/testbench/python/freq.py create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/testbench/python/pn_spectrum.py create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/testbench/spectrum/differential_output_phase_noise.png create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/xschem/diff_ring_oscillator.sch create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/xschem/diff_ring_oscillator.sym rename modules/module_4_type_2_PLL/diff_Roscillator/{schematic => xschem}/differential_core.sch (100%) rename modules/module_4_type_2_PLL/diff_Roscillator/{schematic => xschem}/differential_core.sym (100%) create mode 100644 modules/module_4_type_2_PLL/diff_Roscillator/xschem/xschemrc diff --git a/modules/module_4_type_2_PLL/CML_divider/cace/CML_divider.yaml b/modules/module_4_type_2_PLL/CML_divider/cace/CML_divider.yaml new file mode 100644 index 00000000..e0ce793a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/cace/CML_divider.yaml @@ -0,0 +1,115 @@ +#-------------------------------------------------------------- +# CACE circuit characterization file +#-------------------------------------------------------------- + +name: CML_divider +description: Current mode logic divider +PDK: ihp-sg13g2 + +cace_format: 5.2 + +authorship: + designer: Phillip F. Baade-Pedersen + company: IHP + creation_date: + license: Apache 2.0 + +paths: + root: .. + schematic: xschem/ + netlist: xschem/simulations + documentation: docs + +pins: + VDD: + description: Positive analog power supply + type: power + direction: inout + Vmin: 0.8 + Vmax: 1.6 + Vinplus: + description: Positive Input + type: signal + direction: input + Vinminus: + description: Negative Input + type: signal + direction: input + +default_conditions: + vdd: + description: Analog power supply voltage + display: Vdd + unit: V + typical: 1.2 + corner: + description: Process corner + display: Corner + typical: tt + temperature: + description: Ambient temperature + display: Temp + unit: °C + typical: 27 + +parameters: + ac_params: + description: Frequency characterization of the divider + display: CML divider frequency response + spec: + frequency: + display: Frequency + description: Output frequency of the divider + unit: GHz + minimum: + value: 4.3 + typical: + value: 5.0 + maximum: + value: 5.2 + amplitude: + display: Amplitude + description: Differential output amplitude (half swing) + unit: V + minimum: + value: 0.2 + typical: + value: 0.4 + maximum: + value: 0.6 + voltage_swing: + display: Voltage swing + description: Differential peak-to-peak output swing + unit: V + minimum: + value: 0.4 + typical: + value: 0.8 + maximum: + value: 1.2 + tool: + ngspice: + template: CML_core_tb.sch + format: ascii + suffix: .data + variables: [time, vo_diff] + script: freq.py + script_variables: [frequency, amplitude, voltage_swing] + plot: + vo_diff_vs_time: + type: xyplot + xaxis: time + yaxis: vo_diff + conditions: + vdd: + minimum: 0.8 + typical: 1.2 + maximum: 1.6 + corner: + enumerate: [tt, ff, ss] + temperature: + minimum: -40 + typical: 27 + maximum: 80 + + diff --git a/modules/module_4_type_2_PLL/CML_divider/cace/scripts/__pycache__/freq.cpython-310.pyc b/modules/module_4_type_2_PLL/CML_divider/cace/scripts/__pycache__/freq.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6523f1edfe29df3546f7001eb2feb7e343e923f8 GIT binary patch literal 863 zcmYjPJ#Q2-5cSyJkK6lDBqEeRM`*4|Bx(dfNR(+(k><3ly{FCX?JlQS{P8T%fBha;unl+3;(P)tG1mT&A2*FOvxRG9gqIcm$8af@>yOail4J-dP`bt3Mk$*n=?#|wyWA%%!;;A zm8;suVr;ZqnWo@j>;0IJkICMW*&hUs-GHZ_4%rrZejiaE6bZ*YzXl~1%swG5h|2{x zM=F}bKa0PL^PnQgq~}|pOsNttpRzu3>@vEEd{`4+Y~dj2#$om{CdK#~yj1BI-X}gG zZP}+j@#!J!6Us<@9C*m^Ax?d~r9S%s@j+1QGh*3}4SnW^2dp3Yks46tu^-IAkI6>V z>#oOXc81bbOO468ovErUZ^OwLAefWw##G>-H2UL8H^l}A`Le4kw^AC%>$Z0JT+i%P z)y(hr|9nk10P1h{>2!#^=`hNT$u}r!-Jo3RoG_F_QI-x9f=~fP{(5OkXZrwW{^2 Oa340j(Gg4G1^)wphSre) literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/CML_divider/cace/scripts/freq.py b/modules/module_4_type_2_PLL/CML_divider/cace/scripts/freq.py new file mode 100644 index 00000000..3c457ffe --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/cace/scripts/freq.py @@ -0,0 +1,41 @@ +from typing import Any +import numpy as np + +def postprocess(results: dict[str, list], conditions: dict[str, Any]) -> dict[str, list]: + # Extract waveform + t = np.array(results['time']) + v = np.array(results['vo_diff']) + + if len(t) < 2 or len(v) == 0: + return { + 'frequency': [0.0], + 'amplitude': [0.0], + 'voltage_swing': [0.0] + } + + # --- Compute sampling frequency --- + dt = np.mean(np.diff(t)) + fs = 1.0 / dt + + # --- FFT to find main tone --- + Y = np.fft.fft(v - np.mean(v)) # remove DC + freqs = np.fft.fftfreq(len(Y), d=dt) + + # Use positive frequencies only + mask = freqs > 0 + freqs = freqs[mask] + Y = np.abs(Y[mask]) + + freq_peak = freqs[np.argmax(Y)] + + # --- Compute amplitude and voltage swing --- + v_max = np.max(v) + v_min = np.min(v) + voltage_swing = v_max - v_min + amplitude = voltage_swing / 2.0 + + return { + 'frequency': [freq_peak], + 'amplitude': [amplitude], + 'voltage_swing': [voltage_swing] + } diff --git a/modules/module_4_type_2_PLL/CML_divider/cace/templates/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/cace/templates/CML_core_tb.sch new file mode 100644 index 00000000..48f6f0bb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/cace/templates/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=CACE\{vdd\} savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/cace/templates/xschemrc b/modules/module_4_type_2_PLL/CML_divider/cace/templates/xschemrc new file mode 100644 index 00000000..36e35c71 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/cace/templates/xschemrc @@ -0,0 +1 @@ +source [file dirname [info script]]/../../xschem/xschemrc diff --git a/modules/module_4_type_2_PLL/CML_divider/docs/CML_divider.md b/modules/module_4_type_2_PLL/CML_divider/docs/CML_divider.md new file mode 100644 index 00000000..06216088 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/docs/CML_divider.md @@ -0,0 +1,54 @@ +# CML_divider + +- Description: Current mode logic divider +- PDK: ihp-sg13g2 + +## Authorship + +- Designer: Phillip F. Baade-Pedersen +- Company: IHP +- Created: None +- License: Apache 2.0 +- Last modified: None + +## Pins + +- VDD + + Description: Positive analog power supply + + Type: power + + Direction: inout + + Vmin: 0.8 + + Vmax: 1.6 +- Vinplus + + Description: Positive Input + + Type: signal + + Direction: input +- Vinminus + + Description: Negative Input + + Type: signal + + Direction: input + +## Default Conditions + +- vdd + + Description: Analog power supply voltage + + Display: Vdd + + Unit: V + + Typical: 1.2 +- corner + + Description: Process corner + + Display: Corner + + Typical: tt +- temperature + + Description: Ambient temperature + + Display: Temp + + Unit: °C + + Typical: 27 + +## Symbol + +![Symbol of CML_divider](CML_divider_symbol.svg) + +## Schematic + +![Schematic of CML_divider](CML_divider_schematic.svg) diff --git a/modules/module_4_type_2_PLL/CML_divider/docs/CML_divider/schematic/frequency.png b/modules/module_4_type_2_PLL/CML_divider/docs/CML_divider/schematic/frequency.png new file mode 100644 index 0000000000000000000000000000000000000000..e4b0a21a410ea45152b21e69092b27c4fd38834f GIT binary patch literal 187075 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�wTWw%38sW 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 t6~vlD*Y&45GNmD literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/CML_divider/docs/CML_divider/schematic/vo_diff_vs_time.png b/modules/module_4_type_2_PLL/CML_divider/docs/CML_divider/schematic/vo_diff_vs_time.png new file mode 100644 index 0000000000000000000000000000000000000000..b3049faebba33274e93528743f61a9e391cf7306 GIT binary patch literal 188877 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�wTWw%38sW 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 + + + diff --git a/modules/module_4_type_2_PLL/CML_divider/docs/CML_divider_symbol.svg b/modules/module_4_type_2_PLL/CML_divider/docs/CML_divider_symbol.svg new file mode 100644 index 00000000..5de9a6fa --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/docs/CML_divider_symbol.svg @@ -0,0 +1,160 @@ + + + + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-12/parameters/Frequency/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-12/parameters/Frequency/CML_core_tb.sch new file mode 100644 index 00000000..48f6f0bb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-12/parameters/Frequency/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=CACE\{vdd\} savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-12/parameters/Frequency/frequency.png b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-37-12/parameters/Frequency/frequency.png new file mode 100644 index 0000000000000000000000000000000000000000..cfba68b3a5e2c2aaf1a17272aa6e745e414b03e7 GIT binary patch literal 33283 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

H~fblLfGZUImjCZX{5|w(7!1AyTc^f)H zxRcSlC}0!S1EU!+h!N0~eJ(4DBIY*zT_6TI8frFTC)|%mHDu-F78*}y8VsAqtrWa- z>z*rd^WlpFV1LMOOV*djUYm3uOfyM9v5Yfv=;J)QqArWBF=A%?`XFF{>^ARk!-Cn5 zP;R8|@4Ki9A4H#K8Xs2*(DCOf@y+EAps8sRC>5$ild~Q~&S1$Eq1H3XS!A(QdpEAA*Mm>^Uf$Yxdm_3dL;+>xD~Ji0RWj37lJj?n(0E zgc`N`73uTIJT>=r&Mz;db+>q)f8q8hoFk{xZlYHI8MdoNE^c+a*jrmEp>IJgOjk2c zM|D??(`n_Up6B{wM1u=54l$SU$APX95aPjH1Lv!L^J{}U1l#&((F3s0HtzUBkoD{~ z-wc8k3Sp}PjMJYg_-iH9vk06K?HwKa-87MRiHJH?6`yoK@+21X6_Lx0NlhgK4~itX z{s7Y-5&@qtGE0T}JTHTnyXdAi@VM`~&+o0ZGx zHy0~JxA5KL(0t~*Ah;F`fTHCcM1&BO$v53mRPe5UP$XD2%l!TQk-oWZ_d<~eXQv!a z#=y6S!mcdPKfQrT0-)mpZ2x{Mw;cV_oJ+m5oT!iR$067P1h53UHTHe#~nw0;qOn%8H{_M+;o(phO>kxN&ZT;u3;ADF1^H0&2fbPrbpuoSP242R5+NMz4>Lw4c~#06+7(&MQ#mF!~mhDP}t|% zUmgoJC9B47L#(H*U1+sB_lr?pO!!_pVPUc`(A^x@u3ZeH;t0eFziUg|k&4%7&l`Kn zz>4+zBvNJagyV`LRbe7SAODe8DmRhcOWi+>uACZgMAL$;2Pv5t(+u(0li7T4f-LJ%1@GfZx7VzbE_oi}U)|NYidC z(PF}Grbh=R8YUz3bq>>Ov%AnG+`E4ta%Phu(!lY{y8nv(#GAJizDh0mb%UAw9p4BUpTUAx1*I*xDmH%eemO$=Sh4qK`qs?5S z=eHY2{8oP1X!*Zd{1RncrI4<+lxq;Jrg=v}3H{s^T|3Vh-;F8r>8b<0Qj#NujV%=; zn=1qB*kxZ#aM3RFrasM_p-?PgV3^1tL`k@oZ^ngj|nWVxQgJKTl?L<+ge(~$%|Uo1tw)OSpDcl zyNcf4azz)7}SDxa6EZZ#@-1AzL5M6h52H4 ztO*@M$R+A@F0h}jKhBwxOjvp=8ANfTrKskJRia%(3+}uV))K*)nEh5st8jIV9F4^o zeVGl9{RLNU#`8l(q(OH*nXAnG&{l&*l90#3Tg#3ia=X%QqA_>}Ro-u(Y_qC2->R&6 zNGtJ*>2A2pEl2F`OCQo@rpLJ?MZ2LYq`^K$(h*zNg#J?TxvA<;6uN$S`bLqT-SxU; z9YeY!_il7CyXCW_5s#`pQaB_b2YFi&QtAdVaoy;6EuM{J*axz*a!tB!Ahask0hb?TqV?$>HX6*i`5)(& z?5$xkz2f>zD=H9|KX~&X+H=;e-1lx92DxTSJ{Iy_v=5|QO5_%nup5CI#uM6Dw|W=TM)?4xXmiFt=m_buV?M_ zNW>((DOMJJ+!K)B@z1-*ll9F&$CkFHoI=)cD)xWG=4_ZMLo$-Xx@Br*e=o2%!+ZCh zcDk6N&`yr5Xg8P0oBS596KmSW^pQp{!C!tzd9!}`DzA>S@&}~8a51tCTSY6<^ZoJO zK?^zErR)2-;l#q&Xn#Abt72WTLT#tO_!hpY7_QZe!rT0+zQ)8Iq!|)}1J9U?IA7eW zX#KL>H@;cM-k;4-`)>7#xy@syVJnB;q5JqDcGTy>ZidJeMPCzhY@W-QvUG`%pbk$@ ze`M*;2}CArV3;|gHfgxV+x;Ssk(+tPAFCR~NtEUDLmUq5{|xlm+JPIN(r-v%M7P-2 zjp(%z1-nkfq@h7=-@qtv_8FxNlKa2KTW?M+nL{)sB;?pC!FdKe7P#LkSROgOz^7mWT3$X}| z_?m8ALTBdLL4RpmD#=1Y9PT7x|I616&Ya-((lbO@?s?@_qN^TP%+m-L;ETaF;jalmt-6HggB$>{=%N>jd(m zey@paR%@51WH#EKeu^`ndGy41v0tl)gq61}jekeK+g!9S%ifAjZaks@RXEcbyH&qJ zYOP;=O}U`B>CL&T>nH3$kBtFpzb-pX|6(R5>50JyAI{Wbs=}j;&24dwQ@pT5BX&~R zMTgcJhxTVVGa33+tS6}hXDlPMzbHdn+(~P2;9e;+dxTT(>S>G_b?47{UaZad?bw_j ze;54ox7zCyWD5wGd|zCLQw4MPd=k1NFI7D7e6+Y0OUA<$UH9;SVGulp1L6rL{qzcd zipdBz-k^jv1Y=kIyOB=5lI;q}l*gx=Xs@8@OIkXk>CMFZ%*>e?^%$g-VXfu|*hkt` zfgTUTJJC~O|7)=U^Gjn}v`Ny|*)PhsIrcQeoVXyVk8XmHsZgV$&sj_#m;ZY%@})|Wa6`_x2RVo7aJMQBJ@x0dyva)zEnM|X znL^yo(j}y>zbPogKYo8Se@*N}kus=(=PP-Cm2N3vm5bAaYALS$^sWW2 z5LIpxQ?6RU_nS8@OBSkQ$`pKmmFiM! zdzY8e9j!&ps1Eld7VbT~^D15kWDA(X2v&(^4%Tm@1z?9!JV^!tc8sAYa!={O)2B~a^uC`3g>COD z*jSw^{xIj^f=M#%D)YDCd;pU<*u1|;;qGpDW!4OVAteKy?5ac}!33z{K;RfW8`EK4 z)CtBhna6ZMOP!yeUpw|hSPy{LveiPr1sglxesw@@8h9rrLMmdF@kd0q=2dgd7M_#- zQ)wjK9c=U#+0FKpwArO>FR=yPsQ2|e7^O@$%H@;R*gM7vad8A#+cV*Ghs}>vJ)`qv zR_X4S-a+|NRi-B-(#S4fwf)sidX(iJ<3*0muU2a%WOcC@g(AB|19P}p74O4PIgN#M z?}q3SIxH;&NU7g5J?Y3S@+*1OaPGDkSNfiAlVGR9rR|5K^7YT}&+tEPO3~2o_*dQI zA}<+=R3U#^pG80$j8sXgJrQy8j+(77KZ?NlbXOr&M^s^19ml#}PD))TyPEVBQ%I$w z-QVYE0Vyv{OqRteY@W*7R+lzSSa%whPmhQq!wi?8`yM5jrI$dKvxYg*vom*KY3zjQ z0pJ1JC&>U+3gkd(&{plvKamC?v^CJ45p)PRfFfa{2%&CBO1gB-fgFMZ62vOdCiHxK z2?%BFcys&^JZRG~oY;^Wq!LWHR4b8{3f|QX9gts`uX@T_G|cDvjC4sY z+m^mr;RtJ8-d8JNfSpg?5k2=+gT~h}s8u-Up3zZylWlw2#iT zrY$DLss=aapV|o8$(AiYigy`H40H@fv5~~2i(SuCoR3&o8~?-|ZY=Z)TQa=om6l%% zP5-rVky_QxSi#sA1#Nn!AE?n4i#FqZ)@8|8t5d`btoYBi!t< ziMd2FH^8M89LB{kdtKt9<59H`mjOFaRp zha5QamHbLbuF@L5fDbp_PFYt2nzqWyrwAO>rNC zv~`b=Fi;^s8#o#=p!H&E5Yi{mIgmDh?)WoyWJ=Y?75aeP6fvw#!t)U>fEa*=^P<(@ zYLj*hjzI}vmO=6sfJ8OzcXI_poW-42Ufd8l&e$yNN^S zCQZj}mu@Wa3h7;Y-0Ymrfd&5$9Z6%TZ5zcqHmmXqWy~R4u{E0}e44y#=jcxYwSHV) zxWZt&TzGEnr4#Sl`}!Wsgs@0mz-xkK!vM4d#7wd}>#Gb=AMj=wz$X=4u8Q5vgVt^U zNtt)@4AKM)mm=oRV5kPK<^V`e4)D~##|6BEjR3y35)+|xBBtXJI{+@w3eX+kBO*Lx zr+}Qwhp}pyO67)eZ0%K;iYJ3WX1_QGbBARK!kdGL5_oTG?HX{1?8A_JpTB_wnP z;gD`rr<3woBS>WUB#XAOnbCeXpo|f8H~5eCA*{F@mt+uAX3f{f?6?#nGO={>U=CLc zx6;+t?giFs0PHphh7KGIFbwzG)f)@}mz(-GhA=7yEX>|d=|>1&jUipkkDXi0c^|;>R?9Da5zTed`%+xo562S$@K)qPA6^u)JM@LKGTYUo} zPO(mH1T4V;OjIL=Mc|oUnF#~&+_-SuOacz;C|XQ2vsLX#_-F~IvpoX{Th(1Y_*4k@ zy;clRlI6n>s;$N+`55H>Yp(%*k{%8YyuxYH8%MGV(|$0zN(nP`$cWG8fO|~>?-Jof zb2_iw%a^oIo}__+a8^BU)N*~SgcL@dzgEsXIh~epcCOmi5^`F(0|LSVkm%nR-0jf5 z=!}HU*~yM*gfeRM`M+;A!j)A)B3vs#qKN&LS;a7nCYWWjrDk=dPEm5!eeSdKEI6g( zt+fe0lLRK=xl*QjbRt#2&@@MwiQ3jBO2e}!f^Pxd&aa7oReLL^e%JD(^LOpONs9UM z&yazpdyN(M>|JW;rI|VnSKo4pJ;;^K%c()8e3)>7SEjwlgdO7#V>r8^QS&@OaG}tLi$UL&B|Og z4Ara(^j{%77tu?Z`5#Ip(ncT4{wR^u>1`H`NX(^o$T9qxgv>Cyu0(XZC~hjAOO@EI zwDBV0w88F7^p0g4;Sh{}{%^O9$o1JG();)C?O`wzN!_XCf5!QX)zN^E&ed=B1vYqy zZfkO4q8w(b;S(49<+*tvo~N)kVKf&p$c%}J2|7Fnd=d&m@dAYe8S$wSJu#1+H^&f@ z_u0R+SV=ukwmf=5FZGi+3{ZfhZrT#`_4Tbzn3|f(9^Wi1C}@H2)OY3$Tz=X+ITb1U zKK}nd&0l|EyV+O+*%1hLgk{cRw&}_L>s0?C1pQPe0{^CaAM}tMCOz@`e>i*Zc&`8d z{}&k{vNy@zWJ}q5Z;_R~g=Az)LdeeEdu8ugLPjWC$SjnQU7Y*#`}v;B@Ao_BcRA-= zj(^_oE|>Be&&RyqZ@25M>E{(l9}zqPOq2B9Fszx@r$_zvf_2Vw{Kk!r7(Jl#Is^EH zlCp9yNW9-J$wCbeG5NtdQ!@P&=7}`a(e+QvsW&z@5a~N?D>G+fhal=BqNMcIM-%UX z#u4J{fMz4b4NNF0pFy1+>0zVn9NG$JoPiq_wpzrJ2`9Sjz;lO()X+UC0plLng|90o zz)abK=>ShaJ|oD)aTWr#j&`bC0RIhmmshDfN4QtqUw-TU|F^AS-S z_&Q&9>c-nx#?fFkQsX4wqWvO1$0>q^&F|H^nCQz(zcwrI_C?u9|LNQXA+<>ejroh_ zk7>?PuN$UczE{9l-?U!p!~VMY{@>sk33u!9T`v7}hGf~hx%u(^Vb)XEaHe1cE8Hkww1&VxfXdphnKq(}N&Isx z*FZTQmKUGAV+FfAaXq;__o9|#rSTJ88|I?$GtstZ)Asqvikw})lfS>tdY;%Bf+o*y z8^&3_dgIFmDJ)+kIFHmkzdjfljOda{D`TyXKcY;)lOSR9h_{ZUuV;OMs_tBpO1560 zRX+aD#;`qHlceN^B(bGnFs2%nKwV+342DiE-xZnQjsIt^0dFI>al>2ex8#UTbKxq$ zzq0!l;0a*p6M&RJMn(p2G>K~%-VYSQBVRRqShk<3{z|$9!kegy3a9(Fi;ur}cahi3 z_3vEF)PbHfW2IE5%&}5eP7WP3#?YTcI4SuB1#{g&L3pDTbI!#b9g8el(*K`<29Cx} zfMr7Ai4Yf_wdu&+M1{Oj&~z+>y{rAl`fvc_(ETHZGYTfmCNApo7wT`>jN7>RD65c ztQ}{#r~Z|FsM~cVXl8sfHc>6lI0EghMd4ee>$M`UT5b)FHL%umBs9p-s%a+&*;v(+ zDNte3YjJfVD>_%U{M_wPgT zk_FOwLa{)B6fSapw93#j=RNtzqzGe!RY&)NA(V#7ep2qW7}w#@x0t4WtrAtn zHR}2@4cisfFF8Bl-HDJ=_t9O=ptD1slLSBavwoRh{iRdn`Cf)O=CmCHAngzQ>jSOb zC(4~YJ-DtaUX20JRvanQRW%%iON|@|BdcepNAtT5t6WBTnqz~wYpO=zUqNXU6OZc2 zkk}NJMaz>aM89t4^9=+1n!D&_{=y*JQ8Z*o~MC?PvW^sTU(!Too;?&lOB ze!jtJ!v;=Va1u#^T^_M^>*?c!pSPfz#8mY3n|z|ucS`|-5HuEh+TsrkfA01}lQR(- z_xw+HAM~_Q>gwq9Aq`IG*SVf6v=dnFX&rQ3yke*#dR^OGv!3+jIwdo6LK?{H&--yINFe9UY%S=%U6O|8-pcH zmLmsD?@B&K%=Jd|v)`(!>`f z?UDS_*_2~cUH$j7_dX;l%s9#+T{fz(B$-yYy_vK1M*J$q%LM^U!H!(-=zn49@OKVA zY3TZ{%n|fauqgNiLA^+ImVZ1q+0&~N&f~yCQWO>|=H(IJn59o0Qr31mo92ZNnQonz zX=T0~Sg66aOGt(_E2BHqlIz%(^n*_`)3q&V|tg1p85(c+{hBoJi;*F!Uy z1gD>QzOJGOv?vI-0S21M**fRr`tgO3Ut7&%GwaHl$0c{_|8b=%FNyNFi@yN-YxMI%> zIl$S|2R_EMG+%vce2@y5aQ9^2^@>^!y!csXyo_AZL7cU)>C^a%;!Y?W@^TQx7@TnT zVT+uP6>^zR;_W&Og>%XR=4ZG?I(>12n;P5)O=If1vvsLw>J?xi19fga+{~bIhvEbV zShx<=*^VIcp6lf*MMOp^HAWQORL=>XMR=?pEuduRsxDr|sksXUVHZ=A+dwVdyL4>!kU( zx8G*E)KJdDRxe9C;82gBoY*F&v_38r9gM73ym|2MVo%4&AgUmO+*I+E?Zvj{pt9J2 zVU5POZ$IjP-*8k@jZ1MpPPR`=ejb(;%OEdi+j&2kGPg+1p$bQk zN&{(d6hS@trRg=%mLJcWf-c$XoO^lmDSN9H>OB9E)6BI+<}W(arT^h~%!(aUa8cI& z`EJ-A%aLzKZ!qCGlM~w*Z`!xSXer5vWCh6+UFXqCFJLf7N@QV8&tRjao=??qVlSW!xH)Ud8VM=hRBCh zRr(fV;BtU)c@4Vv3I!90a<#6mPSkxB9WfYyXr|-xdfcwJh`mLawe$Jigs-B--%#~C4yOWUs1TC=*h)p7icD5jK7 zCoZ)5SG#RCaRVj7^>RI1^IJul?vO<4^RXpVWu3==n{&?2V+`5G>M=PSwx^Q<%!UTZ z1eWyAEV(gv;(}Mnn8mw(MqY#n3Q&R>S~JG-MN zkM~{rUyE$6ZQfFHH{;o{Q(xPyeJ9tZknp`mVNA?sc+Y8i!AftCWIcLCU?!$Nl%_dy z@eq?gtNft-F1pt3vhk0OyUd2G$NwUh4T3_s9@C(n~y?ZvAvsto~;f!JDU+Fz3s@Uq{MMYMrdELqtnz1;I+ z{`R$Pm4d+_c6&bCvCJV=-p=<J#uOPJf3~Nh zi&Rt1yt{$pxDFL6#72wQAK?+fFEM&&vTuNJ^FWh@SV-vT=yvBDalvquz^r=uy&&%Q z(UDCL%8r0(mc*uqgF0e%1hF*;%W7R%mPXE~ZeW73-~(uIe$3V~LV*cU_s2p-F9QZ; z2>8Q1fRr`?6hTn+C>1C)mbh2gg4YG9d4NanF_c#m6BBi1IdL0nvW%-XLE*^2!xIaI zxjSx49m6=o^0LTVN8VdbDM1`0ZaF$G3KlYf0*!r)eOdD49qpO7E}r512C)COEq z`JN#Dflr@m6q1&r5rGJl7P_2+5}58d&;A#b4lYfOH1*BRcK?f*hiBpmCMMf;aBRCYV}Zcq9O zEEMt#QZcXLv@`xl8jKS={1++$XOR#6196I%|1ew2*#Dkhw(BLOSnRE;T(JxMb|4!2 zjwhSexPiL*Re#rDpn#)HD(DvlzAf?E<>6Wd_HW6|Bzq2twzvZ7e`kzb1V(7B+ICTR zq;hZmzD>;%OM6Sj6zR&CO}}2f^tWY~4I|BF@oV=Ti5S&0*UO9~a`JEM8|r&ypC7bX z&=V7194HQ3BqSNx^XvXr9=q-T*Yk;Ash#Yn)11*`-%R5Rv8|gsFY%92!-)w6z0Dxw4;;TTT!}7y;PS^W9_bdC0%AP{><5vpZLn+f}B$-1>3<}Bt67s(9eM* zE14HXK=+(Co?0biY6mQQZh3mz8tG@l;!7%b(j_KfYq3SBf6Uzo9%*@~rhdl*i ziv)orDTYyRqo>evy$ta)ETYaWJ`@~vHgD>t`V3)|Cy#Gn^?YYM99=YIheueVEGoO~ zL*6(R-m|Iw>PBSRng>6hDT)S7rppR)=LN^ydOx`q>G0fpJF4H= zc866J+jTJoK0KX5#Z{ubTO6f8auGx7h8J;jyzWp4iPM+qFLzb!J|0cm(ZAo7H$LDk z_432i$ci+y_wMo)Ne@-4DErZMmG$jCPg-wHXINqhIR@nqn)6RVY`C~RnTf&PQ-?Ow z3*d!MFtovEZh5-i5@XFGmiWV>(c`Tsx^A9UZoIyzapvIQz2_N0^zW9U#@5~kLs7`yj`=C4JSL zlJvFj)dhU*nR{e(MZTX{$Hhe9P^Lg!a1&dC|5(hy-bScSCPdy%ii6XBwsi?}&|NYi zXiQ2WIjCsv4n-o6c;A=Fkh!~j&#>VchtYp(aas?VtF^$CSd)v!K|6S z9?MQ8p*)|Ud+buZb@yVK62Z`O`5kve(Xfi|B>;`{b9dxR(lYl(ySPkWO*AL&BR zTS`G*I~%GO*DtZ5Bs-Q;uTNjf0*)YX^hSPp8pQZMx#gYc@waDhNa@)#A3srFzd4V# zvbG)Gq@x_!`nvMKI^C-~6;;=4}o4taKTH|vu+jY!TC(rVShZnPhKz`@h zwI3(`P7O~v_=#}O)^_~$sJJ)!<>i#5Gmk6Z-{B=!#xyE>UmDNG1*S$X!V^a9AE-&? z$$I5X*2-}cT8+}y`z*~Cl2sQstQW}H-|r1e=_oy+CR3QX{pgS1y@c4C5y9vKfs&dY znL;mT&Suv{n_l%Lc~g1MojVUv-6so=%BQJSW+J#=ojp;Yh^uQEk_+6-XA$n}r|c+6 z>6=exE=RB{Z~uA7SsDL50VnR;?$39fRymKBuM%eesiUD(`C$@FejtvPx19+hKK=1- z4PCG?{q`0sQ#?_AzfNXkiAfRnBsHHZ4o>}n+x`tVM*djc*YRPuyT{4C4DDJ7p}IQn zulny}`}h5_+dFX>Buo3<-bwje#_2}vw9+%bXL$c|+|=b*Z&_0w@Moe9swy!w*HUk0 zqTi?^Ly1<2DbFWL9D1^|<=ajGOAUL-`uvYtHYTlBt+M8HoQOA_gY2&qtY*Rry0frW zeqHu1o>=SZIXaOH*6d-TN`8l60V<0x zHGJQ5%CSv&40G&g^=N>IN&+%9GZMaXkb6qlW@uW@p%-gm0+7GPcqnrkxs& zfRYM{3hB~T)n$ruKkIk?zu1=#f?k9@977v_WMOqza{BqwTKa^`0}7So&_XM*%vl?} z*(Vae(3ifsln!e4NH;k$adF@&Fk6>IlmB#L`K73lb;SB^0-p){i-g{`3W~kualTrj zf^oi3h+jlV%nzZvlPm=K1$yk?#rQ)t!qRiKjLdsJ4P^C{$y2{Nv#TU@LoJ%e_bQT8 zRvzNcT=^MJbHa!*bRONX`DlT$LNISb6+C-7Gu7qHX37T2+u z60Ahd6n^BF%v_vElRJ?4j4EKNIIPluF?DNs^6aZYlC^H&re=dtzwl?b!~(BtJhQvX z9_}>9uAOXS0&Cy%wk8~0umV29KVLkTsPCwTlja=% z>`!{Um57d?nR=8{qZUahS4eb!c3+f-THCQwLPD{rzspRiFq1OF_N7#2$6x75ODDGj3_EG_i>`r6Bxd|^H(P+*2yFZV`+Z5SpN4d3)apDEvsm9%A#75jfcc9 zy=kcw?AzN8c^&Z_+iqaX=5@XOk?Sx~`C^kM8DGC__Hm1?#^w96KPU%(s4AvSe#A~# zbe?3q>16-Bm5}o@LZ>MAs&Kl+XJKkCslEGJ)gE4h3(?R}Yv!?TzNTcPOp`=nvLi-# z_x0ep1kAA{S|PCLP!%;?r|Dwoaz1w`SnwJv30;J7(mK+^ruf#f@g4 zbV6lj!Kz3Rf_=Z1BXLrO7goBv_}9w}6E6u}+4QD&eq>j%^cu<-nV|+(>f9buiIV#@ z;l%h$aa9*>sFMFgf%v7i6Dhy!h?$jBQK8&8h;Ew+fRm$Gqk<<>gs z)(M7x=jK33q7v8J*m%H|k|9*EkkN8$NNh(csse1Y{bD51==fx`6wEjyqg5>L0;s;N z=XG0p27ViB+Uxr=OR+vkP`LUEcXOGFjh)bd9VD#u1dD9QTKM|+h43pPdP+XA4NoQ4 zD4jZ%@#8Vi9)=9<=b|3REk`Ne#q%)K=l!PVvK315l^<#@L}%P#Ph^y6{mxM-kzA(| zBVVVb^W?Jl)6XU*n3g$*tfT#o+b?;ZtHkK*l2{+F`4UwBa8)exGkriEgmwH9go-aimRGVdLa%_w{TuEn_P_UFZ2CCcnP$0|h&=K>yv> z*;V-vj<_ffLz=H%4Xu)I&D7h@=B*yzKqn#DuwJ7cPbX3h#LMw))wBOk){L`M#_SL+8DCk9mgS@xm%rY3{|E*<$k+TpWEAlrmN;Eum<+ zL{GA^kIyv>%HEPhlQ%o{64l2i=#g$!{N+?1L#0>tF{WYfl}j5!{Y0;r{`9!YJA)jz zw#@y`cmwuv|8!djc@N&wD|4iK zAH8E7&s!Qj4>ukE#jb->6_}D-ca*CVHd$F%_}~qRxe#{uMBVj<7~f2Rk6g@p_5WEi_I~(4C@nL31AON6dGb&Px$$+OwTa)HM5M`QYN>D)Lw3J zz|{xCsonkz{2%VD?D$8rre@f|Mn!d-kH$zH9#*Hr)KG3>?e9PTYUknboGYZHpDQ z|6P6jn!bq3QFNoDTLA9v;N(VLa@FRbLSsTc8tA&pBNvo`!p99Yy!2?A{<08)WpvyD67|+m99(2LZ(?e*P z3Xhk%-G>MaJg8#JS4>SdIOui($((ZR*s&kZ|hYC_mvUC0tb2jl3@5 znfzcisF+Dz`bDCU((8#ij>;ErI*0hvwdX2YpY=>R9F?~|cvyJPT&=CCr|E}CyUN zJkkaN$;Xrt*a!tcsTB;qL=O;q0N76kXmCI?ZgW^8k=b?8*qt8Ld-IBZPP;nw4%Ia+ zrC*5%r*T8R){E5JAH3PI=7#x?9uG- zXq4yM0}}pNvim$NSd(hwM;xPFyql{#MVb{omLqZrsMs8h9Q@&DCsXd1^mAp$g@#U} zSyip(a2^<{ifk@jRPDvcblHyT+(U?vb`uCM#MAw(ETW zWPtW(qEML_NHahlKoI&(Ylu_`#BCt*1hb{jc3BA@pOgf+ z4n*Y$8ZQez3j3*Y(r3rJWfM@0YyUCd$O*+cC^SPyM$bwBs8lZzgb&P-HL#z8r_c2x z6)4fN!0ZNs$Oury0pl0JrK8Y@c|3>T2mwUF;06Uz+y=C4jvT!K)d4Q-bg&mL6;~~E z1&E_SSJ5a!Vu;#x5-gZ!A>;ta~Ds}Z! zWo9Q(Hk>HaWrcb_Kt1Y@jMUZCZrr^08|C=;7^GHrK(JI-&-=jme}mrY=?lkon8?Qf zIUQ65e~$=!n*9|H+!VxGjo<+@b^weVJU{vnVr7gP9ra_}L5(!?WN(QU+`y^k##W6G zrI0W^i8BooC!LD2U7^X@_(<3-4 zE>IYyoO%8;M$wy}e&FBaq2!1yRXRr*Bcm8;qGFr&N-_7HkVCXdz%F0Qss6?-?sqGz z?$T^JPVv^v%D1F;Gngz?_-1EbL&EL#XsfV)ikCu5S6k;s zHP82okx1bFB{8ouUpT(jy&0dHce|ZKq;g`YEri(hn6aqi`CxUR5Be9$H=oV-y9Xz4 zOWuw&QAcg#$T?JrN$BgS+{x_Ck~iLcRJh78f`e`J^M!Vhv{SZDS@G}+pWgO4hG#k6 zRkY5}?*~#3ZNCQdvol*Kkwkr8Zl(oBKRb8lMoz_kP2fhdA>exGK+X$1k{8elUfr<4 zlQA$hR{8(0!h2_3huH+~RSK~B+m7c-)7p;MbcLx4}q?i0`0OjpS?q_*lDQr&;^n|18^U z2Z@_DymOGk0_DOE#tuLTi9wqRoMc_u9pKRl>*(sv0c#7P8NyUUsO~Va-nuPIAebTO z)F^3aR8Q<7{_-D1seo}KfL>`n#3!xmVc4qu2c-o`73tvWdkdLV{QUd~N-IX#pvEi) zNQEG}`!8ZVw5k9t)VIGjVASa+gaF&1*M||9)z!ae58FOa9=wM+AaR z&x$3GUTjU*dHIL>HqbmmbIQ5zH^5}T^Nj!$|3W?A1~yu2TQenfhyO6Nz?2LR=m3-C>Yn<0K(!YSenapWuDV)L1#w2%XbZ|u7KUw9?6mlmpMFw9t#QFTU zmO`^2m1aC6Ik%}8wKg}GjrEr1UfbuR>pWWVEw?;9m@xv!2H8q0J)XtzUBsK1N!M3j z&QwlSeBfQo8bLSbDz0bK!!M1&(F&2NlI39UMy+r06z%jR_b_5_`Cdyw^=L8)OgMcb z61)6;!E~21Q(a*h_=<7#9#NzuTbsFFulWXzKNhN}IYv(EK!O`y$y268Gn-mF+Q6v`fmD^vPdNyB7XcBYfN2*=PeN?i{%0Of?m9jH z4V$`|Hbpw$qdsPtS@ZqFcEOtaQjZ?phNKE)h(CY+;F_U=g2H@kj<|O$G((992_I40 z1wgpRe^Povnols~dq8I!DU)XbZ$`M+4)k&m8;5`+GlExuO9YK8EjAK}Kth5mbU@Jx zk`lL`Hq?E{MnnASfNOJf3Idt#y@NqU6vzk4gh`HQ>X2-ndU&HqmIqXwowtIH=j>ol zA-Hu*6GXcxNT$PA@8zmHIonPcp!yyGq0eQkJE5X30PjS$9ZJu631n6gHXJ8R&TXI1|{NzZM z4{X4YR6ve0U2QrH->5bl39xJq;q__(&G@V9!WBgVw0Kk}oBuOP>)|phv}R?YMFz;M zqiStGzqX%qH6MnDqyPMAGaZB0#VH`re0OUHD8TFw0(NK=*MW#*ICjksZc#2HOP?g* zDjA7VW*!=RmUz{w{a&WzOk1R4@C0kaZg;n0h+F{WyBCy0ayZ&DQS%d!#$Wj9Zw9D1WeyuUKjjb&V zN@?J*fK*jTjmgFc>?W_@ys>{~zN= z)#F%h3`=-EsQcmF&!1m{cn(1&S(^Y5x(U0svFZW@svlqkzl@B`d;69E05-n9V$96U zLcijjHdZC->*`?h0NTbKp^-s#7Gh98cs04-Kj|~~g?=m|NS*BpXm`=ws6j&8fFVw9 zzI@m=q`T}U363{zfP)E`_kRG-3*S4d!Aaf_#>$T17tpjoKCa-ac9{f@Fd4A;o zVNI#Ww7(Z6lUrTZ;C#Yi{3yW4oMy31kR30%KtIDyo8u0<^%!n|TuH9tDp7Gq z(F0T)O_?BS+2X|c?GkuI=<4*2cchh8T#4WfNjHRX$Kb>j(sdq)%{g^!V-)7ugW|WamUWM@0GzA|iZeD3u z=6QGj`gWD1Z=LM*lxX3XfdZ5cL8&vO#x49%9CgFdx&L}JZQV(oVq8lGLm?)i;~wF^ zi>I=aJJ^yGU+Mo%WBnr?YhR51(ZAt^%}4I$V*nbxk%|9{Mz3q@h%go=wXSUa18T{C ze-hQ#jtmU|i3OQWvmL$yfW+DYY#HJ;0C`6UqIw4ra^T;6#lZ6)tO)B8&aeY;R`u_9 zp9=4{%tI(u=c0Z-CbO?DcV5&oDL1A}u}W?B@0eF9UvW-_ikr0kLYy=qSacT9t4GrN zTH4y`JhwDJc<(8nqX2Q8cid~L#`*&cKK%gNN38=xg*L~|)18*3XL;!`)Z^f!gcuUO z%)V-U1806%Si9ds`p|HbJ~@KffF%fF^;v+d578z=yB~FSddH*B)W!AM5g}%ccT7iT zC+|cX#5kGdXLY{0y6C=oH!)HB;^`IqCd8f(H$_ktL~zDlID*{G<>S&#GULzNrGM}E z{A87ml}lj4X_OZnyNQlX#M#>&z9S^R+Cjm3^L}jhr8T+J9YZ~frU%!=(vomqC8Txi zj&L^6qbOZmK2zbg<(N{jE@Di6fmtJhc}6~Mw#bE9rs+GxG}%0(<^cCmOzjtd;El` zQZAZum7?hz583mUukq?EDj>sSzclcCR1kerOM|#xq-RN`*)-LMo~#vzjfqlh^=qFO>$-t^p0XI?rJN z%o{l2eZ{ry2LEd?mB@$ZfsQ={C z5`0tnC01eX9B%T0DU2(`2roRmOr$VwffB-3&bzPHOp>*%J#ev<5u=f_o>t-0+oeSp zcmQ5r%zCBU^+0Xtfm(R*3zec*T%7D9Ji)ot(^D>ycka^;=S&nTK4`>NV8zPKyk5_1 zr>e7$?Gzj4^s`vmFgmOPpS9+LHM!~o6;5qRZi7R&WGa_d!umP?Ia4Q8Yxw>#64b(t z!{zlo!@kS;@_ZAq54+AImn3XRQ~2KgeHn*wyG%hrKGWKZBSwNRSpWZ6SOz;fw?Oct z08(xrI2};}jtMT_O)FXu$k?mj=yiWH9ySJlSmOcgd&}J19LYKJ_rC|=&HT#BS8$>` z08tSU4UL+L3eLsJUh`STbOadwkoX38e(s*0?;v%GkWm3~fPmGm2e6+Z-QAL4N3#Og zlv>u^#uvWd8-E8~odiKP8`vO*^5vrkhlkf7!xSA+`)$C2^ayHE@K+%;!W$u3HoMXS zB}+N0n;h=Z5cdoC+-ne)F#u74r{K=wO>=@=UQjf1Le^5B1s@bo5I`^DSOGaZXz<|! z8}K$4A}cG<%V}t7e=Icf0=AV#^l>m`$C?4{(s;+Drfj!;uWJ~pSI7W`xgZ>4<<(Q* z2zE)p%&mhlqq}@GIJy>2(U7@|+?L=f1tu3)aWXnOpkf9fY%91~-T}NaqBVJ&jhq^= zZ{D9rg9ez^3iq9|-Fsf=oi-M*vEq;IlwM435B$#TEDd)sR&W_Eo4?K76RR z1(8gzA+QS|sBW_(kq9{MbE!5XC|Rq0xl(22SiA7fJbT5Fc0Nt*sdWO6ukP(1d`7RH z@YrKY$td4dX^dK#p4qd)o+^7*5^x!+G{DFg(D-1+FQDJbro z%fAT_GfdD>N@8^!jUm=6Z+wPAYU}jezz8i-McpxQf1?~H*i%)4ergUsTBa}mGo;*91Y1YNem37njQ=qU*@@l4emOAr9XHp z8cOJ~Pv7u0rrivw9h+A1P;cTe8b=?s>X+haae!IBIU9+Th0HPp$cf;npv>qjkpiGI z5Wv08$QU;D{@M>QRVq+qfsoN3UMCA+!9akYa3_}s`8x!!S;BTJq-N}f0spF{MHDIY zBG5pnyS)L;Cuk!T%k&^g^7 zITsfIWsM#-On3|Ya4aZROAF1TBg26sD3U}AF#0IS^+I^YunEgQe*D|3a%=+uPQon^ zIhviGp3X`j%(j?ABy|^-Rl5b6Q%;1C$Hw+O>R$}p@u*b!1)jRO&6r&bh(kWp2 zzh|)#(I7_GxnnhqspZIFsrt*8s<}M_E2r%1%@s#>_R^L5)UJZM@3?3`8I?~CSroOO zOPrA?*a_9}Jn)h|Z>0qQMoR?N{?%@luMdgMbn{;Mc4z(Gb0((U3JQ4}LR67Of(UIr zA87?Lc#DKj2>S7`XbIv8X|<&=dQZHlw>&K#OOt5bj$)9Te#^=vb-YxueNoVsA=gB& z+$LUj(RLoH=dGV*+;%SZNo>peU|5w+DN;7lQPInm3sZm9){xgAm2Pbwt2$Rd)l*la zDzg6LJL;Pq5zX5{%C*)W^y1f=SC}7NXb`=4wI1Z!bv{DvP<$Fo^Q{>*^-w*7Omsxy z9{01g*!|bste=}W!p%*v7tdC09^`Lp(l{-g$p78CRdc&tBq8w$WjB*J-w@i+!@%_q zhGwjdHvhgX3(J4JI=uB%Ep22b%Qz1$_Gzc~4LY8qr|;bxNZfX!&konm^;1ocrpbhZ zE*Z-GpI2s5&smDesTJYI)dwq@o0`>JOo|B|{k!<-(Fz#|NIXdr1K(ZsXfS<4NUJz( z#(oCn{df+V8XEX;tR)6TWnk&3!!-JrC{2;xJkR6IQBQ-o_riAqvkw_Gh=b!9)9$=X zh%6vOMM=B1Ir(Yh`8RDoWMXwwQ9_08oObwZ`)i?6E>t*Bb0)Y zmPJH}M;XX!P;pHcPeF~xyz^H{nY+)@J^TTMZ$e6?mV#y##lIHKG)l(ZUp*x+W>7x5 z(jWc)CX~Kty3H(VNU4!W!c)b+s3@tcnd>_VyF0D6JVv`C%e>v%TO!p9KMiKgmr)|b zsl|~6gI$hV*M2Os;NPmKJozU?THa+GQ)3}=LG-tA(>8laVBT@>mSye%^b zJmfJ*ZMpNG3bJQaR2VpDaE)tBM@`+-b9-ku$k6V@z@qwZ+t237OGUxLwS!#V#`IXiWfw2Ohl397#5k>OSeZ;v*e0vXb&<;`CW*jv*YJ%_i{Nkr&u)5e_W+3n$F-y$d3gZcy*ez$WPYhbNFz#n*y2@F5(FK znfnw13pr6JNr`NGWy&u2is~o}`eiCyk64LFdMrf}URNJwC0GZoPuWjmx)%AF?(Xd; zr|5Lr;ywGP{b0o9ce+ps+i+^%qqx*#@{*~t+M`>&mLf!1>xLc4|1S8_`Sg>81}_=1 z%4@o0%E~RhJ-ARjOrGhXu9Au?-gh<8F$j|%l~&azegDAZU_ae+$~wPJ#oJO-;cVcR z6R{i=PY2=Ae|k9Vuvz}oKyeGAU8*^xRK)1gFafIs8AGiN}I8S+G zpvsHiM59-#{d51AcEKL6r$3)X>1_eS&7m)`nXZvX^VLNxRc(%S-}65$W6C9H5wLwJ zxXHS*RC~>cK$O7#A7N??hg3e%XrMQ9)R#KxZBD0zH+fUnS3jqx4kw^y&PFQH#a=Bki_`8Dgn8ytOy{lx4TpRxJhHdMct-;k;S3=8*(@QTHX0 za|PoYWODw@s?k`g~wG_Q^+)oH$bj`Vth{ESh4jdYRG z)3^V}Kw6M2>v5NZA%8$Ap_Q4ZHN7*|1usQ~hMrj*6hagW_Wpr?T)dF6}4FMHBw(D+x6G8{M$DkiisrfHw=oIjk+IEqO0-z_PK}Gwyb2m z7q?u;D;?d3Gp*5rH-Exys!_P;{<`VDF+C;KalE7ExZKOwlAwoLoN#UFG8L}w*5TgQG8dScG&lqqtKJ*p(*+L z$z?+jheO1wt~hb3@mqFSZqW|)=zjXRDc`>Z8ToLY%;Ey%$Fmw){d>Ltu+eEpXZOqL z>#ER{j*ot!GdilRKVX$(&&vEYMDYqQQRN0fhNV1#mHY72gK-_Y0EPI2$v(^lyF#5t zPb{0K+%juwU-VobvhDxf<&YIDoPOpun@E^yDNA6by=Yu$LWt6>W>9@UFQFpG{v#7A`s%QS1C$6ZCKRW z6V6#{-cw*Y7Cm$yn!5f%Z~nOSD*L6-ME*@|(G99j#TbTaD=g|K-SIC^N(~BFU)H{C zdKX-*;-9;!$fQd(L^*-yD(hS){9`4)g0I3jAa}+h|Mwf7_xi+|(x^7t?kH^2dW)f< zxj1seWbe0^l|DL$&7ySr2Wjdk@LS0JwvVkaB;so&u{Lu39iT|W{4lU^q*|%#nZo196+S9KZ(TMJM3@CqiMnzu#Zer1AT6=cB|a{g+~7$O+zs z#=0~CI$%|veEbAma4Km65Op~Twlko@5vN(Lk5x?disIvm$oD`-JaY$j9%WVa0+r5zT#wQqd%eRys=l zH!Nf|r3}6>dXIMW6B9-yzoq!2ywsk5t_DlWPtu2kcn*cOB5Die%ZW*4V#A@8X!G^s zdJnjB6-5{CD;N0&~a`1QEWWCy?QS*YIoNesY3ELg^RO_d&ev2>yrYK zm!6UFTE&zK6mZbGXH%TH);jSZ{AIW5}bNuIj$Vz|OFwmw#E1??GOa z{qDLYm)Mq_V9W0tQYMbLK}^UY=myKkh98cp`n`5<-CuDet!oWI0?ABWp0u)Z^aZ-@ z3bnEX=+5p#mrdN4gRMhq@k_QPWbzpztAgdF!M#LU%o?_Cb2Ts|VH@?|7NLpD9L_Gc z7;O!W&k%^4$O z;X?e;8&LdUl9bF5S@utag8U(HRD_~NVO^9ft)8U&+htFUk`<87Ha@-Gh;m(r!$Azs zydKN=kF*mf9H&AjUX^|P%61V;!qMzf^wC)k@HzW8AV76*S*2t2cVL?y%3{%^R1n)Upes-@%_CCeR?} z6SvXRcS-uEh-R~Jh$NNA}!)% zv4pIwQBb1{!<`;Uj)%+oQQ%)_)7kB>_5;v^^?GP9{dGj~l1Wp=Y~kw46G}hc9dvcq zr3RYrNWv4;TKHNzQM~Rif%hB;O!AQLfpFN_*x4UJg+NYTegZDW!mf)HCU(H%LGas9 z6Z#CC2B;7jntG8!a?aS}i$9+=TYvZALhK6CzAwr4!^!zX?r%lT!` z08a#fEOod$8B`=A!S_&O&)Hwh;_CDQ$L#gc9_X|>&OyQFDg!RB!`?cTg}aS>2i zLXZ=?PsLMBJg|{+@#og7f=cu5Z1G<$Vc?cdgzo|LKnPUp_dN*8K7=+VKj7f2I}TI; zGLE!}=Ai2U;VHgZ$J%CQu~UvnC804T==58}?9byB?``nS(Tj+XLktJ#8&09Ksxdo_ z1P?(vA3Q10cG3H2P~+(9L!kyAlm<2+8bUHzKnSz;SQM$ru+Kc~4!n;f+e0A_4$z)} zg!cr>*i2gxH4&_^Xr<**it*a0bA@@mXQ8Y4;y2J&ikPoH5c zaK893#PyOQD)8&e&$;vu3w}r9DCo;*4?Fx=TqxBbl(JNH$#v60n;Cvypkvrk6}j`; zpnf-cisWT|vh}oY>?19k$_ehsC=rn;+K|Ck-Rc_(V*v_`7sE&2%~1C8WH_qaOM{7s zv81TQLPl-ogKKOqj$>@2i>K*ug(kb@%mekKd=dxl%&e8-tZ zhVI$!9mK^6x}MoKFHWd7G7ITHOA({NuWsF>T3uV4d;91b()bvLi}4r;J{(=vplL`C z(;Qs6`|x1JTl@j~k7zPLN;CoE$Q49KxoZs|_rS!bfiG3|6vP}4y8OiuKRotAAcXQD zLNKViL!80S!T~;r7K2)##s##h6H5v;;Wt4~#bZ=x29kA@peqm3icNT!C@TQIDFIaf zP07D+HMS7l6B8q2SV>Oc-ImUJu_Yvr9)L=}p*QUg+A0Bvd;%Nx(AD2hSHD4AFxlkt z5dLhmLnTgwk9f3^7(?hg0H|lBX~7k@s~bF?ms>%X5r{({$rJ>XPQCp^zHuTc3Q{Hm z#E&iXKo@Rscmo8LbZV40marpw9`Nm;0~+mo@rB)L1We)b_R`EZLZVT$3_0 zqeIpX0A@8xz$y{=;s#|OIC2M|luRLDdm|2fp_C^`zRlb>;Wrw&c zC|xr1^75XV&UZc&f!r5Lc$t5cKdWw1+1)iRk>01_>0|WMim}zxmeawo)T7S+nsd9~ zDc)!(X?o?p;~3|NT4z!6eKEL?7}nR&wcM8|GuvhX&E|ogPu-ENsl&FEQ8RmQj`T={P4Hs+b3eKnF*h(&+ zyQbCrWr;H~KZNu-TIvxiPRuuv80^H)qWsDdFMT_w&4uZ&z*oxfv@wY+_A6}F+~R`H zL9^+zmTF2Ld^(mq(1qyqwX`t=NC8L{;HkLpQz~O=+B`iQ#dz4=tc27*ZU0a|aA@nUsqp3XlyQmR-_?q(s%$l0Ii8t;%AI0Ws1Fzm+N z_NVPx(08)ncSytw861ZeY3Q|SSVW^h^7|G#m`KYDX3-#YBau=r3UnZ?AYlMhdU4Qt zvZ}Q|M}t>9!@hR5EC8Ss(2DrYe`;{{_2_MarWqVlT$?i*8h~oHZe4}($kNiXYQv5J z5*n2gAT_AE(abdNq;02qt-Ade+6n?U11O5glL`4nk6~^UwKV>4vra#EFwL(Vcbf6S zkX}nrzY^c;sGr_P zv}V0mTkGp@VIxD7Jjh%9=xJ!!Va5yMDh}A_un@Fb2lNn-KEq03>Q5`t*8{ryJOFwmnxuwMCL zAj0K>oCKI_v(CbhXLTBMwRg22V&38kl&-|4A}@s zcm=w2E_79pbUIl6v!5<+dBma(P@HyQDXFX5fLx-)WDgdFg2KY*Fe^#)_4m*G5iF3G zN88RdWa;0XYr(`|t&_hvU@o1wE+L|iHEs3QNyOU2AVZ-nB3$aL8BKnWu)!Ur(kMB7 z8`4_$n8Zn%Uq1M^WYsl$$rGBIIfvme$8eT39TSEkIlC zbFx>$#X*RUnppBk9xH1H3#iry@9ogzCMY39;_$O$3Pti&$|GfqKph0HukrGxGzUO zPTBS8TPG*Oko^)CThMD!>Xi+XK?zK?@X{vG!dl#_@(mDekQ%(h)csfz{@4 z=m5q~51azD;?o5eXdz+&^$?3O zGi2}KiXRHF3o53C4-OB1Kx?Jy-{qwM>zc_Y!pD982Wjse&h;9{4^y`6nZ38l%m|U4 z^_86@Ss8_pj0o9#M6&wYE14-uR#x^NWhGffA|#&oeSYit&ZM3vZ zv?+G$$Mu09czuFY?J^d%x(dsOyRq~E5vMCn2-lNUX^r!@9N+wCKjmS^%QhBlQ_T@= zZN%HOQIvZ7JV)YG!S*og!hU|p{FwcgE#`w^X;Be@+s33`!C0{47+<7?5OMhfI%{Lg zh%k|1k42`j>=cvLAWD}REK_WQuqVItheT1Og~TRCm&k_4I%?Kl1tI-G&}*xZ{(UBm zsch#d@W?l#(JP~$-9MwgmuBMeD9?f_TgLk*ww3<0%!On&r~Aj01j$_uX@8&CHhV4T zP@RmB89JYU!U?kJhPbr9qej}<_X4=AjYzdS89)$60{ge~YbieiTG_aQHfd%xY;|GUh8y-&0#2-yXR$3z!0eO>~U7{KPgr3{HAYCw^pVQ4Va z?<*Y5O1qCwVZWdJD@pw2FaAQHY|Ntft{NtRClVx_G~zpYX+M0?fhvCE(&aw69~m-P zddG(o&A*^O!LK2Jg?kD5<@ULg;|HjeglS{|5$f}+G4#7sfbXRqD3 zfofNnzvr~2ct^mKzn<7_BdGAG%&a#2S}@a-2PY3$TuKxg@B~vwH^P3(GF_&`+i({Y z(Cecz#82Qo{Ws2Nu*zL7F;pu1Mx#JYr_C!z@_=%u+gUY?jT@>7!;V9m+OKi3i=QIG zWbpLg*yrR^ZyNOb5>%HMHc3$wVLsSi&1KRwC^Nsl`ht~%$x!R=n9rPO(0;8WY%#Vc zbzJ>*9FVZ zIU6yzrY3DFEr~n*sY;-HmUu^*axGvAOL2t1<__$ zfow`q`RnHz=1(C51?(XMcjVpfuD0jOGBle$BU62P5^=cEU2mGx`Pa{1k)8SC-LEju zn!pLhpf_TviKlA!z4bjvpc~0&F!e>o)%6$ex80!^6V^ z+Thz@>-qZa+o=r0eb`9?rX}se+uVnDN=u#ch#1!ZPy4VsIP7g)!}puI(hSq{=h_q> zag8anW09oc&2}6y!8;8P7;c&9HsGJP3h8R;8CI|3v=p4HPZcV|4^gUSs3h^fDL5E4 zXeq2r`|2YPrztxg)&P&vpWqT3h5h{{BKjv1%hv;UCo-9F@$=Sry7P2dI(S~U+TNM% zbkwP)!^DskuJ;lUU+q{xFN`s!n-e2+(h<3fVa{avwXf;voVfN$FZTH|PQqv@uaFR5 z2M)D$wa29K_;>G6ZaewFHg2b(=buXiIqM7WK<-|;xE%>7OTj;ZGEyPx6eYdDHg6AC z5lO3Op+-U>k&wlO5E%6sM)zqVog3)KfO12#j8Rhy9a^r;D3}a9OlIUJJQo4gL0U3M zU(cbe3wH)BKi8=H~1J@(0$)TDm9p}z9IM;R@e0}kN&#CTWUe; z`m<>VDjF9ep^G_dvvn{~9FhzR^>g}B9}dD)l(KO)J`c2BEpLZFeF5&`Ug)j&q18pI zdq|e~tTiE@W;6w(Xpx?SJN{Dem{S3?NB+=;p!yIEdLLAM2Ay&rG%Y$dHe4XuL>&{< z@LAHI_ia((H#%wrHH{vajNm$*d4CZUP%w54%{N6_ML2pWAlY!vxk3pFLX^{Vg+ien z-dYW6e3N)s$tmU?$`D*}i2D92}4O9L&H-JdWgo?2dE~9rDlV?sxQJl7L3hREVXBoBW`Ml%- z_4UG~->g6B)+M4?O5{e1r9*{zuLri@F={FA^X)8VvzfKSQRTJ0RmH4daKLDri=aP!=Kw`&p=E%g~)h@MnoS@2mf-0-9VluE+X(j6b_U-^}P z*)YKv-7ch#cpvaL3GOjm6{iAWX?hSTAO#ML(F*zc)fU>gXo#GGY8}OXLE@i;&z5zN z_22Z7I;sDLgTsvicL1?EFY_-SS7~M#%8cLxC?ZJ9#(JOu4E{;MB9nmbC6YZvpL-ht z7>PIlYfzzhO>f4rD`lfhB8cqr=;lp>(dI)I7;~9}Hxf*-sES7BHn0t4p|W+{{AD-z zj?Ti3g`W5V3K|264LT(GB_wt>^mSN~h5~)rws49faFZNu-V0oMvyy%LXn(t900jlj zdXDI#Ohag#t!t+C0rqj0y$zlbr1mNLoW?;k3r+hGBw?OmS8N*h1AzfjYQ~Ls)RzjGT^R zcdeB>@Y!rJY;5cI8XtR=61kqo4hxLTkT!1|QYjmMcUx_nb(;%Pe|@Jzso7>=;@;xj zku1ZijC}=s%e^j1kH*nJ3nQKvzVG}WPT3u$Cu@8C-BErrJKVN$sfis=cw$yQ{9M4m z4V?v-hXJi3)J@AScR0C<6KYR1egv%FjJ>PTfZ5%A?SFLS5@%bND8Llz8EMNy0>=+6Y?cxyK^?1Q&4RhxfLGz9K8r*PYIRJxjCMkbDih0 zb(_?&Z{c2Zp4ID{bIo(-(xQRVh7-wY?ChGP=&6c3AZ@THGm%Q!)5(;nGSN558cYCC z4J0fB-@De1-21=DmTA~Q9QxR+ z_{CngH+rB*G zHGxXY^)h%h(llo)ECjusSJYC5HJw>u!qWG4BmZn6gSw3SEe_>lqwn7sR`2qcep1g5 z>S7hAJ9eSGYSgR#z#11zEfQhKg8k!j`1(!x)){B10NOOtcqa`yRodH^&T1u2@tYK_ zqWESIqfyb5m+S4LL`5pFIzd->#WgA}C*r=%O*qzbA3TC_6xk+`>#+BJ1<0C9R`wZe z)xNuH9k3lR4^4+TJorM73iK{LgS=NPQ~fQf%{0!Mymg7rBFfjAyadCn<*KY}tz}Gx z;Y?)K_L8!yq%sztr=i26E1k6vDz?_-tkAX8+|YJ;78E0vt{2m-eQUQWVUk);rv6^u zuzjcPh*Q;~5qJ2%f1YIDBo~>@SEVnjMAJ7c3yC;}h~U$trt+Jzy6B}G?~$GhiLn{a z9Ag}N(pOe+qsTU#uk11{e)*7AM79%76Ic502$Jl8zs0p0+#37_p9}F*=T-&Bv@SL*zSR31SuBi9FMN8LT_7|)01)&$hz2LD{6ql-m0w+%C^v62 zHoeh-a8Wo&AVVFU3`ejH#JW6e!&sRW{_8B2t=f)aEm*`!eKaP4(I$-E`2Qi0ewjbFkv8f7LV3g>WmZZk!S>WhlaB{;fz+lU>m?_GE%=)J09 z*>QcRSXzsyMT?8#?rRhFG@VWr*V#p!pjo8RN%EH4+VaHm%%g%~ zrw&Il)x9$*hqaZrEG@{BI3;g(e^({N(ninccpAhIjFP-_z1mS<(ZGAYTI(;l+EVKe z(bGT-eb2<^$M9H2olifGMNd!P^;s=rWB-ojVj>wHQLl-W5x#yr!N}jVLk$6%?B+mWxD2uA+#rEN4S6)?ja&Ij=K zJ{ZWlR!gP^!=lPBRp>O%Y!(9KH!f_6u{#@I3Xq!sS43&hqDZG*0%gE7PKny{K`HxK zEp5_zT+A8jV2z)$7VxC9@KLp3)mW+BmptxFl-h+4%Bm$Px4Y<{QhV-cz(bsD)fQ7^ z%^o%1vN=%wG({+;lp<6>TwW?OY4KTvZap?iEd6M8uC%-7anHA`V^MZll{!KCFJg@GiD_FPdZw^&dHLn056^k4z|l*X;gN;^ zbOdX9?J`wh-By0OOmq0Ops>&o;-ZUOQ4%K%haZvt^auhkVFUu%dnUtQe=TL}h1n~= zt4KR<-d`LOuf8JT}H{iaT*nwj)%)~^Y-NFa7J zbFd_}lgEOpV0v|~lclfm+w7bBgv)!3IwqovOhpy~zoP}!_@y5y&1LY|@hzk%bdEHu zNj%YLeGptL=C=7cK3IPLGj-I(&`B=DWM^q|*vb z3knvQtOtObN&s-;_YmqC*e`vNR=)X!K&?Whip7+Vp8RK_z;Q$IHEp7`Tc>$m_gvnK zE*0SF3Vxi_vz9PLL*Dh56oY^M+=-8cQC(NIKtbYD8m5979QQkS=7+GHY+4P{ zQn2LCW>apgIGe<#_|*NKpdJ(FxpRoilNZtbG-CdIh0z%TTaBH#O!lcm8e@8zBqdQP zt0&s=^vhSBXU>H_Rkn;Gqfjq@^g>?8drxZT_q{m`VJXi7U7b#fc*j|r=>LQvT#*s( zHpxjz2|TNz#h{4ZCLWraLw-0^Jws(PkP6Vv^gu?RJ;0t$?^;v;J@>ddKbgL*ZO#M|1@UA^vf&4Zzt1qSI1~UQ?$V2)!UzdyQ4GXUTxPkgUfe} zxUlAB;dRC8+Wr>5ImK$cvcyT4l2T0WG}v`+OUrxg{Fw3aSywOZQ&$Zf7{VLVNWI#q z{_KW)*svtdqTvYTzn*bL;!hgS9~{2+o4DJAC5^{42D%#A{4wFw6s&c;@5CDV@v?YS z`er2Ke-E_kLt}|Y^gm`a3PhQbrPzXGjBT1(-e%bSw|2X@Z8FV*!r6Qy02JQ>V?|<4 z&H!Seq0&YMz}$jU6D}%8@WqkE9zi}Jy9JmRTU;FR>sKKa+3yBABjtAIL4xrlizhSZ zlW5k39qGNIF(Qm(sm4$<;otY-oSg?JqoubS33? zE=?Q@{CbgBEFeR6%yhMmnwU2qHYS^R{gTw<%`&I=i95rr*Wu)$I->D)FQt$zG>)hk z9s+Tt!qn6h2=G^GbExnh!zk|t%m%RoS5M@--SO*)ZG=i$66iEV@Zv8(lbL5MyxCd# z>eVZgfl0XGtT_XnFm?JWbala%gls+>M&Snc1nypBQ&twcu8i~CsdYhC{Y~FZ3Sr)) zaX!I(>8PX#r@C7m=k0B1-HoK@!uFsY%bynEB=CznbZg+D{ABChO;Y8Ru~@;(ZPH9r z#ZAwhsm~O%=K@Z!`^9?$=`}jW=$AqdM zDLia`z?$WTItkQeypYbrnAJK`xx2f+kY36}*8zo?IMpRRd)AGz`+Jv5cb}Qw3`m8^ z&%i~4`IHmvJh~C(WMp9Lzyql@$iKujpjRN^IyWQ7SFT3~_f?(RN17zixP&CP9b zi4owZpNF2~7OWw_vVZ;h)v!?wT^CF`hyY_a;R%o*QXqxgf*fPa60_9+?cKRhQ#Y;& zO0UvOCaTZoBIyc@46g{R(SBfLXV>AUkFmd`L3+gn^Bu6(uvOoB>3>`osGQ9vbIs~29%XfRz7LTh7KLK3v2G-?Rv-v?j#pZxn% zWa$8Ic9ez!R<}%GcB|lW$Faz^0-wwDsUK=AH8= zWNBeERsfk^0BHhyes@pLBDBN6{Q_HkuKCCVs5LMS#V}t4x$RPb-|57U@SJA<{_P3Y zE?7@~lz5M!(@wxWO#t08h!f<&_E=f>6LLe`r|i=3xvju8p)@wu*+>g|0TkjR4(cVF z+qcikd%J{WhQRu}5A^r#*E5mP(RungilEqF2m%qqGk8Tbas%>4(7Fd4w0y)HjI{lW z9nk=)=>vtMOc~sg0vxmlAOqCk1qT!fG1BmR}6Tz*Dc>7F3}24u$syJO#xRd&&I?L@5_QP_u)cNF9JLc=)AW&pq<1 za8`u3LkE7k*zNBybR8vr!`lLXH}O#Eo$u}3V%@9V@y4Podrp7cZPa@WGU(fF#W*CMLFqW$4X z8?iMJ1tz|lxDi)n=VMt^qh@T}bj~!d z*{JTvpMl%)3LoK2LQDnRbvq;#cu7tk9^(A+O&AO$go$_`PL6+``~q}P;#O;@#mqhc z@i05n0nqKEzjG(#=W^t{gkVOO4G4Q+Rzfy(+Y0+E(*UZ1Lctbv9-x3ak8%t^Hntb) z+6+IBf`-;{+k!P%*g(-#1;8+}nn6EUe)cTsZjr67!BX z;@}++lnWPQ;A1Sad6f-*I0d^s?2UExRX*D`X9!M%^K==;s}WwNRYNo*j8^JF&njGl z|3W8F90)8om{W!q?*)Xnmz+K>xSm@7{h8B;9U3m#*Vv0+tU)<*2^fv9D=QM9f`JS5 z5ne?9P3-+Q3^+(*0H+t|nb>hegZDvgh2L>gfsF#FRzz3SjW@zmWd8c@jjVVt0N)Wf zSogjR_I-XSsnkdR4soYdKf;!UaO#8RlfOz<0lUUg(ecreLQ!ZJ2gVF&jX1ypVj<8c z(|vBmHx6z@VCy#ElUuc&b9ovRJX$sjtxvkDb-=lgP;z+Gyt1109j^L>272~qlych@ z2TkPPP-!%X9J>~2I?96mUBAGYl$i3Y6>~z7A)=*8_d<)ESPDLdK&+n1g{hFlcOI~# zOY3m?;Y2=LrA>9DFi@i|5t?JRiB@S_5PfK5{)zEOL4(F9l{%ivEjfvXEl~mIx+NEZ z+9_hZyx7~RWBKjjic;^Ywl}7qXw=@ma2EG`q?2IjHT8tWh^u7pifJ6BR@msu8QtfV zx1~PC`!;Z!8ZXe^4#C`i?u6|zSMw~p%UQn>zi_|tnO|pL?EAUD3@7aBz0dwq8=IJ* z>Ss^XPH2+*{e+#2WCGv+X=fG=4Z z!xkZ+mmw)AvmXflJd{iTCdhoW)xmQBa|>f&)Z8g#ID*A;6=j(y1uD`v|3fN|vso`- zLFUYd{>y$Us;}5$hQTPq^}aakcG`8?adQZ^OVd98W9e7)` zu3jZQ7YJ%NDz!u?uJN*#K~{lI0U)hI$YFxhDS%bgXw^Us^Z_Waptgnoq)NHEmk}0x z8)yQ=a<**hr(bxibaF6&^C?FuhfdgJ3+e41{<1|uD)sjlws1sIaD0K5G+fEzk&#bMY|GzU>#+^!3VTx=?S52GY2AW-nr zmO(HAvrHfrV0ZrCpc(`98E1 z)0vo%a9O35-8nTCCVN1C$_SEbBp8K$oEJ7{vgyBrS17~)WBc-Og%y$Oa6O;q*8J5V zX7Tg%+#JUML=E^F{>cw`I}*kPsm&Edc7UBeLsg^$!eCST*9X%6pgdW~Rb`AQKal!N*UgCytFW*JXoi zl#W571Ql2t>x0=A2tv`bv*Xpjw2g;2CeYtHB}gYNY_Gq(KfZ5iMcZ6_Ez_yUXe#`3 ze%}VEAxos_m75f#l*x{2iT_qhxCGu0k}ie@FK#v)xQcO_qwcyD6OX%K zm=Iu5nrw=9b+wA}IxSPvUy6CLPL5}_&MC!gSKNK;x~wdGRQGVGEefxFt&}h&Q;&*g z3-x}+SzqdoVIiN5qBEv+kFppK*ATpd<5JcALh8o@MjIQkzbo5#B@g%16bxU{g?EHn z55L#gE@ddu;S+7V8X@}kHsdGzA2*KzIj8R3cx6#h6ma5sdL*M)fBD0x4$T>VD@@9K z^MlV`3~2Z)@w%NI>&fS`==+kO@3KhjNZ!slIpSyBK2!j&@K+EzJAhOdl?t8gftkRQ z4%Im5Bf=GE%Kstbf;4$%OVovqZbi7pru%Fn{`mlz^&F zPbueE*tOwmqL>t$)EkVh=IJ5}JCizn{ke`Kd^omR`M0PY*_X<(4K~e1&gCRKCpm)0IzpdsrXq5~qs2ZQ`MT^9G2*~4#vbkXMN8`*Kw6F%6aB(34leIGFhlZ-Hh<)g_7yfC@7UPP6f;NSHFj|J$e; zUIFQdVYpa(`)FWM1k^9*CbQaBb`sOl7|NyI!~X~G21QqY|3^3afwWlWi;Fu4K;N5O zkUN4^H*xr>JC07Wv+32A&!0$mnCIPO^ctI?^RcLR=?3cZtfIe9*5;)Nzm^5J(Wplu z-y{j;(jlqgT+@~c7}Jf{+05#k=%DL*S(Alx@v|olTJgw83)M8l$#LylfdOUfz~5!I zArT}oj6ty1VoYw&jsa)^k(QkxYu41C@I3wKe73iE|1QfeOvOPeYWU0qY5yQ`t^fw{ z7Fl*KxMf~ApxkdfmwX{G^xN+GRA_=R{!nRMvZi6~S2tcd>An&va~iQHS|qGN)~|21 zgr2^rnBhQ@^*SG~lH&yv?*|R6FYOc@348~?C6;3&JMO9ysrKUMuKiY0(WN7_7{I(P z{%6*hB94bwF1A27b=46V07vPbq|3$!k14N@?x!&PC}_2BvmMEtlo|U#6;HPn8cSpv z1iC|+z@4JNtM*a7Wsc7n84RB@F?TM6_^46@-}Jfg)bLkc`NrX*^SP$u4T1pBxkXP+MvaEYG7vg1h|MUXieZXmJmq@ zt#e5#+o8rjxP_G)y*E({dj8#SYIvfN`Wt5!K2{S5CJ;A{iZW=Dt3cHY`2j$`H@Wu+ zIKZf0SO@TVh0%;5cnE$WR@|-J7)l!e0D!<}ecl(=XTJmmrvrp1z;~rl!+=OeJFDFv zZH1^$05AYCb)fZym5d_fK=R=^?A0%2?EU{F-w0Xx_9C3k1_qKLsRBGv+aS10hUW>k z!u^`*w9j`PzyJc8`&cLrpyQ_ZuY_aU@_wIG46FQ8D4cTO=mnG96PuoP)d{N2rm#;$Jqa@p-{ae{Si^PaQ zgc_8oysCD}1;s`{k?%gF#^AowckzA)ohf8!G~NI56V^#5fVq7DLm5m+Md$5^WT4ev{=WJ=^!aFf8=%)%C^C_<38G&T zlaue0JFNUhWAaeHjsA&7f&b5R>|7NIN30ICR13gRe?uPug6B{HUhCv#DT$yZfYWl^ z0|6dDBd-eY&AqQ1{;quW{=lbC`7rDag%!dy;lv~l|1;;KxYz@JQ^8Y%RO~PSYt$)z z%m6j_P)$?;423kHkT%l(Yq{6CAb?%gBi|(859q`CA?NU5e<{AZuMYtYEiTeEHXTtC zPo<79c)Kp1)6Y5ow-V(GhahJlp4!uAJ4z1>hTe-3xs|=99?&>hUhj9^*0!3q@?Z#I zXQFkI2=PDpqW7%J{*)`wtsZ8hUOM}s z>I$1jWk67`#tk|rnvmks9{E4b?LXQ{RE;@gzu`PkI#Mt0b29pMd~oso!JJ%gjx*n6;6_h8CinDdL^@ZmHmoS* z8ROeq=00!!`blp*)$ID-dDC9Ou<~yyOb<-!RZ~{Rg$1E(cO$E?59%5;nhb8dg7Da4 zSS`#v56^jY7zxfDrO|Ja&M-p_-))+hJga8KCA(&U?$mGzO=r~Jl0*qdkhzqhV9G56 zf1iI?J}vVFx&Td=N2Lj6xts|Rcf*ES6|((VvpZo-JZw_yKYOtAtXf{&7^sn zgq?rI?zqbud{>82G!GPU9~j+`7W8W;~K zRcq_xG2-*@Ve%}Lm(L8I50w+=v}$F^-JgH$N~FFytX4)(9=%+9;p}At+|z`3Zsw83AnZ`Y@^=yG5QSXxu1eLo^vm5%z z;>IeQFR(RXW1L10TlqX`Hcxp?!`(V83N9;&v)7V0f8nDALkOHfwdcU4e2m0eb^K{gb=VX-uhR!3Nj(#=T1JkJRkyqL*=OlFAv6ysQ~x zQrP7gEkc;i{;ay~!$URZLTF2E#7{U&JEfg)oIjLbD}tYhNr&$YLjuxYj}RsBev#K$Pi03SFt9%t>xp(EcKIH z!vsOot^!Tis0j?cMTkmJ3~mbxesOyl8~NXyCnZx07hizV<1X46YB!_e^zP>$#QJ35 zEQiN&WYh*9IF5x|e9IdyC3}f47&rNK%dwK?gJTlqzX8iJj)j+(nBWUMi^2x@@Y3bn zEIA)(XnBt6LShEZBSBC1?x7YfLSu3FeKWfVQ76mNDDoF1;OF4GTxV$h6!kUv)hDNtNJ2Y9jSzDaVN(VFAXT-YYJ;OV|cW zA2s5s{F2emYmdQ)Lw)B~`f@IE-P61eor};}iIIsn#xhCqE;?pvcHHf8uALCeXcK-y ze%a`>USg=hSku~G4+-g3q_|#)329n8r)@aH5T(AS|9)hMYR7fTf1>YfwP29#(IC@k zmk|Sdi>=`zmuKw|wVax;$TgaYYf+}(KNI1vG(9d7X;@~empFH_0s)(ZL5SKxg zF@aJ|k#d8@$CDX+F|pK=uONSBq0Zat`Tc&GH!Bskyr%iP}Q5$9r-W zHF~ctx*~M7N%Z83Uw%uaH?uGcGBpa>^om)-oT+BW zdBK==4W9>Cr~yqE%U)WM(x-Z5zPji=1kcYFrKS*N(5z#6sc@WiJRHeJfFmA?lmSP^ zsqJp@yMgbExMZk|apP}3laLh#3Jim(!r51)n<@#N%=lPP`dxspS=>ES2(viC<+mWW zfRpQC>HqQbr*;Q_D^9bTG#y#GM^*W?7h*Te^K>LCgG96BtA20i{MviW5#VEG(@h|>~-g?;gLaH#aKSx-R(FN{J6u~6&n>_Ux7YEt`9|CZrw4pTKT<$F>_*u&(mnuOP*qQHz#kq87vIHycu1;aCYkSg-*vI z8#MzlW7BZBu2*&swulWcjI{KNx!p;8_dS0rW&@W9;v=-?&9rt_ZNSEaLx3W-EqmYEicX(2;vOS1IvlB~rG2|a>m8{b--0EuxGH&`-(*iy zDzu^WpD3?RejT~~3yz@4-}H<|o7)`5QaMcaKZo*s&YU_IXgg5wHqpp9dgI9pB2&s{ z?yt#4r9IJCTy&N&=AJl1L#oJ(nZ0Fbzg)sLnx^>Cx z$t3pU6%*d3<6fI0mW~BA$&a^U$!}uPetS=u4Q^bU?OPGUm^2XT@YyQwhzr?Pj9<#+ z_QMIjIoZWs-1XyI^6?F0vxx8U8&g5Itz47qBbhd>HX#l|ASz!+m@~-$`$Dq(B8j;1^SFoS>}Le7jP;VYfOVW ze*m&vrfX4Dq-6Dz7i|k}Zs1$qf>x)le;w(`QLE?=@H}X}!9kDIc)DJvZFi+|hVIZT z4A!&Gn;ynuK1ZZxFKv2Jx0$lE(cU8#^5`KD=H>0X;;)`+r>h{v(f)*4%lOq~vfjbq z8A8M9e0=VeQWjPlXQue!Rt2Kt-$r>tn6;5(cIJ;jmL%V}>a`b1f^9s=4>V0n;bg2` zxs|e3FkH|_Ur_o;)Jz`XfUKt(|1_1AH|=NivIT8F(oAHaoy6)i5n{em+?1mZcl z!21CWe|FoLjO_no>_H|A4*35;R|6pd6LZ_w01^Vcfm^!J+NheC z&`Up$1>jU4MoIkMpx75dQ^KJ!7l7xxd`Aww3CMEL0A_%_YM?2CtD#|KW%X{xq4N z)id3^Fgo;(86_6i#a1!#h~w|eD$T&1#H6e++q?<+Ndml*}VOU8T73#bnb)mYT(8dEAZf z;?|61ez(6>pSyQB@{VdP{oyX8jQn?%fH-o885D+)knR25`45NXSIvU?94{+xy3CBp5tkg`WYR2BNH>cLqTs_5YlB zVbIYxno1=M(atr`y0c&#bUtLYjc}Osr z2TJ`L3NZlrMY@hxZ`>i+RM2Q>$muLw_MF)Dxe3-}5VW@d6zv0F2EoygKd}HU>sPQp z+5#$uAQ^D+;IZ0I22DLr0wmU;^00+odKf+aL!8reA#4`Y+M|jj+!2zA43TwdOPfct<}N6<2(uqAe+*3Auj4`yVvu74fw+gvY6+Ia4y=F+4}X2N=ttC0!%n}vGwT3+ z5xS#50Cyp2ehFYw2T)}cU3%cvvA+8Yh6W73^Lu~;->3trXaV2S{8N^M9!21^L4(wK zP0t8&IdF#X;3~JMq6q+1;;1_7==*Au@0o;VZS!I52!0Eu4 zz70guX%q=<0f`9c@!=psS@+fgQ>`0o@A8W%v;gXRyL*l-Yc*^mn6X zq%fBG-*P0`lhRV8tg`f7EdYT`-Iv#uP;G~mVVNFa_paPFjbHG3Yk-eWspZQ0Mb9NS zt-$HRyoeGDoc7^x+H2CgUKTCk8mlHD;t6;6%fcZr$Kl@RA!T!r;&b*9x;epb9NtSA zV;-apXMQ^w#}M|0kA{teoW0FKPsG(NY{T<-w~PVd`Q+M_C}MtWsZBjEXJ`!(gY_#X zrFU$~1o7PMzX3@_cW*CB;;tKRhshVq9t&@y@om5zFb$Y-TzI zW6vEaMm2*b0lC9LmC>!Ql=YtXb9c{sBV&a!k5@By8)G%t9)=>x41in+7ljN0f4K)g z&N$Asz<(K^wg;cOlPfnQoIyRWhO7Of^sh0I)#$4Ap*xW#N{U7EN3c5 zVuf>m2pi4skiI3dIYWF0!&$rWN%Q!8F_)G=|F;)i=1|PHLn^D9&!8Cx6249#RvtB>ZtzErl8}Pbm4Gx?JKjRu;wW+_R)WzO$^@d z%yDLt^6?R+M!kz1m2a8~ldmUdBxZhCIlZV5g>?hVt2<~!b6#1QjBmf)z2@4;x00kc zYXanGWYM9{!g;DffFy|rn7weGvEwhQYFUS`f%=IIWbc41egsi(OxLZ4 z(n}%YVigc}2$A9w6^(5R*FVz$JQE&2(;8T;L{Tm|9Jd8fl_7;xi{>SRqQgC<=_t{Z z)pjV%*-s!Hz^ule?Ce>xoy-Yn)2?8Y=`I`KXWB^7dFzg0Kv$$i^7C>1P_9D0oz{o% z3XRiGG@&c!z@Bt=hXwTtpW-TUZGHVt4+pdN+LcO;{KuD3kxaAK*VOk;UQL&%d-a-O z+pdR_UZ%v4Iew}suB&82ZlQnEJi#sc@o%HPNU{f1=Yrbn&oWB?_`ol~XxYd8ud&?i zo}0=*aEsClhU1dML_Of3fOJR95u9<~LjQn5;}e|wB`;r+%gKNeO^vpL25aZgiTf857Z(?6GTda+JQtJIwgGV;qIpjNLE1|onX&z3wti&q_v~poW{=_%MIanEjmE1$!JJ zjE~?B3FQ5J8V{?uQcQu@ydNV%3_vnDI&C-Tw#PN~=^|pf*n%+hEjZPVYI_e8&nyJS zXOU*-X(WG|lf=t#%m`G`r*nTu#=)r7qfG*G z8|LVa))c{O$VdhgC%{WG+c)FS>>8u#g z-VK8M;Rl49e~e>|27T@SjMf4QE_1BDUn)yRUj8{$bk#784Vo=5GXYnM4_;!3@ayX8 z`e0K<$;^CxWwQcC1;Q>xRx_nzXlVG3?dMN1rdY(OLKVmWGFiy(f_VZCgKvBnBl#iH zj~SF)U!PvTt4yngG?>!&zI*~Nf?v-jsJfnlxC*@|Qq#gN4jV1AlPnwLEkX~1Bn+z~ zMMx`KeY=w!+!|gVmrx6WPD>aIh`d+e4MtjV*hjS>F{S}TReEo~yve7@iK(rvO&;I3 zx3j~Ke+MW2|6(7J?I8#%Pxm&mi=$ejC47(t@}H6n)MWM`@~n$<0LwCZY2+el{P8v# z(mpJ(PB=(!4JY`wCk$5eh0pIU!j!F_XRk#r%#K7xM@0z;3E8aZ>2{*rE{Jr2{*~@X z(aODp?r2p%&;}&V|53Rp;{yV|LLpPr`k$MN%f?xWEB#Nm_Iy3{E{hWwUQ_GIFShn$ z^-C}Ne5$=}(EbNN(j{+UsmaF48jwAH|NflqYuIBxP!Q6pwXWX_ zr`6Pty-Ich%dF)m=>ZQ7uNpo;XH){BB9~t|CHn-Ekmr2+RH$~@_Pl7LI;rr@9miY7 z=0*{YL^`cK4ez*;#K@D?a<1NUMAA^8ra#f>Us48?Q{-YYh zjdm!xKhc?5wm_-f|F9XvU2G`X8zu|p0%Hal6~JTGT5r1CMj1;e9}I%=&Ycg-!@W?Y562>2UJ}{ECg>|+$zFhT0x-}*DTs#Twfq61 zy$cOEgHpQ#K8Px)(w{*Cb~Y;=X>DN&05ahtO&;)@7Q#ZL{7Mhh^Ace{j)xO57J5)r zK#j=tN|`sfaYB;+R}j4xLUWCxJJIoAYaf zq>;P)Fq09~ncHyYOZe|^S^R|A2HOyDxdpr;sth5$u#U!X1*Cx8(9IwLj|?QW9YBZe zXCd|Ta1rn=?u!>M7Pkg~oF4@}Ky*;$yaTEyA@U(OZ~)YizkYcf{`sl@pFIa+E+-lT zf)6!lDxMSnZ+Z}n>W<9SWl=rM6bijBWS)sso*g=rFn;dez{{}d8@KQghBB1|IAFg& z&uZH1XvDEJdmE;FJ`gN$Oxb_#zRT*#+>y0)AJ#axoW|Oy>3U!GWM}ru3+c@m|E)=- zNtbgixly*NKW#_zUte)G48aPK+&ezd)9!bUzP>dy@P}0C$Cg`n0^ytA}uCD!yPjAH&{~RU> z3RF}KzY-?y(G&e7olxFRegqd{1D);qgE3 zHt*vTB@uA*um%CjpzF5DU_rHOZGhuo3y{0sLgPg6e63~HIH@8G={j~g@~JZ_-x z6-2Vlnf~OM+w3SVNZ%mARzITRj!#oTr$G$g>~Z${yE!JWv&N;@JLQxM3_^%Y7)!6G)3(w`;Ep$ATXEj{IHv`kHHy>Q7H>I4nJEg7mxAH zqKE%?hq=!VbW-;rN@ShfC1P;LhbtmP{s9-WWVnE`NYSSfEQvS=i1d!K%mjNP@VSk< zWKz2r9kYe2J+Qt`9%Wr_Q8vR%RNg-|=!|#{Mq6=opA4%s`wC^aWwaI5z0|(P{zy=d z|BBIR6-z*m8KK_K?!j{5-Ol}-9y20rQymWUQqbjIu^h+3BS)%j!G+HsS1q??jBNws z??1PQUAq<$yR|1Lr<qqzIZ3elx5XY-i;*HcrH+dY!9gZfktsW`sM}o`R!Zmx;c1omckxqx|CE zgKX{A@;s;Ya)^g0WfK*K<|;l2m-;B|&d@4C6o_TmT4hzt$0q| zMB80LfQ_4qersgVWkdB5?^!R;wGd36`f5qLoE*P0oazz7A!-drn>>r5T@QBi-b35eGsqdm(ICbHGu2La5hNlroxV9yso!rBbYk7Et)z>2#sm>J- zwQ48HG%OWSULV;KD2?bmpHaBa|9f~^Rox`&KQ3hd1$1YjOO9%hlKAN53Ta8%{JFV3%m~PakwbiYA zQ@O7673EMRk85Xmr!X}gZs{DZ2(g7zg;0?4ooRD&9JcV_iIdryGGl>iYN}}*T!(7V6!{BQ84m)0^kCnP5?Sm7?Mnj5Lswqq@59rzqFyE?9gD%-hU_iYGzx zLW&*))3{2hgc7_CyFo@?>)OPLvzK&__G-Er}U$V-n{7(gDd-* z*flrV(rq8#(g{}CO)s1c(WMKA{E<92N8X#@RGWTS*Vm^5ZK~+BUHEu$&Abn(FkM=i zIH2c}FY|bb=$Wf?)ogB5lPX8G*f<}aW&7`=k-?w=b=r&(n03rTciWw*?v{ZiUgT{? z<34+1aRcAq2Jpz52~qsiC{D~?`^6NY9g&%#fOF-tzxpeW@`gLn__95gU52s0jpF0m zW4a<~JHF-PkL;3VcTrxHW3V-D-#lMAID8F%ct%~1$K)4jj;|^{#&tSz=XN+rFpaOe zaqDvG1q+)iE~)?BMjpgkhH~7&&_{E5sK$`hPiV#E(#mzS2ZC#T>INM=ZclsK!YPla z|4AFSY|=$&MTzj6{E8m%QIjZW%<%p?d%Xg0hI49E+vqH{#IOonL9I`Eor?^arV4xL z8W%?eb7i<4uJ^rjl8TTP!6ed5Nle!|gop@eMxBSATEtGxkMh)Jf)Q2tL=dkWXS>NN z3h`DI2OLU^QIdaLq&G!dtoZoR(>t!*dH6&@E$3edT|Grma3^}eh;H0Of7h4uoK$tD z*^pBGUL*m@gJVj7rxL*;nzyL0|rLn5Lnl!-M z^nGJXkt9~VRxcW9f){8XRTU{;WgJd1nm%~V{eTC{Eh4OjY{~phNbas|JZ2qlR<@Y0 z@>|0qRDgP9NyTB(+(z6vk;|O+RjKYwq}Nk9%s(26q2SXUqREru9*F$K%Bm=0@{1ks zp&LuP>m$#Dud5{|Evi_no`tX8%~&q`$EK)!!x1QTncCk*qH9iuyqQ+S$x=r%F=Or7 zi9W!rRj%sE;25#Uu^1i4wT4V^Q$8=3uR_bo3xduSp?Sadz8OaD;wf7L_!?_}O(qv^ zYj9pq>;OA&6y~ZskwrivhZ;>P(&_nW;o#mGPkvSaBPw7OVls&gX$|p;A5HKi9B)#Uv&@Wn`o%wGpAMniSQTE} zVyf!k51%Zp;Z~HFnr!WvkIj_)uB5WNpiSFMc}tSqpDndP@^j?a|K`&KN9`p^pibaA zckUegRsevAOTio$+!xy|dX0_kpc{bvpxbp8t8>jt*Xt!W&oN7Z+KvpIY+MQo|6=sK zg8nbs-aDS__x~4HX0&Y~dnXAYDtnX}g;3eF?2uAM8AZs<%E&A`8Zx4#NM@<*$S4#= z#<^d8zvp|-@BF^!uix!=yM6xX{YiK|$8}wg`y^(=!uyZH5j+G!jm*p_@haMLo9|R` z*L66g>xZ`Axl5tOm%Mt}_HTU0fwAcMnO8!a9vreB%VC!!F zQyDw{w9D3H243dC^S;r*S2XaUreDEe{fS8WQd7sMVOGI;ZO!m1|801*ZiZWAI*Xkx zR<|@B&a0pluzRrn0q0NOEW^&bf0y0k9!D=Ts_OAH&=LjCru(xkNlCa6p%1RFmQPQ4s z)~Vg(5)fYj37v)42?Ww*a-?fFm}}o=h0P*3Xs`FcFIJJe?DJWFD(a(T#mX9Y4NAuZ zd7TIsmR`(RF=8^MFUTz@U{tBF{nZ_!L9aq>s`8vi=JTT(!j~P{@wh%)xB64Gs1pBc z5WZoVYL8X1HyF8%NfoGg*i89M`|!#&jK5_ZG~Pw+lGrKo`n4|nzt0A|#QrR0ZP?wJ zS8zbryWQ2s)U;`6Muy}lD9TQV7 zR_pcZ93;2;e+GkJoWa4~4nq!tOo>zvIP9sZ3mBy>y+7E4VIv~D)s??w*ndi_DkPTd zf5n53y2|Rm1)D@bvC`ftp+X8X@ z3L*e+72YKvRTLzi2|!e(LUZDZc@)w>>_84%`{U@aw+st^<1e5Mv)&%=qwcL64Hg`2N5DADpFDaF#-h zVYK5h$%e!UJgUit6d_ZefJF_#wd)Y{jRtdH7)1UtYe=pq8L<%Ls`&d)8T0+$gT9?p z9~6twv$M04CfLgORX~JDF2_)^1_8~qMC*zWIwEODP6OkEIovH2xJAIp3KizuSEjT` z_=)0?pc4-TW`}Po$^-yf+etne28>ysPSU2PHZ=JqiULTrbit zGLoh_X7;ee=*g+wGs=r0Jq1_mN0|XYJvuH-Cu9@DS9o>7#HYp@)KlBoU*w>!hQBKQ z<1a+g!QqnFKoWC_9g&`aVFB0;g{wR#ncRs&8}G8Ar6mY3+eE38s_)jU!E?Ct{||y~ z==$ga9BP{&XjVS?5C&(A`!hk)8d!1O)^j`zNR%zL7m-rkH%wF3y{ixO3nj3H_CSp~-&r^5qHq9oV#ZkiF%X zmi>^@Fa30N}y zx?{jHGzUyNKG;j>A;B4oB+;@W3h~^N85$B#4u}JzYXVVQ{)b|oNbB_<5i6-a$&+Zt z@It~HcnI&Rt>QWbG1BJRfT^*ww@-CD z7Qpl`en^1#&ZR&q9DI1I4~o@MWQv_&Ef`3oyquW*QrF;yZs@a24mW!40;X+|uia0# z=@lQ(C@!FXBjIRG9{lHLyQ%m`QGk)55=3MX`S~9`-kq%~2VpL)L`v1kXg-!nVT-&iUPhSlU>XDI=Pp;24fcc{#iOSS{eO2fF zEx_PY)_*iV3d=K)VdPxAe;>)P2hPXG|CyTodlAWiNExuj;;!N-f+PTBYx9Nkk&r-a z#dQO&M5V&~PKaj(GVxL<$q}vjpnqN%L^~FQLo{K?{h68KvJys1M}nQ0yu{NdN#oUjPQ{ zk>p7)+5GC&Njw=OMlsjZrgg+xo*Dh-L-2$V-u@pSN5}K$BHhj8WRB}&-5~?duI)xF z0OS-0;i)rZ3c;pBUHtohcXz6tN>_l7n&eyb%aPkA(fkCzE!kK-zcqjjti}a0c>Dv7 zgvIN9<-dMioq8z+9eY7xVXM#bcsM2&y0Ttcni4UZ$gs9hW>b;PZi8%BMPRt3GC7?8 z+~Zf(h91dB(j5++dtcBqY?hFtSYHs@EWRb~CX-EJOIlw1I_w zXYXUe!L2VS;N!Sgy*xrE*~A<@_cgb{Nrr|t<3>&2qnqjJQN2@N!^Q8*kNic#`XA@}x4USEJ-4&9PVCg#&hiph0rynG16f3+B5VvZ0THxzE7TEHAyP)f2TU+I^ zfQOcn-cyR!<83(yS=DEJ?2o&+h{5T(VP%KTR+w!d!RY>|4|XhYbr0KmVoq6FTIzpV zi?t_KQ|J8DM`lkO1Me^RZ*ii1z|jGn40WSF2iza#-M@d|D{9He<$F1z*l~K;4R5H0 z^YFg(sGgp~28-#46x9%Z!1d_Q=IAM~L z0=QWZIW+I`n_F9j#l^+P>Qtvras4@jGid3D)45A;UTN#-@Cpig?t4c531YTL2*>!_ zjWt4Ys?(0^Y+|T&gXNh_5AM(pEs5U|Xw)#dX^U?#+x&8w5QL%Yb3&-;z8>%^2yS=e zk(71!i=@$hO9_8mSH2Xq`rHc0TUgg zwt;CXUFL=?(ODsL04df+*`EgJfCB_g^lULHlMT6>pr= zf4G7L0~#%5LWmnb<4MJdA=*O8#p{0o>ErEuelWP1=qJ3JB$_@0Tzf+4~5Cw zSO3tuI&2YwnKQ3_-v>q6-|X^t_k8imicdvE^Qq~NDc7-s;jSB$L)j0>`o0m~&g9P44}~$wjJ_|NuS@eRQo)a)-G1-n5mQRZfSQM_w3)oKLZK9f6{m)oRicx> zQnj_IJ>I-LbyEV5&>0@ZhFjVEN!U70R$46Jc!lncH|u_&Xg3LEHQnJA_aOQ)VhY;w zc>nAFCj&Sx93q1=0iJ$xk|T+i@VFqxUYG(OJr@TcqMIWwHVMn>n}oIYDtl`u&D&g= zUd3wZx`t#)K<$&5xLCZp0wyMKV}9!>KUjQJ`%?X02CfcQ-Hm#~-zQg~FG5-g2pVxV zF0>f`K1I^G>2Ic_973u4^bcaTlz-M}iG=~;B|AI^Bu}=*JFU6qM5Tp6_4eZGL3&V7 zmZv_Dt`zdFf=@$41+t)!(N1iaa8O;oJGO-9kZ=Wxy&DM!!5y&VMlv!;z6Ca{?f%8k z+)egYMS(k@K71iyXM7jDm&A|`OO$KOxTk)=Wy2iCTAUe)lkXoR{61(=6=Nk;`l>Gb zMaf9r723=b!g8;?$Kx89f{v$}#UGNd(L3yax2$Ay=LyOuJu`+Qyo14x6oXsarTz$W zSr(+$>@VieX-WsIwmjtZ(q}opT9Z?xAS5sNC1cty!QK+4M{fPkJJc_l?NIJyIb`4^ zu7CZ(%g0A3GRM!`P*bZ7Q^!oGn-5qc%YwR4tbdl>Ihw_nQ9U}m$>t;!UpNc0V;@B| zH|cP~7D-Zau^IlvlH`s;5-Aj#A&0vfFDvw7jpka3ms)Z0K=ujaW1cfC`ac*&!H^2n zGZ5OGuq!|y%E2s>>;zJ$p_obxjh_&lFg!f$icWh3!)z|vbB_U$X2k3U0x&u;Q5%~& z;WddS4cZw(5@8xFIoG#u-_o=iimIb6zGVgk2P_S3uQ=5miG#}wZ#%aOb$D9*INH5oC5;Beg`I)ZKR8z~=vD#;Zs00_wV0ID0lO`^CFwi>nk9ukX; zSS#_6Z57BFw6SsZ%{X`ZfYqLiic{quTr|2SRG};)DH2G-WQ{@6|FXo@M#oMM7N^nR>Hdc_B;-w>z*o+2OUV=}Gp2027WN$`4sF zFxeT7TZ{^_IpCzTM~X_lMaT07hw>Ttxo6cW!Iaa&O-X2|6OOO2o%)NcW%BkrI?eX%exbH%lXVCmV_hGNC|( z*i}%wtc(-nJ_u?Z0N{|sA|gG61+jba5QN3-h$pQ2;wO%XIhB)nn7X2oR%f4JMIzM` zWt@%gCBHpPGA~Fw3G}6eo+P6b6qI;>Ql5QqW`q0r4MN!=Y`cIgcUsy_+{1(^z4vGo z6i8cb!0PU^rx4%sFJqfsI{V1$T9I(lz=t!vET$i?DhV}moRD2#Q)G7s5m znwQL*TnJy!{L7W~oyXvz7~|XV&s?Pf_>aF?xb=Al)nxdUH{r5o7N1-6 zHmwMD+)b6;zE3gexJ2^Pdf)d^>yze-Hy<-uElN}f$>d)*S-STd-(Cg({-bAoTsM9g z?X+4mA7%W%r)IZ^P-L~s^dP()WVkKH62}~iPdDdr6aV#z!NqXxBWG$K?pFYyr|pyJ zh5wqtAGAdGAUdY6o~HAP!wbb5YE5_OIRm#{HaWRdU*~pZsd}FL)%xxIF@kFf``6vu zwITR!TETLkgh>|Nt}Wl{*3!8jm^soo;tfN}RTb%vGk@9-D~Hn_G#Rc`TdVDqbj7HX zdxE>OCGtk!)t=17+#=Vg{mRS%eg(WX{1=R`vzPC8KWm)quyP&{wB2g?PR%^k8IkPa z6sx}sT&aeHy2Q53O2V;y4x5|5g5svd?0muDfDQ%LO1PFu4jPf?o0|G!$2L$XS8yMG z>9^aEmi|09U3jA1?TtTkTpHG^ztB1o)k6`}7cmzu=6%PxtMT>OHC3*b%BC`nAsuNR zDz_*Hcdy;2#(2o!o|smN6Qf#;SpO}J%vk z*H;=gcEj5ljJ!~Clm`T~Gl_3FIzHLh0!kj*>crLGt1H_Bd8UEhrT=r-3vYMn<3K>bYa|7)?atx?fO!U(aS{| zA|MUy&id78MRAEy{B)Z$NoYP`bNl5JYlk5ASKAfN(;vxx=5?-tThxS8LUYc5zNx>z zL`yKobhz_2Wut?D?Z=4#n#I#hT#D)uyG4pLIjpY*_U=p;GP)s>cA;1YE!Dc--rlht zitpMM_&XF*s}0ik5sL_^yeJSuGJbAF#joIQfH)lQzc}d38SU`ul{m;Iu(`03=~H#b z%j+y37?(FxQ%i|j-x5mH6lR~SUb?7g6~66)|FY;eS-HS*gK}oO>tFAlzo*Nf47IYCii!;+j9=%O)j z$po~_hV5sg4j4NOKcIkN^#awF^p0PAqu-_XSnD*eEkm%_4NVz!hZA2Br*$l}tNcBB;%+qK2w-2H#XPwTM;{VkV|zN5*B=~fG4 z%gt}1Z)+5=Xf1K@*_se{g_@CBUNkP&ZTSHt8=c}n91L&J)Lk>BPUt@1euPSE-e!ZD z(pJ-IseBsFxVWBVLm^F5H}k;;?aM&M zAVK~{mSwj?G>1#hJvb<3>vbfgE5q-(x!d}pkHKj=ajt$F1ggS5tyBIN-#dM$MSl_) z_jAAi*$jI_D2nrLxT_Zj@yEo63+j5Wzx(pgod}&n^+nn|s_bETFE(ELnC+L7>AIhd zay(y}yBK82u;zTGvCXa@9!7#!1a5zrX>awcoqTV2+w@%ZL1mw14rlK>Yl}IUErMFu z@3HiXizIH)E52&Jby6Nru5tn6Da+xm+mv+Z&DFXk#h^Fg$E94++_&-7HPbDw57jLk z)xVb;{-ZDb^U4`}K}3)UFbZ`el2nFL5NDMQHwyCV^MX_)M-!PS)xe0fP)8*+MT7EqF zj+@RdC!>F!Lp!{`i0OY`R@qWn0v0Q%_C8kU(2d(85`Jt#jxWvFM9mL%%PxrKer3-??vyH~jrFtt#G!OrIu>shcTm zr=z*Tm?y;?Dv~{7>2oxiKn1V3n#Kj0A2g6H+^QcH-El;L_rW-4H08HGG0ju$x~q~q zl|o(KU1c{app9ZRw)m!BM7+M2|Cb$b#PLY6^$i|6)H2B?TSXs8P3=K;9koWALs)Zj zGwEW5zPVZFxZ>QkiBSGTMOJanJFhds64iy(y_r5`V2Me$Q+2U9b1WrC(toAy=q-yY zhwS!hxQTwNe+0^$K4;0vX+wddK-<;!^uUSddM3tp2Jez=^i&39VqN$GY^_6g6zq@W zT%VmAh@1XMBW5?hlCo(V@(_4zrRDCes|gR%3Y@xW6Qb*H%`X&iqbO3}mV~eV->aj8 zyC>{1UU^P*ZFu|{sy9WVJ9~F$$o%q^3j=n=tIK_>8}7{Ac!AC3W!)7@q(Bw?{5^=s z86u`@eDQ*D`}Ti$Iyl;Q)6W<4%NZ}=nBYNpu2l~Yh_;q~1{K%!;bgYK;j~BgWPfQ! znXR+RI%|rSUa_S$p zSOkr;zp`t8f7sMjoKMu;{EpnWl#<*g+u7U+hVZ22+7%9)i1Dbh2IV}OTE>XL7yOzJ zVq|#!2pa-p;1jLp>LfQmPx5|ITYD8}6YGaoRjv(DxdWHVw;@2da>j4l`S*w7M@~o; z?LwF05_V6L5VJjCDVlK4fC)T?ZtS7iADfhPT!Gf^mVYMW7ci83T`8M$QXdpkup3sxf;4vpkGoIe+RE@EhlY*n2q@ zj^t_7To2bS`w-TeF2vTy*N|$q8uUgu@N>WB!s=w|c^{^^`PJjQd(XEsZrw^JaO<6V zD4((VqgSSN0Fsr&oU0lsj*H4GxJL)gNDIkby= z9l!p5ahir@Efs!_-SO7)O((ryCnbIU(7KTFTS4po{x-8$JNjqm4x6ge-VM#GOW5}^w{jsDFV>>I?LSr#CBPM}Y))PB5 zj0#R?Ni-8?9Qw(V(n(HTMeGq#Uj@Q-~^TsJDN$bK*XCQbuzH){+5o=uNa$%sVq7=8Ysfz z*6*4lq^t|M#6O`?c516c(sOij!M=(1_I7wIC+G|()PsHW8cCsBlO@z!GOnu;LJb>oO?;N5nPy1Y}f+6k-GhsAPSuOCRdC8KsQV< zfk93T=geKgOiW@jgWf-jO5OTHDH zpfmVeLSP^xmg=&8ZWiXKOT{F(2pqvymLrv;M_^gORY$P%!j4s3Urd}I&yRyQfHH#% z6hF*me+VSn(+wTHiiHISz8K7p_2av;uP_?=e1AAv{q64Uf+t`RPqD!u3**aOTpB=) zoaXTWC2TiX_{E5^db_}2loN0*&z%0JiEx*QT1s2U*pbw*p1buQ_#do|j@3V1-JdNW zoSyf*en<5E1Hxt{e`gb|!ehs>`y-jw&{@x2dPp5DrMCR4x4C(RvB?QyQl>SzYS~6N zM<+Fe1v6qzlS~w%4Xv5Xf(oJsZGB(*RjOVHHq?a%{O8*>bdR`uQM+!_J8-PIiFc*6E%#BkPO``s*(8!XAgVju!;-AKh$iY)I+%7?LB&dPK73on(%D^CPBY@|qwS=#Ro@Q{_Iy z6YawHB47swW0GZrU2hoRCTWNvZMneO%3-0LT5zc9B~&h)CeNK@qyb^jY~W}F1hvKt zusNv@HGkr>3-Q!8t1HW({b?=(S+L$aPrQ>T|1d}Ry<+M{^LXcv6`~{_8w>>L9K2Ek!uViO{;8Q7Ae zkJ5>91K)Bb<%Ocx;D|pEa(=qCpl9Qr*5WA#98=5`?W5whrV~}Y zGd@bl;%gapk4x=AtwF`>y~?uc+Xvr^?2x26Fls8rR&O{+K{c36UG*&Yw`q`9gtXDE z*qR?FYTRrzf|zv-TU!Oy+RK%01<@O5eBmCu$IYa%?$YQQkypy&r>;@4Xf%whyCf`E zX2j_Eeka8(aXEFty>%?6+vh(?E7>qnL^H(-Qe#c#Jkw-yH|r3s->b&3n!jt$7+3O& zeT`-GlP_s%r0&VQs^#n~iu5>o)MO6;BSGH<&gSwN5PLd`VK1VN%=b^sVgUGx-izlXR`ymC~>9!Gg9JSAokD( z+0<`Q$0T*zl=;nuJ)i2(o80Qlje*-93(%-#E{v6NlA9P9p4pW4yFYaL^v8}OL)D6H z+qQ|SC4V578SUTbHf{Rdd%s}xLhqTX8N{ltnT9H$6#4Dw?4V-^h;|V8uUhu=eZw=#uMHartjJ^ekHq`#^ zg**q4{4_4hZY+@H){hGYXM9MkWvZgr+7oz^pJ0IERB#U#=%ZT2NBL)JJbGVgLLJ!$ z;!uLH`Y*jkO(v;=COKT8p`p6nzBn`x)eG3g>Wqt$1ija>5X!*n=ylst$cf+Dz(VP=QPk}TR-Kcz{s8uw#GJbAPDU~QgRLV_-1OLREiG?t90Ydjg%?ot-k=6sLGDkIlt6Ml_fi(yOu!?5bDxX}@i{ zkRl-xJk%escU9~0sr&RLrU{V}&2&$XzG5@B_K#1z4zwk6=0Oq`Osq@=}iKdrTR>TNt{snPx65IL5 zU_HIVBPnL)@s-^q>zT-I2rX%3v;{mjamXR^nAy>(zVLR=!GxIPSBTiw}4KmyW07&js_#dosJ#?n`o%W^6WcRLgyw_g&kIMlG1zN`pIbQfSYqfXh1y zxF>T$`v2b9)6A#uIIT5L!DP;5cY&HcqNO>EaxUwwzK-|4vZtBTheXR>FrA2y^LxxMk`Oi!GrxL7GOl*{B%$L{4i%0iMY%I~}yyj%gwIh|U|E8ym z^Jg)vYWo9uGTO~gEt{GOUT<-gKUAo*}Y`uK2Kc>M`^+vV^{Df z&O=1Mwu|gQIMEGaqZ=l=D!7D@Y0E8t?#d1$lXUZ3nsPC5Ci_yerO9}E_Ei1cS6<@Q z(8yhSSe@&E9PqT?E9slC?qJ)J$D@bimHa8D`M%YaJ>HK~@v^6%PtUcL;dlrN${bC= z8M{51Ui z&x^)ftLFr=spO2`ZFa_S2&YKo8eneC+x-O_yfTg&cb`15^l$|?dR-*kQN3C6miYbZ zK&UI)3OaKPtS!S+*i1$TJ>yPj*e%#}1jS7iE4Kdjd}6&5?|2r74hl$hP>QCG|E#oi zba1eqF2y;bV_xE2~X0g59^r8SI<>1JrFm-tqla>}KpabyRB)QgKPSRBD z*Z|Q(CZJg6Yl=}H)~X=b0uS$f!C(*f{U`V49WdiY;BT*@*2m>XC8Pu7IE0<`OyD=n z&(powE$2yW(4}VmV^b4h){(~VeYNR$`*+7{X=-*kQQt%M zuQX$eUJCN6EbCJ$#nnZFlX*?M7PdtKYc45cRHi^%S64cAs-YPxU65{G;6}D zTN65|A?Fgsckhs_hilrPvHcDd7uLZ@oX$TklPr4KS`iJ27K8wy>($<|@8 z_EY)$$V9c5 zU;8e$^-5?_lCXZl7F1scogSKuZ-4FBhb{_|G=XeU513SW!};*6?1d-SuB*u0@$)(8 zu6*$BljClFe*O}4qJuc%cA+>KTaQa8k*SmLS`3*zkI(O9V3Cmj;hUY4_4&CN-x?WNu*MA{++V49@EkQEbqTrJ-z$06g9 zM(7hc6+N{l(r+gvt;;YyMFX9Pyk4?QoBw^xa?xlHCTci%Xe%Zx+N1mEC3R!{P=T|{ zZBV_e+<;}h!lfm7QtCAyQg9X-`vB~_Jx7?yOW=4f<^d+g-CaL0#NdV7dn!Nz0hu~F zVSVC;$n@jPqvS|^p!pcBcpoz5tn2V%Dqg(k9hLLqr3~NUFv#jz7wgXd#4smZDebm!C3Gn`2rQ78MP{giq--W!u7hYXK@PeMseT z`t0EImi2v#3?m|ug$>3dTw5G*%(p;|(Z$7ACbnuU^US z4)aIN1POqGYgrWs9jNs?taJZv!it6f6&ZzR=kxl}lVppyvr(lq9y-#CMU1O>5*KS& zSy-N9Bz=wrQU}QdsC02;I_&}ohqRUv69W#?#8|rboc;Ilew=;;m6ff;JLHhq0t>+M zdnp``he!YJuzJK))%zAo-HG#72It?LqE~qsdb}Cy=1fBEQV2T9^`2iCd&i4I*B_vC zr_^=bK*0m-XutwEG%xoKw4La${hwKpvaV*CfXZ`(qDI-*IeB<3xACd)j75 z*_OpBO(EI#KeFtvH_&seF0d-0pV=;Eenr2&Q-@8?v2Eaa^e?WT2^N((k3?VZZFmu} zkFWWr!3C|2k?++$)&BZ<;I`MRrO`QRP6ZM7mu81{{!o#Q61iU3u-?LIbV#AqBU35n zwA#9h*`H7E<*d&tJVN!c=-}6>=&0CE8Tw)#x2#!Ng|?uFj)Tue`${5z&M(J)NZ%UC zCt_Lbucy;M`D@$n0~v20*?nQ(lkmoeRZhpiqx<)#`Ck`;HMFSlogAk4cb4Qv$GYkm z7%%+(Bsqej?fT+k z(}<>HSJlonP&8sxm5@?;v`h2&u2|!Sl0+pRW$s^I{j@{IBCR`~k2IH7&Q|Uw6%z^F&HSP-MIhs`ti?9gT}rz)y0xyO&<$08H-bgXMYZ@+?yvArwfF7W zUJ(@AOq9potY!Id*=khPUg zEd+~ChH{uY*U1RJ_&F0gp6wQF7^-#LK!{VdsHt~Y*1lFvxM*JEQ=`FhD$l?(z1)k?Eb@$%RIuZ(v`1YXzIrAJHE2}NrASt zaAs!OZF58UvhxO)cRcdc^$2&37~ie7vuBrPa7xc+UdgL)*92!b@~WDs8p>`XHLzyr zt0GGmj_ZdIeFQDsE*Sm~#H~%|__`el;zWajZa{v_e0phnC^??Y;)EP6rqIn?!<AZPw{V`N`=@HVLClDUtdgjVz;FYFkaUb{-PZ zG8(^Xb64@E+XltL@pF*Myl>bA7k24PsUCG(K?n8x-ER_p^J?g7`N)N&|{Gw zgemMFu{Lxys4O(?D{+(V+l%77whH^LqinT>&?5-D*TkN>FCa#sf)KTt4(M zw1rIHenis)>XZ@ycX7EWJ4-=?bYcU5UK8Q#|Lhi7Ptq?Vzad-q>fT7K-Gb@w)E za|Ip

Oo#a6}2M9YZjo?n5H(aleD!ey-7+jTBQDtrCmQTy5K0>b_p?GJMMM_%M_;)P1rdw4E~O|supJXA)fIKB1i zpxCAgorK6^=XDK^N4F%Lrz=t6RSl-wlDTh-iTmKyU_McK0bz==-Ya$$CqyLF&K2%& zqrGnJ8NRqhhG#&un6`~JmE-O1*L;#k@oldxDp1{|rY_h2+LQiw?di50qg&@qJZ#R$ z8|Llbu{(3?ZGNX3tvR+0^bfBEU5Lq($YrZ)6*X38Eq!}J1;px?w2H%B)%>bqve0( zN?n+_(epKvxMIFQ9gCHsu0~`IAJ2yg1G`NJ=0ENd9al(tXXGkT{c}ECpR?WKvYDuw zba#5g?$WRw_4jlYxYj1>N&7<65$45u!Ihr*o|96xm9IUpf_)9KneP_dTO#7<)U(9# zI-4FE6IJBo=2yJ9?8kle-=kb-oTWbrrr=W7{2tzx8zz$tl6mgOg0%R$w^HlxE!DeC z(^cZqm||BSXptg#R9C&@F}Xl)E|EDp(MH3IvQCFR&%OyicOsnH(d{G_1ex$MkLktX ze1|(sr?UP~95cBX+$8X4xDWs1j&!6xUu>4cX_@EyL7yqP>J%4V-l&(^0_xvxjrY+c zl?Cz~z3Zf36#Bxb)C7o)?zK2OA~bg6tmQ_>%l97naJCrR87=E3 zF>MO1za3!4?pGfAYBZ6-ELzO{LC~#1TZL-sPPcbq-W<7|QQq1VnIf4fe5((}?AKfRq)+RONB!DX*Cnz(wMuoC?TYn} z1Mwpi$Gm1N5rexbaUE--%! zXshda6c{3(Uhc8%?V0jM?{7VP3kOK(X2n}z z3e^}ri5=k&(gb~hN}>ix9_M!R8y|d)^e6FcbWqsWVs;7c7x(@H)4vys7;drTYecT! zIyQ4+Pohf6$#r|Ed&%l;$Bx`%4*%MK#09BO<;xzal?W28>%mcD4Y9ikGintHNUs{r3IZ z6+e_YVQeAJJ-~)&Z2~#F1K<<}d^{)zd>3A^7$YW;1Tx|Dfg|=SXj^vTWc^e=jNj>XOI1>gZ$$y)#;nHm!$W2g>340aUD z;SmR_OoF6AdsUnfzdr$dQ(Ie`2T8vFIAcFw#8^SadIz)I6Wsrga?IV!mO@<1HlJV2prVPVmPw+RP3xEBmAtddy{)Fcr=!Z1ymTPXh()Ot^bzIEVNP#}<@ zb9x9q%M4oLFf0|NPGEAn@_OVRK9$8pGyOjkGTu-{;=rt3mZN|#KO4g{el&sSVY4Xo zoZ1-=o=ploAyDc=ICPq$ysAv1+-*qnOe%)sHn6}`bLbdtFS9=g(#UFL2*p6D@D9E{ zXMXmqBu&s2oZ@IM1M-I_{92O@udFO;?M5J)cnEZqFzDy{tUdBh#gK>ql;iHkNO|aP z!2%cY*nvdN#$e4^_v zyCJQyGA%x$ZE34S?H*u}u z=PzI_>w(@1awR*wpG4(BWIM#mLW-PjpL_b@od0qoqro&#ns#XFStKp!?PG zf%xYaIsPnS&(2m2&G_K;&Hr@~pa-BNGCF&!*iHjdkw(HQ!pI8G;1m5o>tu$)GqN87 zyCG&Twi}vc3DVb(e6Yzp{vohUxLk(-GH1Xch?do~-#widZ%D?Y&l2SJQQN<@BEs_+ z+)1M~j08b&5g_4yb@@ktIb20xg>}7pdw4{D>a0=~)5f0A>SEvgYfhN{*p>d+l4^|* z?fUwspZecYins2l7cAKCZ{4P5cgT}0=9wIOXrn%E>*5U!-X<^`Wk<!qc7#H3jK!PZ@QUq)KItu&ERD zc_)74No4<9g`Gb=fB%wyZ{=#i2_0<;!G!fYf5loN*sGYO1m3c!+f!9 z>ma=jaC-JaINJl@&%kfne)#Kq-Gpu^3I1$w$x`4$o1A2}va^Tr(3!?3rnL|=2A-PA z)mCugz=)li@zubB_MpRg(LA;1;DUt7a}t+~k4-c@Vi#8dk=#W(Ft$1q-*gJ#NOq`n zUP5qqXG#;{Hvw5fY>HpR9~0XWgc78nnS%Vvm(t%BKV1w5Xpeo&X?#Lo8d4L4;dOz? zCK3t~?*18gc;mca9vHvP_#|UP z*JICb?q7alflxS=T_n~U$+jyHv6`;9<>c7A>qH&J+b_gS1rNS;$bSc?1`rW$Lzi!I?&G_N#MA$e6jtG1vC$W5 ztois`zf>(7?_nm1MuZw6qc+z`w)ta{9e4a<+QHN>+ zUkd4Mep0}16uBj93&JfO2P!fHZIhKcb=jju@3oX`OrNCN;}r5eC74$%N9CCO+c?`7 z-^7!@Zuy*eXs+;cPd;7XWxd?Oxud4`H&`M@QhtbsyLVkoeYA9XI|E=XcklJAH`UjnhLwndg#0bU)j?M-(3!|Tp+rvkHix`EFRMK_d>L9c(V;wrF9fj4_ql=P9 z(o zk0rgGYYv8Oz4FE9dgjnVqkt@Zi9Kti$#}i}yy?n)EicZ%Xy~6%sey1|+Z@UnY&PXM zQPgVpf}hx;VHDA0C4oL_YGfHJW?g#SWXLu961)*85MP|;h+PkCbcuN)}XjUd+Y(= z0E-MFX4N2v@#cbme3$u**`=9YZ0}LStjG@^goSmWpNjZ=>8z{{W&_YX130zV;izW% zpj>eu0}*!N09JIob|poZ9BsC4-(IZqb>}UTK1)()!SoTL5ZSnQYry61#ZSTJ`oD4R z+4sol3#(5f1RE9F)8Crf#rO@~2QgNFV?B?eNG0O#oBF#y6|nn$&`(HY@c|D^1QR&g zX5tH%=86OCp)UiaU{ap6fg!)~hLxd*26ZuQefA5>@7X%Ni>w#lXlcz-I8;UDehIyN z^?IYO@DXpieg+D^@qu7#sgrWIlW>|ONi;}y#mg3h^i-&e*uczUwHm>gGYSmJ5$9_J z(as`5KpOU0Jzf7&!i*D1E`oHNn*5}trEyB9#HKk;JvCuG98Clr2qY0Ed>yR9BzXi0 zaENw_M3;S-a9TeOiGmQZVIiJ|((=^8T~k8i%uRF?%{q+A&^lWfrGt0;Nt!;eh`NJC zBXcfE)!FYm)-)XzuoQ%6w;eZ;w5Oar$xDg>D2O>3i!EtQCEiL*iluNke?d+)LVzN_ zOHkKCdlS|@F@jc~9IPYc?1DLY>bl1cadBI~3y_(vE9?yKbQ!_yeFD)N#A{$4kL#ox z7jCNu;WZ|+&0DtAqfa!vdBg^f5A2(>;H*s_z0J|JCw0pBeV^kTi%&lA$IZ*Vici)2 zibOMcDG;W<8Yo1m-vm?#b27dV3Yn|NnV#aYA!7qcG{9=a2wg3XJj)%7q_G%Etdmf0 zlhZo3w7dGLeqV;H$7S6gf5t9%?C)QUF65Amv)mbD=s*OC6V<|WlsvLzZLO+ZzVQ!P zy04j4`aJtBtMdEE@NgR_2}uhQaW-RKp2mh;XyNdQL(#Z&+qDc$8|o<9D24U5rKz{N z=6-y&T~J3hL%BSg~3b%E)h&%?e0dW7?8jXmqfkt?@wx2tWX+$k{}AO znU8rYqNIR;NY2jAB)yKvlW+oe>SYM*KbpVbiTYz)&og81a~N)L$l5?`3WXDKEI}&% z91w;cel;K9Q1D}PZcVy~s0$qJxe1GmTRw`^HeN~nd(4E~z{(meK=Q_25m!7zZqCb> z+ONevJBZ5(O+w7la11QoYtPc!M9%d%bvSqAMIT{vLDvvbdq5ONPO+q_ zxzk1Yhc9UaBb6C0onjDcXoKe`(^7uE?9s<3p}d0Bo+OqdDXy{`JKu2Cm!rooHeq(F zcy*;cY2QV^xIl06*24{wb+p(TCz&@tYOsdJAP@rIi=4l4Mb^*E2p@|H%Y2Cfnc(J; zOl$!7xvz_rkLVF@Tkjz$ZN|4(_w##{o($-wb!Y7b6!&0K#(YR<@*TsbpXpwQ$ZRX5 zf)$G2Q?TtPoF{CLPkv>1X+wJX(v0wGfXB50o?_B*I)vDkka<_c< z?G}D+!JIS85#MWk`^+LA7^rTwyC3&-G(f9YYT#}1RQ*v#|JmOOf2_***GYdHlv~{Y z+c!h6zGrkw?xk<^_1*WAstn0Y89 zuWBjJI-626raeh&g0TeXpsxsvwXl*>3RE@MpIr;8YIU@_Q*q!e12dD957X@FU1Pdd zW(^a^BU1Ak9b9%E%uo+&%uWzdVoCA6kgQ}HO&3*oe9B8qN{j7X^Z1ja4>w0z?=*6i z*#pE=e&I#rzzj3J^w?|d(`|BfES;Of8Ok#?8?Fa#c*UG@=Gc=Q>+JAMXH{3dM3cD0 zMiZvv&AYDgoZRIjs>Gem*kGd}aO8mJHFp~|s-5^?wpe`rG1*mraO*MkIb^(bdS`j- z0 z^?Ln5qq8l(4+?HOU6iojv+JHBZC4^kLzl?)nD7TXblDWMw88SqxLk5m9$Kq0Ffdf@ zf958Ym4cA%@&qG8M!RStv+_vwW+sL*rj*%pAF?i0scY2j=x)8h%-u)Dxv?%3E7vx` zNY-I!86s3?Mm~MBXOFmZ=}YnE4M8|2(0mNu>~#whCe_DanpTbFM`Q>lDgNqO-K|cC zGemcoMvR2U1Y5_5R%mYKr8&1I)niL%wSr>QIFkaEvRu|Re&70pD#zbFGmD-Z95@B6 zzlfL6bZ#EdapP<)6xnB6e}d`deh&ZNg-hCPuUL2?7LvhP?a#uBcy8s-DX3FQ@)X%hsC4H%vr{|_}z36JZe*xNB`R=Rz zrZ~pC z3cdtdAB}vN_N6$l@vF#F9ookkC-4ZqUiXx~0Mq23js@=VV#ZT9%J0N>=v><>xV}v! z=DhqL_ZD%#MSz6J?~m{NvBnx>&AH&^d7tNguIrci)CCNw*j29=LvGj;3-0c$(9|2A zVCg0e6mrto%V#N+rQ7P<)mgyGKQ`Xf?`-U0P}B4h_{qM+lVwk{v3D6q5A7$G5$rNveCXRCAAH@-n`cAkNb%-k>b&J zvOose5(~{i>tvM}EczfG5?s4Md~Lrhikyvi-t9i)oOC7cxiUuAGyK{8RfJ}%=n2OQ zNfovDT?G^@Yk$+K6|hQ{@`VY-8VD|*KV=yfSmK;goFGgvc0=ywuZVBYTXvVT&6+YtDA>ly;SW@#*uLYCoaT(HnHdh$xxni4$Bmw6lLztI#I^&r%3Nt&~$mBLUUO~ODMcs{) zqN;%f&MB&{GrL_n5%JVtYE%Gy6l;l_ZORn)x7~H(y-H~kvs1=_FS?bd{o@sz;@|hx zDY?e;9w#(PsR?-&+RC(o+h?-19_X5p709+wXI?nuOvAs9O$^juCtj>ZN3l?(v_hZPj51H?*3zHBTcUUuRev>iP2SBWj%YARF(qrFguJ! z#{TL`)YR40we!Ts-Sw?teiBccm_g)^5igDHdXha6&N?_%-w=}Z{^sduIWD?5*;m3s zHDUOAKT3spf zzs08Z5zG69xEvA!U;j6GM(ornnKgP`k=Ha!mK);f7YRo5Nn0%ptbVwM`3E2V5;#FA z`3&GDSo1zO8R?}4m&e4$wgBX9a;|E~ga55(v!apFDd3ND;Qa#jN*K;N!0mH9>{4rj zG_|lM+ySf`ICF^8Q1%xndWd!nSbMISn3yCq(j)i=Mj{|^shOF3Ziq~_fp1E8=lvm( zSgFUe0gN`*kFsYO{-2qi*6M;i<+7^$+`SYX-KS*b&8jw9&SVq(^Lai-to#CkO~Zo% zuZcLsReq@@nqL!M<&|VKaWLk;>CfOo@wvtb{jKiG$q%=kr06s!Xch=GE))#}isj53 z4sTf9QH#^1c_};afkyBcKRP@!H)h}j9PLeMG-heI|s)TyBg7YgCUvAT_q z?(_2s3FQD9h)`a=ugIE-RFp_F4k+|Mq0uGB+6B5umN#jBKah4qOFv({6k{N#>mEOb zxj;*3@Un@NtIowuzWC6roRpxD;ACX%F|bj0ti=*z)m(Qx;Y7Sw+Wv*2f!5ns|A!*) z2~53IaL21ktP7fvV&%gW;LkNDYLAc~9&6t5K(!so&cpwPq>*b9{Q4UK0&QSD0XA?_K7 zJaD+e2!82K3tsn!50(2m+SdxbL^Dq?U=vGe}DVp1|*eG(2whS6=L;0j%^=Swo}4{>oGHSF zDiLdO(HOn@Xi6^Lw5C`bG9P@I{VE=g0I!T8LM5anL4zmPt5N+Y4mhK;e%JpXXmE~obOzta24HJ zq8vAwy!z?29<(XlqJXbd?5t35{Dy+w z_>XU!xFps3OXJ&X9h1NIuNp?^oo|e^D7RFus(b<>O&|x@TE(sOR!Jh9spO%r9=%NrvP<_^{is< zeOnufSwg}Az?0kW&-5Rse?3DvAZ* zU%lryurs8?rd$T*W}s@z1U^^T=pYsb+RjEn1_2+04WgZ)YBzOv++nON`}#;X{32-2 z1fQrZfK6LlTPRu#;*Pg~rUi?B8|=37kcEcsRXFI1+@(>R7*M*u#G*V_+dizAK#=wW zxK&XUBjhTV0%-t}jZ87HL_2lNZ8?KK&iV`d0~c8Fp~jRB-Xv~c-M|Ji59^K**GU6ALVJ#O zLbx>&$aZ}Lh?kIT^)KKP`HpA;{YA?~<% zGRD)xnOD*>O?-Ly169{Kas1H~3dr)S2mJ`ZGfw~wIphCNLX@-pZ$k7=c^)-HxCy)h zL=HtNJi)8#@&NZZV<2|E{LAivq32=7)N*#r?`Ar}x4%7PJrBl(U10*Kgp~%(; zl)mU%WdT3@I50sD1$|pUg%D+O3OuZVe*dlKc+&a z^~vzQLH9hEHZZ(pKqRmGIv@XZd8Wt#iX6W$ke=>*>^0OO0vGNs;D~VJfKmwj_Qz9y zew{&vhYY_dPL)~644r12DBoaxhO{^V&(vsTgswh_>9$%={EYi$7e#s0e)pNz5g)R9x(L2{WAS``FlL z12}H###q=ig$~iN!04RV3G3Q-W`E+h(_BUyY*Shk!Z01<*4`wg7}NdZwrB5hg+x`o z%Ax<1!gbex90~&k@mN_p3bNhX>G|D__#PLjNj2s6eowoYYv}*pqZr|rDtSMMLl+o1 z`AGUv{A=z=V_KMdoNG-GN@(@45fThia7j^zpQRD^rAs<)=J4J#w8`2A^~K0Aqy1w|bE7)1%(- zE=LG5viq5o8ca9tr-7_U72edq3!;!h_*pxEb{}=MajCSdxZ9G`>iWI84KHRmhnj)L z0_+elI?x?G$V~1zThe7A)yDnG;vYDAe@j( zAeFO#0}~k9^v^SOpImzWUE{7D<=3zcJbPF;m-0^x@*rd%|@-zT`sc#9uZ zWTRUSpw9eC;WyFL#=)C(q9vp}U)C7vO~cq*N-tkMqJR4iI4Me+(_tBAa?H+WrXGb< zNv*!4_65Of`u0vC^KlzzHbyi}2G3OXJtj#ji>f=E`H6y2-`j^7d_95#H~p0l5C0HV zTz14e5R}n4MWCh_RMtZM_)0-{r>^`SD|`KKX;QL#3p5ASwDO(OH1aV!VZ>7HD!LC` zVLtZ8lg%wF6rnH_NOXJms7UrO?}LVitH#1$q5&X?eX@dFD<`Ac5b!&U!O z{&U5Jn(^)CTjj=ycj09N=e<(S&dU&DQi-?Q-?g*Kz&wqz)M30<)*&+iF*rizlT3X= z5!nqx%ADt0J^_Ir;qMpc=Rbk(%8g}T7amlg#)JS#MILL^UjT_FnEi;$`QW-Oy-b0_ z$K&@8%PmY!2~$}LH+1g5tS6&zdPf~h7rL8~B<1x?k+CvwYFih}NT4HtQbN!@SuYDEPBI z7}EB-v+*vD&$j@XR9Q?RuNV7L7`KL=vi;3{o=QPlof^utEOOJc`H$$A2%=0H&E+(5 zMlUejz^>w!htmnhVkA-nhCgk~52!tqE(CG-DS_o+DwEfe)ta+Tk;h*ElvWRL4RezIF%sSBrzCvc$f;9B`#gs35fay z)cIeqc*NkXG+16_&uYztO|N5V3ssRJnPEn)4lsLK(h} zedZG+Ji}{S0mRSB$Yl-wK!#ChkETf@?meae`hu^j>AGq*kJCa%>uw9=VoJ(Pw+FI3 ze)W}Bw2$!$=sY6qF3AufiKoX`nx9y4xx%Y={k++KkMbM#`B%#Cyw4A75R1aG2I=9C zfkoI2*z?G9osEyD87{u90TMIVs^k?F5&Nna2d@pjd*#o;CCtCEfzBzo$&=N%VLHp- zeW1|+#y?m;(PVdm02i(3uur7u96@#lB3w~;EIgsXykW<%V|;_~6cAygc{C!27cg+h zikt-o5+o;qvDm0!;z5<&2ncCWfD%;ZAh$Ab7eJj&*Du8+Cca*X5Cj?xIBb+a4co-Z zXemeaq^EKAms?@FSJ>GDK&ZI`Iy|#dL$rZ`2=<&)!!8~0GI)a+HQ+1fL6*h?0WaWn z1>!{w+G~VF8_QwpfF^9z6apU9<>B>t20s)qk|v%28M)gKpA?&r(EbAp$%TyztZ1(YhA+q+W1zdV_}_#frdO%gLkU5Pt8!LETx|#i1DoHdW|^kOMUi(o(`c z15xTb@Fm7Usurl_u`Bj2EZN#^Bgz<}rhw?pQ{b}Oe(*;Btj=pS)PVw0U1q5Lg`2RT zVG0(ZtB^&7jM=Ew3arV7P-F@(Q|To?_*(zZ*i=P^;qJYUnr9fq-FaaGSo%k&7RWyJ zjjbRr1=Y78#u4aubBKzEd*#@&58Aq!0Zb5GDut>i;IfZlZvZ*U;6?)g0jP!3bK~m` zAU0u;k;*jFf!iEuUrSiy7E)DPOA4AO$`*a<6IPO{&aFPS+fC3uE#X-ozE^%b( zZ}a~m1y>@yZ?N$;Z+>6^A;v!lxMYZiVU!w9KQ&dNe?UhQR3csV8S@SA<<~!~1q6~0 zen$kRZqQwA{W@Vt{^ELV_lv&f<5tmddo`1tD;UFSuBbCojqy`>9x~CkldZoripWY7 zF86)eC(kb2U0@OsTRyi?@~}_V{KekW+J z+0u+H%tkbybir7V)(3pN{GIu@YDzW9FKXbZxbk-NqMWzIsyX>-5^H^vw!m;x@(Qub zy&Go)mO6HQ#ZoM}Os-HF)Cbki;bbP(U$e}tyY=SbQC&~rm&3~}vKX?)OJ0Y;*p)eT zj~dg|c|f@U#aWeK_mdnuQ6L%w@|64TJ2sjO$&6nDH+f@vAsfy$(5V1L1qt$}XJ>1p zm+X0|jFqC-S+1vMV}-B?;bbs0&5B>rdUus7Jv!uTL2phxFJ597oS7 zw#3q(XU(p-87>gNWt!L#(ce^I!>DJ%iQ+*tq{Euc#GF z{*SM4J&A&uP6=i@KH9;@;nP}N?Xj{^Ju_rkMwNJYs|Iw#Fl z**8qV#*ea@!1W-RDWeutPFwa3Kex}|qe*URecx7R^UOHyrp)w$TNK2f zkH)_-GY+DVV_P>jyDHW#Q@#ouW&!&BgYEi7FUQB@$PKuVGJt%cF_ zkDEERe8aP51CxR9Q~3D46!N_%tyqS_UK78r`!kkL-a?ha>NCMWb2-*#IM1PAJ8Jk> zs+&{oq1t&~@lP+`R;mI}pO1{%a@w=-iP`4chAHdu$-DX4OC3dc&8nZ?DHS;(=3*)5 zCZELr!Gnb2l>uSlL9?cSvM%8ZpHoyRm1HFsDzC|#vzHbBRI6n*zlhVx^u@TEhnYs9 zdA%T=zk3g~J-!TTzqg%!_)PRZu&i}d>UFzBZXFb0soENy6Q+NbK;?a5ZV&Dc3}gR^ zr?%^58liWh@t+On>v@y?0e)RR9hVdZA@&5wf*;}l%Yck3hbgoJNHRU+1>Nq zOE`%RIlAAKR;tHZ50|;gIOLtP-%{yx915+pqjh5Qoobdz@i1lLa-6_uq>szE3dklr zBF*V;yulu(E2rYvBYd@3FznbM}!^o5{_$ z!GCiBN1=e1Bc73nAH*R0>x-#&HKAh|hV>wy zXN~h@#O&H52~L0Dd7>xt-9LpU5d|LJmt{_pT(n%6&9}zJ*onp%8fQ8`AvvfvYq6)( z3ZK0d_$)lks zQcgjF6WdNc^RNF~D;be?5cGU@v16*n^4{*N#?T^L*Nd9upG}N3f0MJ9(VRPdPLk`) z@L5(Y#p2-EPUl(UEd1e`n{Aeq7Y<)At@-I}JUC|B z=&W#~#QF5O8A8wJk*{z4@(@{?FkQVW_KHV>;=w`b-;PN68x*eQYgk_&1P^oQ|4^~I z!6IT>9yzM0@>uwde(8I|^FNPYQgNjyXNo(2$ZK`*Ec+u_sHdSY;+$%TMJYs}!kn8( z9b|nuL%E%1X?Svt^&m{^6fJWAp8)VTEHD~rrV8RIU}0l+S2L&Jp5<5yQ?JzF=@M31 zXEL;~jVXCg+)dk>YXt3ER?)y0hMG20S-}0-MLr`?TR0&Yrf2kB@UOE}5qM z0Z)PQ*Sdq+-5RcQQzr3}!cJcy$7+bB>It{9qlfE9L1p0qdTh;DgZmsy_=M`y`JE#4 ztDfH-Lnwy2;Ml8ycu^b&#WzS~1U+Ur4)3{kkYxo%GaysIlLY2<;+)UYT=prSU}XwR`**e&vY^d2?vQub9;ftYAL3RI)Kg3>PN$qowXTy8bO<#ZRmz3LMLYnd*1d24%?|Ty(so1O?Ql=IMYIqV0{Yp zT8pi{D76o~TG_+~k7lXr<&Q|XhZe3#92j+|)7|(iQaDxg^y!!ViIY_igGD7C*L-Ku zFoQZTP-&s!ID|n1GLB^9$c>o}&5;giNbm~omW$wB0w%)%A=j|8bicahasPo%8sKpM z1zY1ObU){(8b-8{I8LcWt2Z-d2zg}?X;|k2Rjs5!ed{X8bZ%>`(%AR6P9$CqRqz+T zHDr(AEuz9A!IQc`pr>f!oaLz4ORFHJke(kMJ?MPX9|Yd&G3O7sL$~9-KGMeQJoLEa zYU++*C>H9_j%EgO&NEc~y26j^hIfZt3_?2IT$*-SoZHRwSY-_2QLied5+LI}qp#I; z%k)Sndv$#uBFjL#R$)6t0@XJ#k|s;}R_*-;w_@$g)6*q}0$>ij2(=sC-RkO&dh(0_ zC8}y`Qvrnq$UDG`XZ(J$fulkSB4wa_rqp9iztO@8vNj>rPCwl1M)LW`+uLz`kVo^s zSQzj9dlp8*A*P-GgohDKxWL81U5F*>^Me;HDdOTO5XuB(nTEc8VwFR?M;c_EK^2U= zf&y?`CqOc+A-RPIz`L-+csz)&biTZvt!soK2I9+bA!ZiF>k13~5||pHo$m@zd0>Gw z1F&I!VZmnOHqd>@oQ8Z5(9VjOJ1p>eDZ|16akYq21nc2?IkF+3{LrxQ@Jct-{i<18 ze;I6)dIkCiW53{Ga+~xR0r@Us)UXX}UAZ93sTDXg@FAcOzihilrO2TGI|Wh*!qbLq zJPeXvB~wzjVaY)@G!VI?o*xL}dkzj!faLZ6J66VY=n^%Ve{PWWKie7ct<$|1PXW)Q z0-As8u`(`dZZ#CajijlU@8!IEzsH2>_WH$My4recIIw53Bz1H-OBZi{!(S#Z_Y>SI z*&=Lpq|Orc4Cg#H=J*c@s0b9~okCBPT&@g%qa|8&&09uPAs|Wg7T@zW?bH{{)}Q&? zwN_<^^K(Eag3*DvMnLC?`xo%SmD4E{v&K{fZRhJPHtG!UrT%QXm;{LD1!>>kDYV0} zd%#XWTo@a2>xpCvrkW-rK0(u~{+VKz$A*!Psfqur-NG7~ov75qtOe>vO+jWKI@d6+;s6h*| zu0W$6r~knIf3-87*IgM$ZnJ+7dTwE%q0NrfZa}$yE-(;6+EySG;4wz2wFrD+c-S2a zcB>S4R<=R$iejP^BbmD3Pe9Jr1HeVR!Q8c!yr!*!;ihYs5l<$VeICceuh+=egbuI8qmw(q1w5t$UV($>|c)Cu7Ij zATZGB9+<$x-Hm8ViTg!+Mj$)hhle`@&>w&C7?+=$cTi9oz`1a@v+^uiPAewf{r>LA z5uh#zFg}B-z#t`YNop_KG;HECMn8$4$A4La_AQx&(x;67?X z_92uk$|+1!pWulFeM1e66hSz7cEyu`Z&ZxcA;cA-e!O7;togUu0tL)T!%0gNDpd{V zI8B~^p`^hsW~F{rjpJdkZK%II2)5s@8**xsZg{p-4MwuAiC9`Rn4F+@sU~V3Rfd{d zGbT6E!#?5rr2TW-CS`NML}~V2ZQqeO65Jl!vd@j*$PvO!$M{ujkXpt9(dkW_l&QG#J zh~)zCP7$^o0Ik{Q65y0}m()FNfd#p4Px*W~mLC z+Tjd`9C((2fx#krgi?Zd;fKUa9p~Cz4CxdYyxi1$3jV z{{aU$#E9UJm%+ac7*7wleEsx!_Q0Zs1sSdEkgjc4R7;?swdvDBprUO}Rw!O2UbwUv!zzo8tf*xa4)Vf^s?$8zs9Waf3i-6xM zKma$y@WBg>Mw59EwC}tBAoz~qXDq^OgOcEiOD$lH!{SJ&;f-Tv_2*rts9!bfakxOa zSoET-G)3;r>A>oGta7SAoy}-fx59h)26-)|4};fIsn^PUHM&Z5L&6+b%))KyjpeA_ zkE70y$>jA$$T11_M@$Pet;Kvg?f&>mf7EfNHy|Lgu6G89&K=n@y46r7NzsR3l$}2- z-&W`5zP@TbUoTvZMQEFzXl-jq?L)im)VzT8;xSJ1_4qDTa_8A5wv1~THzdyz7&V#M z$fy@K=PN4Ux=ip#$HYATurLdX6v?$C5atgs86wOL>cyTve?Bhr4nliVaDDmVeOSA9 z-yCz(iWPcsfn-KeyWopj;)&7yM`o}86~m2z><`|39NgSblas?w;{pqK-n@+n`Otwy z{fGo&;KCL5Jp&DnNT$*Fdshf)V1UiP+B4PwizfOvv8{o^-P z&~TT15d8eR`149gM8s}*?_++wH!{T|NDKpPU4_LXa8o8Is_bt}6^oT7+}cN4EO4}= zX#+4jxGNwG7!*mru5!?S$m{sn)3X5ZF+^4lXefT)^$C3@c_cpxW^S1T1#rHixLsH1 zUPlZkY7~Z+z)pC(RP3rdQNQNx#;+u|8_cCdr#WO6zXAaq@|A-i!Zvmuc`yG1-=k`S zVp2D}B>v6!m~zxWvd~7r;PktTrBt!`nSaV{qkF_0Cbouw_OiuF@lsDzR!=Svb0sKG zOh#*cEW=9Evn|5(A*!5w9JtIHXk?KJ7RzT15P znH?H7*xLKw3T#^DTDNM#`uW()GAOteF`BT#EMzMv2RIEhk2{Bn>t)b$aVk+_;fKht zJrrB&ST&tDiJ_IBD*wb9$W^EX3QYw(*@WHUy@IenoA8B+f$wf)A2n|IT_If59dl?u zEEBN%a}~@YK-)@ZhCaP^bUkp^h4l!e*(2&y;y z28u&sZj`n*fi~4|@+6BSO5uEu>g>QV*91T3phNmMc4{M094nFE#hr2ox77=0du^Z% z*3a`d2>L#Mzj4=O)#?tE`kgp^1(|RAOD&XsZznbWmB!zj7B27s^pCGTuk?o00V|nG znI?4x`9M%EFsKp0D~&V(;vU*M&-sf+YMJIf7q1))7f)*!_h)bZBXtNy*iN|7?B*G0 zpRku=D|X-4Ui=U|bdajwz^Tc^awGNC9a<6`3UH~?f4U~9(zbf3vsrDX6zik=%isVD zh0b^01X|m%@q;DorCOnU%XcZ8*9oZSDI?k+&}ckw+j^*EGg#rMU~xTa(PmpW=;>11 zI29wuH>t=Q!#WtZIa+g<73Pp497#dqz&ytrDP4{{hO)X%%wIRtgT&*WeNHD8#^^ft zD{pKm^sbq{VD=3?t)NS&kIAB7e!*xKE~onmUOKS8!ic^=nhtt4>BFB6G3?v#(Ii+>?(hlZYca6R?ag&@-E64=lZBFN&i%mzbT2YOLJ zg6*CuSef7;L2@JT0^$G@1xej8Rq8=&&~ zc#b$0Et#dqIbu(@ZYSQ30j|`5mhIdkWoF}Y! zTB<;#%;k9^j690<4sE99<}7cXZ_ExR)wL&dNaZ52iig4XiBJEn#NSbTr8IRb7&?(M zPl?4_{_HRWgdicF7o4m@*0+<`qa?xGgW?ELC>K;gumhhBaq;It=*dJ*h?Yr2|AYAl zCH5m0^MlA65?FJ=#+nWhqA)FoK6^G8c8GMKP(!(a_D*;}w_v2)hH2+#*EON1f7P}+ zPNtw}WzfNqkdmTQBy5yHjIur8R$K(%C99xdBnl^m_fQ$wq1~-ivTa~FgF6g{fCRr^ zhiIq=sc7Y;-pazlXCNvZ04XP^g3vm0A!&$IW=wAWW-2foBGzGe?Ga2@;b%I{GqI0}Y=Q z%2gm-ykO&|tj=VnD^|)FnviD8rC#3ATDokR@?L~hB{9nR1$}!ST{VA`d~9;?GyhEC zYHcG0RzA_h^&|`Lsxway!>r5ixQT6!l4A2xS(-k^^W%f8L z#^oZnO4PD`c;^Cj=uj5c#j&H+;a_D*HI(?fOI@s_$*tyKFj=Sm%FBpN`68?L^4lQ8 zRG&+xNjKj#2*&vG5_XBCP;i}8Nm@RBl4}Yt*#Apxk>>=T{|C0n&P(jkIRlV>hF&lA z-aE+SZwMI-K!xub=Ri;rkf=y2GXP2PZ_W<};FBt=t1m*$6>?vr3g&{{WA87h(*}fu zh|Plq!f!y8=(K``IIjtN^wFI6&%cNK>LDPkzsaDgP=rS zYaZ%fS{7W9S{4Svg%Os5*P@=^l3$y2g8n2s$&_76YEq*oCMjttX{rIRRY+JtQuGTK zw0zTUb{5o8#@8*L8ocmNUKSZ6dFcMM5PHApq*N_Q`@}(aEE5-?Jv<>2FjCz3IBS?p z6?3>gw;yL@wqUq}C$C_ZUlJmA8Nzbs(b(Y%v6+Al$2Nu^%kXYVvk|BALmAHaHNP-%el?dhHUvEb}6_bS5H# z>EKde;8V%joevBR%lIegSuG0r@{jhvthl>^A`kqLmECo0t0J()RKPI^FXY>rL$fIr zJm4}%X-4oJ5{{=5^ZI$kZeJ0);}hjc>cqx{}89*&oKOjRNvN{ z?*W7Qf!|G579w$xKVuIM$L#?QWu)swBn}n{zECN_<%Cxyk+h`UQt`nUok!{NDs19{ zn}HqU@9ADXF&bd28}yCW5Tz?;6qA0}=r~ynqwQwMJ4vxFEgmLFjm-~)_yQ;{P8OeO zdYWsDHd?5Nx%BCtu(e#HFt&V^?^ex(=to<>^lAO+9E6$+QmHOCsn-pV?21m^o&C&DdpqoXI-$erm5=NRzLbz_b#L^u}B7( zuxY@i;WSu6!-oY_Nr_nF>ro?|Hci&$5MiHATy;xkoK^M9KemreOk&=x=DD`6uAIjB zxxEsLW@97={++0Tm@HkB^NPRM4)aZ#;S7<0EX5r)7UD4hQ%&joL%F%d^^#gi!v_w= zt~PR6S{@W`<*Vv1(gq&zU~<7&B8U626tAR>$1MIFgQTsz`0Wr`tNxMND-zyHJCq)_ zF~n(wX2f=03ZL<0n*_!wX-*Xsnvw=G1U>U_fUkxhP+-e`;o=vsU9=uw=EZ6gwvm0( zaH5*yq(6J}ja1o(baYH_jEBY($}Td!>z>l3;XeU%P9;in#PG85xr9)_j_l749iThE zrj4Ind2>ITy)!wXPOm1js-)8Knx!|NPqjE}H#H{oQm*&2pfL}tY5jORC8tlBKNnBM zZ$72JOc-K4Mptei<9t9Oey80w5j%A5C=zeDMyIn&JRnymvqfBmn>~NbyDIl(NT>@D z!-XRjA$5!kgMjjPxzvTF@3@99;^)(v=GG_+l*!Fo`fjsky}M&Q9-lk#fYXXEfPI>l z)BMLBtoY$qowel?fu>vO0x7SZk{fURMV(=La7c#`Qj(jl0uDfc+xpPPfi( zXy_9O(xzW!B!cT@qH={6*fVT zID9{6=bX@pEnj{rlMIi>{#~kD8b#<6!<_s|`X$lx%kIix?EFZkA^SH6Y5Ovo`n1en z@9m*3MHvqhW^O5cjn>p2Iy~%ag~U2S;K)7evhL zmiaU2iMV>$y(qb|9>Oow>|n5v+a3_-6?kaKmwU~@^SW!)+|a=|oA-ops7>+B`oXY@6v6z#zyI$u575b-s;&!s&6`#oL_vF8P5pvX8Z2M4XSJQT~h* z##Slj=u6ByO~+Zt;LK3i`Bm;Z>FRs`D%PW9NI;0Dv5&cdW3Od)o|B8xQ3$J;G>siY zL^2~@nV_KJI2oGyC49%(Kv!c|R5>i-M4>D;`@3HWPb5;kQfX(4BK#?7yDrS7=JUwL;$f{W=-`T3^dy!geJ zGW`W*Vrd5KlI&b11o%X|V`@FqkT2;cW%8!8N@ahgFR&Dy-ri{Wru|Gjj$4EF8QFcgVyz>0dq?7S zJrbFBW^Icf#H0^9UNtc;as27jdIAp7Se$-h>?&RqI4mcO$5@m@V`f?X#AJ2Y)jV5! z_jaZMI}e6Z>w2q0R{E!Rq*tn+3>Ang@Wj71ym67$&HBE+i~}w}wN@%D19|6UFjTm9 zx>)_$SFRNUr96ncAa5oz9xa7WV@dc9g4c?0%UNw=q#9=BX-+R@YMh}CRN%iBUC%&6 ziC1#KzNF9*H54lOftoPV->6bWh?F;mtTf>Zw?40j@H>`h=H@UImwPKCXRv#|;;+6Qxf>ux`>D z7TP!vRVP_&{tWA*P^!>sxY}`XA8$Yyt2@j@S(}ojpZ>19#OXpw+QH7+v9s)Tx_YvY z&8|7oY0b+;u6L1^cmNqf6US>-+*wL<3$9wpGL;1dMWqV60#V1=@>*;%8Xuzik+ck6km_y4odFDo#L##SUR@;`aF9&H)RBljj7B9 zxZUpvNsd)1lnf}}#*xwTq|^52%IB&j$E#I);ZIS&ARK8^6Gy(qT-3I>%`P_RtIN7v z@|;G7ZEar~$Brr5m-lqw1u6wi8SE2e<<>Xx-zT0spE~fRI@P(G?24rmdB;f_{9)0I zpYm6h^}O>P9ItPZxQ>|r>toxAyyeb~J@es$b ziMfQ-b^L=RKTf>+7p)1-f|}`H*;!dA+R-4~!6U7^=+;9yEgBRr_BZ*z=UZG-5`Cxj zDdnkCD$signWqvt7DiJ)m!$u6fjm%2UcSvcZB<7M7)sR96B-fG4o(dijH@6_bbSv$ zg4*}h8BR#ki09K;21P44^dKM>@^*SlEj%(uax>_i+X}=I?o<(NR*qco&-!0cv1~S@#1GZh(!vt4c(aUWdtdBY|=sWMN0 zcQUxvyk1mG=YP3&gW|WBWTgZ#w+dAm(@*hJIY@87L6lHUa2jB3xVmOQ859~cf;D>&}0BCnt-Ub}Rwg_|w-nLV1O-l9*+&tEaPL zWF4e+^_>~2IZ9&sW>e>s6^C3dD^G_xCPVs$_26%k7A8T?HxUUkSwel=qv=iEyHbwC z)tNHjhGscQX9v&Dt;g9OjEXCkPE*>=PbbY3VpK(ADMwYtFw_gl3M=#FpX_+}s_x`z zgQo0z>B!-l-1f-b|1>$T-&hpV*7MJd;R@bG2y5#E0w8M0HX8(|Kr9b!j6y}p3~X9p zAVm`GC&bjeLegTCX&`I)-`3SajAsBVVz*&p#|ERP5(OS4^49UMZ-9Mt4xEahA5r;o z8y`CGppc9jGJqj!2O=ajAlNk>@=SWUTDPGB!pz>W(M$zaUg1Wqe;e_W6I z{v==q0j$vp2@6*HKz$(G>%wz2@aR%N>M11ofK&HI$(TKgi-Z8Byz3+H>J9(~MdD#V z;}=hD+_khU0k<`B7eZPYN=XAt>Jor+(Dzh+{iyHbM|ldo-#=S#CsaAl$N|(>v9Se& z!9q>CM?+hqS(>;(Te_GdHd_j}QN9vH5Isju9vpecx zdIA=TS*hO8KrYVe2;$_2cZ0-|Gv}}?Hz6c+rdvnW;R}_XX$xgAxiZGkIr`owHwIqu zn4tND{uSIyd^)jfGBM$hs3EE6EMa4BHyua5K2Z8yRIRoEAb8%UXIw&@i}L+Afcn zT=Vp-x{_NIQt^MW)ix#2{{J7fxY_wtWRN(3aK{>#xl3QCATS=X;Zmls5e^B(X<$%P z&3@Oh0>}4LAf;nbcsFP#{wm2uv}XXTGtlygTSXCCh}?Uf`+v%#Cc??P=lMxfP-3BcBW0g zgOE6*riMY5qW9E5I+Oqd@Kd83S0EomU0@)PkvniT&OokI#t>JK2G3SnbxovkF2TJ< zUP$b^o4`H#n(3eK8k)$k%ioCZi_W~}Z3@gK@@mcBYc+Uz;Wal0UEL>N%WvY*@~0hT zqqGF)trtW6#Y#=9pL{X(rz(KFg^_TYety=fL0Wegmr==fBFD36$Fsydn_+s5)s=SR zcmKuN7lhm?`tcSW88yx!S5;oUO}%%4?8t~=vWVkO^8Wo}5E36S%Vw;V*54>VuK_+i%Hj zHCY5OCQyg`C+c`%D3keh0vOatAPLhwFbJ0vWr`%d`nwhpM$o*Q0q?kkcaOlnJ3BYm zXUKBqOyAaAN5O+sFa|-58&yx}Bupp36)l015XbC4@aJlL>41kp?&Z~oUhuNOg1}V^ zcq_n=^gXrXHzeKm@|_l8IH7knDt{Z^aAlBj&H_v|l58On3?TacU6$rx7#Q*?go4I` zxxjgMarD}OFjgW;N~<#&D5L--@sIyey?$L;z36%F?K`jdm#8JV&rzM_zbLNt-rk`G z2A|-w$+^C5vd^F)^|atrG`Jf4d!KOfu$naF7MHg=O>L(}I-`w4jlyS{g!q+N z4oc0E>*C$Jraydc&zp3!`98YSlsZ~}P0Y}pJM1jKimH0-X$AbY#JYgeyQ-KEVWP{Q zaC>+uncRhwe^NV3l<{@BQH=4P_x`HTQGVfcCe}%DBNVXEe1jm>0L$gabVZ)JBP2A3qMJj>7Dz&zOglPL+++)Orc3P^At`2nshvR&_X( ztk>Xg75IP%bkFs{sUX2yb*cN3aFd3F5~pHv_;tYw*KjY#bn0``!u-5-WTt8H{#$kU z8C;x(NX}oDv$32r?&76i)(zjRUc!{w{esB`1&EWgNQSh|G_8AnhByS( z1|}@XU2oj^1!JuyO%U*sjl1wil$KhZQB8x~0sd5$_9=+ah7lTt$uA=9Rof@1g<)#Mbuc&fk>O&-xa0>~xODW&ncV>!i z;OXq*=c;|U{wG81gQRl0-1%JTVIP(Er@oXdSs9-J&ub9~k;Y`NJ{V)x6mGZ(nE7<=`#naV#$y9t&^GNzZ zhT@*u;rTb#DZFn(!cLqFIp=|Y%aB2_|1m_Q>ELn7vVEk%o@e!qa+{S=f%~p3fa&9+ za|Tx6iS&@CNdz3A@VVRYxXE0sy4<(OYUh8rm6g@o4{6(dEsYi-V!#}7?ycBpT^{Zy=81Aru|90qX&7 zZi$(hnU61}U!Hj+x!rE|foR~0iz`WuIS2@bTDTlm@I*+yYP$QeE zF#DK)q58J{$$gp5P-<%G%Y+R9z&&n3GqLWP3u}}5H;5)VC2ajkYy`!i0(ITEd@>f! zSEy4*4*|+;Pt_V7Z<}$puC0!g+zro(d)0Q2>mvvLKm~;0j#yM&@9Z^ajl_{vvWrWb zOV-LVDcfHnYzsZt>jAQSB0!GCi=T+_XAiIE+Kmp3Q#n@0t#uNb^HNQ6F5_LtGC0t> zPMRv;Htbhq@-;?MOAoqR<<5zld-NUO zktF06It5l*qwzd8xkJA5FXatcJ-aar2$h#Y_X#S@RVE4h+dkqOvOY8Y{s~T4&r#^4}8xwEaobkW4K~FVae|UH4CR=-NZ!h=w$cMN5Z^9sT z2hv7UQ&UM(oZ&aP+|@b;x%%p}jcdT;8&z0Sg1Q8EP}$1GrIdS&;Ic?1=;@$s!6cdt zIN7_v@}j^e2vCDPL$mgHl{{v^y%hGQ@{un3%f(c}{Waj1&sHto@`I$6% zt^mzkQ?o1bL zNt~CLIyLKgEAJ~T1@Y!kTrO-EbGMVs?HE#yM$G235tZ_q+?&;zMg6%C#qYd)a4o$Y zkNvb(NThSx>T(i2(|e=u&GrQkYyFJ;$X#9&HAR@xZQc}g+^c;@32{R+Q5@5%#m*#j zOg?AnoWztaU3y$#JNX)ThBDn}n96J0vtbUS>(Q(1uxUaE>Lx6y=E95!YJkipWN-)T z??rF~r$74b{k`#zAGGYML*fof-U5K@go&RwwbO_KUn1$Ad{S+b+UIii*A{FHgkE8D&H={_Dup_~eXRcYt+#jQ;nlt!&Qg$# z6hZX{*t97rDILV8Zo{#HbmfM1?tJ2Dk?_s|v3YdUr7hf(l1*7Eams3H^B|f5h7C@J zcGx|=;dK%$g;@(K&*K~0qn;#(81nII*}@4EACO6=U+iy;@@fxeIAqZBlmKnw)r zz=&+Z@4`86H!J`r=HRM{WDl^z&ru`;`VXl3E0X)5Toi@0AdLnp%^d>?PVk+IDE9fK^Q-OS5{UQqNDjXAENNjgAccVw?OOl z<7=hwQT!1+M}O75K+Q3#I?fSJ10XZA9x<^DNIng3v%SY;zDN*& zs;CCHzxcprJm~~?r-$Liw~!?e7y_g!7?z5z{`dLrV)T-h~Ma=GAC~! z?4f3cl=G*J;2F29i#$EYJ1_rm3JFEQKtfO-o8$Hlo?Ik6b{H21CO@ppayIS$SK@kU zzhf`tu|~00z2a*EC}IfYBawD(A3-w-MJq_M-+T4QK0iPIrq|t>&LyZ>MH$9OM~QI9 z+4k@#8-X*uQ2q8CWX@pupoi&b3GP7zrHMKmSg8lW0)V6lz0!Xkp#LE0C~5&Re+fGR z$Q`^sdIkgr)-GehM&#g^uiiJgRM~TQn5n&U@aSMV zTO@aFD45_)QsYlj@12a7h6ebI4~2eL&7T=%|1$D+zd!C}%-h|&g?vleS$W(QxzDgg zzP5zON<}`}e3^Qts3G7+1k3W3XrG2QikDAcl7DNPzE3%{UTpHKv-BFFI-$_SvFOaZ zn|p11rtP_@FKbpJqWXR&yBQ@KiP)e25@&An?JAc4)!p5By1UryOKOh-%7w08=9>xC zHvT?cDe;~4sw3;EMDs$yQ};E=_NN*vZgp(=wn2U0gX2dhwa59w>T0|&S*(oY-{sZ{ zX zvc=7TkEtGVs`TR6UU%I(;u22Tqkg39M{Hn0E9Xo!EyqLrQ%y-d(&aT6xKhrO25{bq zmY={p8MAE8zHsM(=JWT4;jhIfVfYe zoSAz0IUk+MuB}{mY}02Fkmp%;A-=IC#6swj&#$nc(F91SAp}uvwD{{CJS>MaI6!j> z7)zMj&d8}BTfH}3dir`>oZ#il@o6ISz7q2-rEC8WTW=Yb<<`A>gCZf)jdZ8dCEeXE z-4cS7Gzh4qv?x;2jWm*?G)RXCk|Ib5f|P`NT+g%r@A2+qZ@#UySln>m^O|#xG0yXM zF1_dPIyRM0ARM+-!OxO)-e+Vu=VTu#6W7Fc)3WsuRs6g%r)S{r%&#MXZgVi$Uxkk1 ze1p-jF8SyD9{by}{qCDdIUG3C51B%_Yc)-XC(gQvF3vwQd|fndVPYHhZN}6yo6tzgVa>$I)tI!zKK8 zC5tjvZQ{P>%ALqozlp>@vM4#|17+MI)|9J(jwmU3N0ve5=dOge7N;O+bB|o99mB-= zMf8zvlPTuC>qEp;STfapxhD*wX{T+@GDDc(XktENg{iM}RQOUS^sRqdE9=dzStZR- zZS2pMzHH#9_EP1L(ImU$cmqW+{LR}gdSy&yN#^%@fx1R3(#Ny(KT}1V*NA<{Ht$%lTP$lRMP zoXgfpm5@^Xn!jP8tCEVQZ)-wvM{V0v4u$PQeA>5^H5?pnpMij8z+MwGNT4161-Gc? z>r*aaf1CD@Hc}i?AHjQJymu&@^nN$bU_I1*>g-$@6V%jF5=@jKkUmTBhLALx@AT+u zX-e##-Z(2W!Gv+dW_`ph!MrR@S%IEj}zo%Z#L@b0Yc>AMOlR0kg-F+ml zM3A(ISJ#&?S{2lZ8#8^YDRM>W))cLqR#~jtSS(9so(=K9LyQ`S=_ofAHs%}g6&Om? zDE@h`<;!cs9I7Rw>S`_tNe7eT>N>7P%!C_hS2)Y~5)qbN`IeTzS3O=C!F*RL*)$`@ z_io7`791IC8EWyeB|K}1fVYqQWzd_J^9Mt5RbGnOec0nJtfgiy^I6v{Y|~63C{ICa zBW-wQ&!1(Vc8XDYS;oF-IbOB)poHsFLCvb`2-EISvX!0z`)Bzhn#l2DnF_ty z!5>b8rku}f{jE<)!G)9EKJFD!ZN@N%_PAx{ja(V8JSvQ z9jQ$6m>|bVt~h~uqn&gSPyQt-wVg_@j^z^_mmZqL;uaO{y{D+I-vVtO`Hu_CFsfeD z?21r{D;Rqf^_{a=psDd&?}V9!l4J!{avvLA%ogKQNMngnJ0&z?Z=AC^d2My-!Nu_*>9kR*^_cNB-oR#a`EuTusAxL!w=3ANK#wl{ z`&T^QQ^xCpJs4j#s@$u+82w#%ohnb?*w_drze(f~JbcXm_u;p9qLlcF<3i0SB6LE8 z)X6vf*cJkFzxC=GIVio{k|}1QpZd#eCR0Xcr~qGum&o(dyP=yb_TZAwH-)Bdw7ANF z_L(Gmv{fLZtT}tXHp`3-XFNTVvHuwN$ivP^7Qwgs$MyR)WU@Ylym`}-$T73m38+nFdHa~`NhXyuLAeB8RcoN3&J z++~7@W%)n;yzhxkHXrIzlt?M(_sZHDz-jZKMBiro8t+RQycw(MCWSv*t17zklw`>s%=!k}4rcuO43`o*A`xIj$CfW} z^Qjt&@BF9L4qW1N-lFsiVxacV zOz}|SU<|A5zEqgrOY@j7$G?Gd=Pi5HXkqUp7jcSar>SWVUh#}8Y#89!C*V9mR{G~ODDV1m#aGy zz7$G5U3?!Brik6EexE;j9ltwqLW|{+ekZCnDlBd(e}T+PfJA;Co#AZoE4Pxg`TK+S z`$BLDw-7F(GbpPD&4s5JXfL23-7MMLSYL-D9D0FHO}v*h+T2CB-4@%psk6KR!BZxc zk*8CxO`RO4`ugg@!XW0;=D_0Eu^p$xlQ z6`hhX>2f{w`&8yJZ+~rEe&e+)rw?=WxvZ_`#udo*Vc71+@N2VxpM}&CalY2ja*vFR z^!~%6$%&NWFdzaQWz&~CLwo@FV!Cq&H)Wt3;xs@6pw)M)_Bs-5L}u5YmmP=OP>Fc*YA?9m6wBAd0;wq za()48z*2GXSJ|ZGv%zq_56=sXY&d*E_Q^k3@njx%{8Qc}B#d&^|0Ppv{qf785Gq|n;iPR@j?l33$H?KC{_{VLV} z>)z8U#k-PPI4m04bPqCm*XTKn4GJ^a{lts!Ms9dFR(g7it+oZW?;2I+HXxpI#I_8R zu!|qZpyv9eCSRifksI2HueaHEGtmmtU%}zGngL` z%x!&ry%0qToI7;P7#xZA%rz-p8^t4(vh@~eW0#aJ&SF_*sTjgsOY8N%4}Trx z#n7;Rmb#I%_(oa7gt1mX!NL}&KUy$E_$`6+@suUeV*cGMPM0*PE&egJWs(a_Q#=-e z+7K?$UE2~aedlhW)~AA!Qg`ZTWbicumqMA);?Xsn@acWY=8-7IB4N1(Y;)<+WeXpnSqW*VHYZDW1CW7%*8z7ONuj%!7lOn z(eUSWA7X zv(hJ!Ln8oXXj-6QVDNh^OT$!jrp%WNboMX`7y-<1+<&+T(C$THyRfK|Ah@l(;SU&_7y@&4M z^_-{hxBMqCsimdmgBkp;m{caeC#BswOC-teJ*3>e2F5TF?g&Dcz7-GPo0J(g+*Kij zzYeLSxf}mM*$t$KC)WoL-F$t8kPpB~U;?t4piNM|RDT51WF-0;+}~i-U4^llW-yk$4D-=jqJ*P=87MzY5V#V0bY44r6+iShI(Y}PL= zDue{*cdMg!14*%_apG6t-S1VHy8X{pD*z73Tblt;ZVbPl*jg^QSpoSfJYq`cI>Gdxi43&PmR zZM+vusB&OZ2Gk@867z0#4g}Cqm^A@S5d)l42%7mcD8|Ma8bJtN1Kw@~HG|~70mz_r zsU8suAy@+t%#A?f=!M90U>aLDm?oTk1z`a}!qHg}azY>xTCk}jHYkVB86?J2nZVwF zC4g*v(Es)V!+)b#=>ohk62pu@Eg--cLfOFX_3YD%6#(~PX(L2InAAL*| z@DgAfQGmqYFW?A7rg31;f~Ir5(;BQ-rSj=okW?YbyeN=q3)3{1MBZ(?`n!#I1c0O| zfr3~+fd-hdyuAFuY~%Br*|Ni_VE`E*4W5Diek*VuBIC;iV4RB|^fTIlgbAK*QZC~U zhy#5}NOQf;gA0z)Par^|5PrDezBmMetor&?kTprY`)tL-1F_v5@EE~E6T^V$ufPi9 zS`!S(Ur3B5j63O62vbUG$`)LBOC*2! z--B(d{KteT5}$yML)i_UGR2@Earm@>K#jM7wb1$EX`_azjwpLsIpsCp8YoSElN z=fQ+H27`Hu(%D;H^m9|>LyXqDbFr`PcGxsA(MRJrQF7tyR{NcVpC{fol=io{o0k%y zrS>oFMtqE;mP=t3lwc!kj8mjOrhm^F88NTTWVdhDI|}!_mFa&GyeT2~dozpJg%gXP zynoT6S5!|IU$EFQzD1z;mYr~|B<4QDAYH$ttiHkEUh=bN=*Z+Ap%8$4>AEy{R7E#3 zy-*M=420jp(E56;!tbKH5W*aLrzHv=Jd8MVpkRVRAl#z5ut^^=bpW0dk-fh!t8M?~TBR4-eS#zpK4}DE6qUmjC{efr@Pv{w(9T5r%87WJ)b1@-xs6q-QtU>b5>S%36$%Z-o)`c?q=~Xo4LEj z_h34sL+Qg<`@LStU}dpH4TX0k?|H9hxuaNArgNC%BvF!?+#e$Mli8SL*yA28@7t?X zknZN@ph4}Nk6z4si6Tl!pKhVrGvWBt%tY&|bjcIqi= z6kZGV>ryKQb1}n+ps$qUIU}L(dYZ_ug_wcet_LV??QyKvj$KrLk}bq$HDItW7|9i9 zuM`*l3vc&F=?~!4j##`)=fYgk<@n=>P@SdaUwymWUpE|}69Y|s1lB=*$5NB~QWz>W z;<#l}0sAfg{@5bizrs)hMV|NJ_V)H()3&hC1gAc-2f=KKTU-n7Zz_Z^$U~L$1YU7p zmJ%#SYirh%a~e|8UT9|_SRUk}0*qc;81Fp!4Y-{wv(U>UgaHzFTlfVe-ZEJ2WOIG? z!uxCB<_U2Fnwpx+d+>=i`n`yH@uCQL3Qsx(DRE$OpPHWDJ_rQCfyO zzAn9;w2w`Alo!q6LYd4OyHi=Lq-&OH9DAXHGhHkZJPF_Ha zHy{YJ_O?but;I{mm&xP{Sz8|o%VIROKIZ0etp`vDzLX}sGq?S*Vo)z3N{BBxk=-cK z_#3g>&taJjp(iLezN*?BnbtPGWKcm~DN*NIEm8YSjFz_ehFHRLkvCGPa_u+47@2MhO^3LS1AX6NLL0&`dyW<1FB2y`I#{#~7P zK3QW$^09@jS(U_o>`T7c_ybplCh`r?!V@+NDXr>DV#7Vwd3+W&x?!01v){ezxcuRX zQ-f)}DL1SSN4RCcKU{=_emGp%NpdS{Yr7C$oLl3CL7g;=$5FS6>mlDM%i7~!^O9yL*Y>3<;zPRI9%`>FR>U-L^@y)NkZbfW$q;u63;i{DD zKj=@ztqiKC$KSo6iEq4bBxYogL~;8?;}4X`UR|ykp24x}w!!Fg_lKgCodV?wtt86CHQ2RdSY zW|D)rY`R=?_-M`Js@E7KWf^6^)>lhmhbziWX$Y_UJ-@W;e#RI$G~P1tJ7Z^OHkHu5 zHtEnyG{4wKseHEn!BWp$gYs3;&Z=plTh|8Qz01o|m*9+Lhl3H661S^B9kbN71jPlU zU>=cXH$v7DeT>Zq+sCyCDjM__Ab)MrbH@0pDEk$P4rCk(oaw%?w{l42D~tqDfnuBn z3?YQfP}Q=<0oBk5=(N%e<29;h*G|swyWZxpLfPv$zoVn0gND&`8GeEwl+a5@H*7(* z_QZG%^*TBb1ZW|$HqvnZZ{G!I(N+%6{9r_WeQ5(WiRvCnr3_AKu&XdLKTj5NaCBVr z5P30Y>Fq55fjWrB2MVpGfXw0p6Q0-VooC`m4F-Y5tv!vMm%Hu-g@wEjt{^~(0}6KF z=j=mo08!^l4{WwUi3A9!g{_+F2nYZ{9=I-bWPye#2Pv!eEr2Np3SBz5QlmcDt4=9A z+8mF70)eP_lESz^?B)29x>A2Mr00x;ULDd>-oAZ(FbsI$@;a_7ZjvTbmRYzT=az4D z*4`{UQNs)y%{ACIrin;YyW3@l#n9IEq{^by%>B}_mgPomSghc=^fQhc)Jjb{`8yKai|xsoViy+nf`<7z zA#pw-i2{VA(?o&#t|=^eIC!j8qFs7fo>IdzsmXR4U5kK`5KB>EL*JdLki6kj>4J>-Q9@(^)ew93)l*;wC`5@o;6Uyjs#4 zZ?gKeRH!7f5dlyRRco0wC+H)0(}L$mx2I2^j>BTJ?RfFSX9RdcP*2&yeGzUmhafBj zu00a44EIbVfeBm>5TlIb1j6;ojetK;983vc8eGT#u>@C?)uR9e$`9%hGtU8LBq#y| zW{?;#3TM&`3rz`faKJv70mlq4h_aoXospB0362ChedWrU}s`Fpb3wLLg@Ux4a`A1o-ozZM3d;z#-n z_o<{nZvaF9Fud48KP2etYy*iZ@7opT;Mi*3*fox&iI0y*#S>y%g1igg`u)X4s3xJb z%$;<#8^k^be!F!YV ze*!+bH)m@a97S2+Q9i$p#x^l!dy^*e`@q9PPr4TYcm_A#hmplA#@^Sq;bN}FPBG9B z_u>j4k-{_A7vS}YaW%Fq7WZ&;j#a5;nlv_9{IM>r>b1QumUg>LM}UF-LBY6xd-v1K z*UZwUYQvv}iOlz;_YN8VZjD2GcT-Y>;P(%0&k&BjJ&BHjU3s>VG8tz+n>XvFl%2E* z77tTS%cVHOHI<;~@GjHskg{<@54Vhv^U$lTWL4A)HC1IK*(t~5+Vt=K5%`v9j&R~f zaA`gD|1BRux8eHizzC=*0LNK7U7F#vkVk%j^E zxEYSMylY0R>4q^@0BD1{JP7ScCh-NBKhfIcFrHh&nQ+9K@bKrnssK@!+3+;OH5y^et9+}ya~ z9kT(si<$Sh0@RfC8of;Y#jSjQX*2)+4FGSJkB^TV2iDyFh(pMg&27m(GWn@{n`ZY% zTkEcR4@2KfIs{)(B$?gu#i1SP9nty1nCH>MOvLqibN%N)@9JHZcN#z36LKOJzX-*m z&dm>=2F=|J8i_~ysnMJ~T4d_V#CA7f%aA$z6z@Uha&2CRURWCQJMqQda_5EzAuj zmZ6HrpF5)ChRvy>ZYtbV?aH>2V|978N;%RbXps5%(5dB*%e@;P0~4;4yIzE%(ulE| zci$}{48Q$NS@8VT$yRAk!R1_%I8BJCBienN@CQ5;``tJ_ZimU6c*VsMPjbG|o1J%K z-YRN*Pu4=&-WGIz&yR9Zp_<=XS@OA!22Rn(pzl@Rnol~;6PA?kP0n;K0fz@RR`|F_ zzmPBU$HPq?OlDu8;K8!zmdsjH0nr^Cq(z_>qL!davqWH_kZ(_2l2h)vn%N(0c+~BS zpSK+T<3LQ3)`t|kD|=>|`CbY^yrQ}hn~GEYksxNs>ws~UcboYOU$GL(GZwPa`rJ#> zi0!A*#T6P^v@pUJ*BB3&>ejMUA}u|6WyB;LnlNO1^WF6YqRs^rm|n@v{nHao?%Zt) zeEM2Yxr1di+tB33%wK!E@dR*Wb^C~mE%{?$X)H>-rN2F1+{bw;T2e`8;o?5|{Q*sJ z!okAzFbtXUu30;m0SjS^2Jh)d1V;g`v%{EvwhaatC~U;#nB(_(&jv;Jy%gRY8KnmI zyF47HcqjY~TTqhr2c1D$-ob_)r0@Z2di$~Uhq8-~2To3a``d_g*(l2thw@owQ(cC8 za2qCHUoM{E(oEAvRC)ct|F$fjc;U27tTF}rT6^Ws(>Av^h0Pw8B)WRHjH71b)U=tF z#hRY`HK6rBBB(bFccePbHLvVfKj=}FJ(6*vbcWh>k|p>|JVf<)BYa1G%xQl+Z7-#l zb!B=0MpfcRey?=(#*4h^^SYj(Y;LEGp2O>84fB5AE$d!8Xi%~2Id}OTm^vEaMCyU9 zTJiF`&$1DJXj4qLOEvSvPnorJ{BQP7=8ASQNjt2Y%(YD~X*!b(byH1ZzjLC{^;h@I zr3z?l{I;ztJww&M$^M~p&WOB_$k;ST_OqaxVqX~%Ssr)TmKk)+&&Py3PaE?R8N#nAGho(m4WYO$nU)63MKL{X()d5>DhM5y}1 z)jNu=-S-fabjJ~u%4&(LV%r{*YkaRqY@vsVBBmm(yuKK55 zOHV$JJ+qCPuXqrb*u_VeUWVLg5j zqs-IqR^-h#T!C9c6~2JRr{WS6qE3qZkt*#!(eo%%1J*J!)X`M10!zkb2#X)kZ4@8q z{gPAhc#N|DmjBK81LAyxRGIA)g4=mzy8j)!lOZ4I*3iL&KkSO-UE80m8we`~sqbqT z=OmrxMU0;@c?-taJiy^oRnEpYa{*l1Lg{6(E`KC z;6d__nK1$e6?4z&q6K2^lr`YUpHaE#;ud&V`Ygj-5aXBhu|7sf%HPCbhR9p7%vD9D zL2B`}boG{cs&QS4{=KD~)MmbS*ZtqqwT@G0L^jty@$<@3V)#-NU~@l~eVr>PE4-#z z9J7`zID*iuO-oO`O-E}61Vx)3r{USmqPU&(Xee2h(y5nUK2B%M{a3vb3sXdVU320nrm|{xetT#oX?ZUTa?Gmz zIs3h-Q>T}WB2y|yz`zYRC$xd+#gLL9wQw1$4dEO869ad}{Jw>#;(d>BRmz{Xe)tDH zj-j*fiId^_3s%``-s`+7gQF4JIq|*4_fnTt*6e1RiVZj3iJT|Sinrb8lkp^%d|Udk zabC^O@3d57SzUH&%s=dPq_h3F%>8`jE$kjuE-~tnivZQ**=$|1p6B3Vz16J#S!J@I zsNlgCL(+c*EqRnR)bgGl5*8{Zyuzm!e(IEXIRxE5A}Ab(#I!1W9M- z%e}>+-oRwO>0U~*hQb@DS~_xWs3C5Xa_yrLvn5gv?Epj~n2v~ybY8u_*iI-NZQr<6 zFLJQmf3fmCWempX=&RO@t-j19It^--! zGNYrGGzE9AWDZ)D6e!)ERhKo`m*CQtFX4eX;m+{^+XUz`St^nU@4v7~}6h z_g}Mn5c9L(aoyE!h2G#bi&y?^UFPj(PiJ%OCdh&<6w(L_{zqSRcT3L?qehDiBbVGN z1gl!-xuClFXGwzLER0<2S%U9>a;tUXzFez`d6K6b|2FfPGuiyV^vAkxw0D?a>}Ee} zEg(-&^v6tXzjNVW@Hbf238&!CJL@BkMZ>P_h!NYHOnzGxhliKX&mY}uW1VhG7BzTp zk)gRF@8|l2TrErKBPFP3w4zQ?y;ZsJ{7wV}-(&Kn#vb`K(0ojqJAHVpqIQhUho{mx zq~X)7p&ImF^BSs@(2<3oY*ci_yWZ0%rGvqiYLD8wq|J30TW86#^yiPogr^nY zwjI%2nIfljbHD#AXV>T&KAL|KecFy9$VFC&;%P=8TNcXwM zCVDe0l>M&@9M@%;tKip4EiwB%fJWAuas9)s)vn^&KdRTGq0 zxA5&Ky7b~k3dvu-&akmLvcUaSD#kw0Q9iD=-X)%B?sSA6<5KJKhL}-#`;ZYkB>dx4 z;0o5b50^RNP*k}ADRuW(b%EqCa}T|$QbtqO{WVq$O%A=^E5F~3mzG8`llaN6w{rSZ z`Dr*$2#~;6+OZOpFj04^v{B*~i@rvQRdTRO>Le>paJQjHXhxv{a{(<$6K6PQ%1ya9Xk(x-!10$L|(?UnnO#1J#Rwg zSH&l`Sj^;G9iHAV@TE=slyB8C4!yhD9VSve(68;p?Ns`m(dVt!)B5*9M0AQ!(n!{zvQvyL=@#GEnV{bdsh$juRqi7J!&WWh+R$d5f^905Sy?Fyw-naV z?cVZqAZogartn{*4R9Fc82y-Jfs9PVJpSzVAqWd_q(w(XiM-uIst{o3(+dfa z=8r2w`ywaw>g*@AD-m+@`_o}9MDo+%kCd@y`&`&GV_9-V3jF@j10+mS0(5lw444^Hy{ zZ7WA)#XMRI7b6QbOG`F!*Xedz&l4&Q3hO)!lb4$Cj{D8*m0?P;_gs7URwZfGXPJL< z+)2PqDo5(x1G0$*FZ!C#vAD-ve`pwMQO>^JYuG12N_HyRV+>ThfRxv5 zEx}*DCz7g6#{DRnHOK0g9YoY#fDQuk z6vLqUiv}-PB6Qa7Kz8N_Nr-SsO--%$lYlle$TsdYFNgcmdMQ~o%~MDQiTs23Zqwkn zzO|LM!x2U>VIb{1pqpAit(J0~`((34x zu^tyFw?;)4++2Ob)Fa@Kd-&itHeq1~C1C{awRdNqsLYOMEYCo=k zm;^jyOkX1&#e6={zbBcJA+THUju}5`;f7@*N!>iQ-?$LRQUrW#4ox?*I-YFV+-sd} ztdiFqw>BwQn+#aKw7>h%g*?0H0!1u=)@A>7@ZD5if@`c>5bB^d_Ge3clj7$kyXCJ(dz`TnDt_(Zy zLzBZEns(fOuOP^QLe!IqB_$e$p$LL#$2V~K5==5kc z|CR$$?N>n)@C77=pg^-Zfetf{Mxw=FH=af!}FNE-q=$Twb?KyWoEk&qw|n00_*P89Nn+1S{ec&iY`0&q7G6Wv51HlE}u zo#fKnoWFlP= zgZ$4G^XXYwih5jN#tML0lJW+hQ9S5SK%X84&676gu&+e**kA<}LrSm`^3K3K7UqQ) zFeUGNu#GTZ1O-VzQ3zz@Ya4&O5!(9UhwFGe4;PvZX%C@?sbg;b8RF)<0c87g;XOYL z?s4J6l89%Nh-@?u&^f~q#Jy{pP|IN8*nrRSQ_N33RQr~UQ|k*^B6Gzcjq7Iw43x#R zohou^MTAX0DCnQ?zEJdxRAVcvV>8zDjklM;mE$b1{2JcFcwS1~7`vSs`mpO+Ou0!+ zuFhDADU8=M*L5`U`8?Cj`XQP9YpTgiqIG|E3+Zca=c{`l(cGhD|i>x=-+?b0p z802}g!{aEA-S4v6kJZ@r;8}V^scA3&=*`<1EU_doi#ACwGT zMKZnyVa6B8RAM6Uk;bt$YbBV}5Xp zAqZ`Y;3ETA???j?BunrtZ3Iat0n=IF@eUSwKg3Z3lR6Tt{nYIiqewOZv;_yCQ;34NFHg5E z{|$muj)K<)O;l7A+9B9s2uS)#$G_hRp-3$6!IYlX+i|Bvrf5i)K!U9p7#L1r3qkaX zknsyo&3ehkuk*c5_v!bZB2-9|vJJExfZZS>A?aDVIu-_bgCESvqhe!ik!J`}oZvl! z_Pl4eFPsq9pd0Ep+<|N9CrSg46=t}!vT{Gc67bjWAy@)CL!g#5t(eM@bI*T*WkU3f zzPaFNtK%8CgthHdvg(I zH5p%yY=&S8#u$5!786tq)6TfCgj^57-h%>s!Kephx$)mLgM6;P*P(ZEiTyyT{?_<2 zkFA*hNJ8Se+T6K0uW45QKBq2z&ywoyH{83HZ5L|Nf2k)0pJvA8@R;6PAtt_CHL8~| zn`^Z8S?lGO4*9-U1GTSeTEqn?kDPAbXnX4+t*6*RPwlw>uxtqZ;3%eDSu*;UoK3

b+Fors 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 HU3UK)g=}gj literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/CML_core_tb.sch new file mode 100644 index 00000000..29e3c824 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/CML_core_tb_0.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/CML_core_tb_0.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/CML_core_tb_0.data new file mode 100644 index 00000000..4cb5b399 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/CML_core_tb_0.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.110742996065e-01 + 1.728000000000e-10 -1.869505717284e-01 + 1.828000000000e-10 -3.563037101706e-02 + 1.928000000000e-10 1.056708524540e-01 + 2.028000000000e-10 2.100393804445e-01 + 2.128000000000e-10 2.784249297688e-01 + 2.228000000000e-10 3.224310579067e-01 + 2.328000000000e-10 3.548600651170e-01 + 2.428000000000e-10 3.792482005271e-01 + 2.528000000000e-10 3.740820324036e-01 + 2.628000000000e-10 3.079440308227e-01 + 2.728000000000e-10 1.813826171807e-01 + 2.828000000000e-10 2.923027813912e-02 + 2.928000000000e-10 -1.118282325615e-01 + 3.028000000000e-10 -2.157337068367e-01 + 3.128000000000e-10 -2.829033176767e-01 + 3.228000000000e-10 -3.260714502323e-01 + 3.328000000000e-10 -3.577361248183e-01 + 3.428000000000e-10 -3.819104006606e-01 + 3.528000000000e-10 -3.764730474160e-01 + 3.628000000000e-10 -3.102968359246e-01 + 3.728000000000e-10 -1.832608913655e-01 + 3.828000000000e-10 -3.084931437320e-02 + 3.928000000000e-10 1.106163095990e-01 + 4.028000000000e-10 2.145714971977e-01 + 4.128000000000e-10 2.819937231053e-01 + 4.228000000000e-10 3.251740998910e-01 + 4.328000000000e-10 3.570946969464e-01 + 4.428000000000e-10 3.813004444382e-01 + 4.528000000000e-10 3.761230596147e-01 + 4.628000000000e-10 3.099646053412e-01 + 4.728000000000e-10 1.831473345022e-01 + 4.828000000000e-10 3.069401022130e-02 + 4.928000000000e-10 -1.106258411343e-01 + 5.028000000000e-10 -2.146793601179e-01 + 5.128000000000e-10 -2.820035552799e-01 + 5.228000000000e-10 -3.252909243829e-01 + 5.328000000000e-10 -3.570986338553e-01 + 5.428000000000e-10 -3.813904658256e-01 + 5.528000000000e-10 -3.760889514061e-01 + 5.628000000000e-10 -3.100114096943e-01 + 5.728000000000e-10 -1.830827247194e-01 + 5.828000000000e-10 -3.072480545922e-02 + 5.928000000000e-10 1.106906463094e-01 + 6.028000000000e-10 2.146493837568e-01 + 6.128000000000e-10 2.820610673881e-01 + 6.228000000000e-10 3.252525482967e-01 + 6.328000000000e-10 3.571504708749e-01 + 6.428000000000e-10 3.813516648295e-01 + 6.528000000000e-10 3.761390656738e-01 + 6.628000000000e-10 3.099742259389e-01 + 6.728000000000e-10 1.831331110808e-01 + 6.828000000000e-10 3.068765829312e-02 + 6.928000000000e-10 -1.106445812930e-01 + 7.028000000000e-10 -2.146859050297e-01 + 7.128000000000e-10 -2.820172231683e-01 + 7.228000000000e-10 -3.252905125649e-01 + 7.328000000000e-10 -3.571078709926e-01 + 7.428000000000e-10 -3.813893177320e-01 + 7.528000000000e-10 -3.760986555866e-01 + 7.628000000000e-10 -3.100117776476e-01 + 7.728000000000e-10 -1.830935153198e-01 + 7.828000000000e-10 -3.072484475908e-02 + 7.928000000000e-10 1.106810594907e-01 + 8.028000000000e-10 2.146507312123e-01 + 8.128000000000e-10 2.820530370402e-01 + 8.228000000000e-10 3.252547871433e-01 + 8.328000000000e-10 3.571432636036e-01 + 8.428000000000e-10 3.813547544577e-01 + 8.528000000000e-10 3.761324372121e-01 + 8.628000000000e-10 3.099775475493e-01 + 8.728000000000e-10 1.831274535707e-01 + 8.828000000000e-10 3.069175078476e-02 + 8.928000000000e-10 -1.106491559136e-01 + 9.028000000000e-10 -2.146821655528e-01 + 9.128000000000e-10 -2.820218639330e-01 + 9.228000000000e-10 -3.252864642203e-01 + 9.328000000000e-10 -3.571122611941e-01 + 9.428000000000e-10 -3.813854215351e-01 + 9.528000000000e-10 -3.761024723822e-01 + 9.628000000000e-10 -3.100075395903e-01 + 9.728000000000e-10 -1.830975404653e-01 + 9.828000000000e-10 -3.072097080048e-02 + 9.928000000000e-10 1.106770531472e-01 + 1.000000000000e-09 1.895325033433e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/conditions.yaml new file mode 100644 index 00000000..b67ea4fd --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_00 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/CML_core_tb.sch new file mode 100644 index 00000000..e145cc80 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/CML_core_tb_1.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/CML_core_tb_1.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/CML_core_tb_1.data new file mode 100644 index 00000000..b332ca2c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/CML_core_tb_1.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.162797108708e-01 + 1.728000000000e-10 -1.875883768906e-01 + 1.828000000000e-10 -3.217177564589e-02 + 1.928000000000e-10 1.118453904517e-01 + 2.028000000000e-10 2.178869753922e-01 + 2.128000000000e-10 2.869187499571e-01 + 2.228000000000e-10 3.311831063176e-01 + 2.328000000000e-10 3.637965093552e-01 + 2.428000000000e-10 3.884475585753e-01 + 2.528000000000e-10 3.831703446637e-01 + 2.628000000000e-10 3.149426000366e-01 + 2.728000000000e-10 1.840825734866e-01 + 2.828000000000e-10 2.786370536806e-02 + 2.928000000000e-10 -1.159899232258e-01 + 3.028000000000e-10 -2.217323928122e-01 + 3.128000000000e-10 -2.897841810826e-01 + 3.228000000000e-10 -3.334256487170e-01 + 3.328000000000e-10 -3.654508602495e-01 + 3.428000000000e-10 -3.900407544937e-01 + 3.528000000000e-10 -3.846189534315e-01 + 3.628000000000e-10 -3.164922452622e-01 + 3.728000000000e-10 -1.853182634851e-01 + 3.828000000000e-10 -2.898615964086e-02 + 3.928000000000e-10 1.151710782521e-01 + 4.028000000000e-10 2.209054309263e-01 + 4.128000000000e-10 2.891817322742e-01 + 4.228000000000e-10 3.328077516782e-01 + 4.328000000000e-10 3.650515838921e-01 + 4.428000000000e-10 3.896233583948e-01 + 4.528000000000e-10 3.844074302627e-01 + 4.628000000000e-10 3.162448842688e-01 + 4.728000000000e-10 1.852475068120e-01 + 4.828000000000e-10 2.884623360652e-02 + 4.928000000000e-10 -1.151788252337e-01 + 5.028000000000e-10 -2.210147130581e-01 + 5.128000000000e-10 -2.891872658193e-01 + 5.228000000000e-10 -3.329167168088e-01 + 5.328000000000e-10 -3.650471930963e-01 + 5.428000000000e-10 -3.897100874545e-01 + 5.528000000000e-10 -3.843762306477e-01 + 5.628000000000e-10 -3.163013912188e-01 + 5.728000000000e-10 -1.851950213487e-01 + 5.828000000000e-10 -2.889036873678e-02 + 5.928000000000e-10 1.152312899162e-01 + 6.028000000000e-10 2.209735588305e-01 + 6.128000000000e-10 2.892357416511e-01 + 6.228000000000e-10 3.328707955285e-01 + 6.328000000000e-10 3.650931065031e-01 + 6.428000000000e-10 3.896657987149e-01 + 6.528000000000e-10 3.844215105032e-01 + 6.628000000000e-10 3.162596917265e-01 + 6.728000000000e-10 1.852417351036e-01 + 6.828000000000e-10 2.884992827621e-02 + 6.928000000000e-10 -1.151876679011e-01 + 7.028000000000e-10 -2.210123101756e-01 + 7.128000000000e-10 -2.891938845816e-01 + 7.228000000000e-10 -3.329106389600e-01 + 7.328000000000e-10 -3.650518039465e-01 + 7.428000000000e-10 -3.897047407363e-01 + 7.528000000000e-10 -3.843819858648e-01 + 7.628000000000e-10 -3.162978744015e-01 + 7.728000000000e-10 -1.852023753321e-01 + 7.828000000000e-10 -2.888743165850e-02 + 7.928000000000e-10 1.152240030808e-01 + 8.028000000000e-10 2.209771419031e-01 + 8.128000000000e-10 2.892295361788e-01 + 8.228000000000e-10 3.328747680971e-01 + 8.328000000000e-10 3.650871456099e-01 + 8.428000000000e-10 3.896701175780e-01 + 8.528000000000e-10 3.844156912621e-01 + 8.628000000000e-10 3.162637401476e-01 + 8.728000000000e-10 1.852363586492e-01 + 8.828000000000e-10 2.885434112124e-02 + 8.928000000000e-10 -1.151920978903e-01 + 9.028000000000e-10 -2.210084087345e-01 + 9.128000000000e-10 -2.891984388712e-01 + 9.228000000000e-10 -3.329064027155e-01 + 9.328000000000e-10 -3.650560988894e-01 + 9.428000000000e-10 -3.897007143418e-01 + 9.528000000000e-10 -3.843858173814e-01 + 9.628000000000e-10 -3.162935974835e-01 + 9.728000000000e-10 -1.852064424274e-01 + 9.828000000000e-10 -2.888350905479e-02 + 9.928000000000e-10 1.152199079204e-01 + 1.000000000000e-09 1.954791142410e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/conditions.yaml new file mode 100644 index 00000000..4fba8c93 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 1 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_01 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/CML_core_tb.sch new file mode 100644 index 00000000..ce26b8ed --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/CML_core_tb_2.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/CML_core_tb_2.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/CML_core_tb_2.data new file mode 100644 index 00000000..6dccbfd6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/CML_core_tb_2.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.914571027454e-01 + 1.728000000000e-10 -1.780117263272e-01 + 1.828000000000e-10 -3.802564096594e-02 + 1.928000000000e-10 9.479025580261e-02 + 2.028000000000e-10 1.961220444980e-01 + 2.128000000000e-10 2.643669322964e-01 + 2.228000000000e-10 3.071498875260e-01 + 2.328000000000e-10 3.351667250191e-01 + 2.428000000000e-10 3.529478733093e-01 + 2.528000000000e-10 3.439767079911e-01 + 2.628000000000e-10 2.827109934029e-01 + 2.728000000000e-10 1.683025534555e-01 + 2.828000000000e-10 2.843266655337e-02 + 2.928000000000e-10 -1.036223502576e-01 + 3.028000000000e-10 -2.042863713809e-01 + 3.128000000000e-10 -2.713818104821e-01 + 3.228000000000e-10 -3.132717880322e-01 + 3.328000000000e-10 -3.402903477971e-01 + 3.428000000000e-10 -3.574262556597e-01 + 3.528000000000e-10 -3.476240566503e-01 + 3.628000000000e-10 -2.857203755187e-01 + 3.728000000000e-10 -1.703849236420e-01 + 3.828000000000e-10 -2.994825869373e-02 + 3.928000000000e-10 1.026817167876e-01 + 4.028000000000e-10 2.034750084544e-01 + 4.128000000000e-10 2.707812081585e-01 + 4.228000000000e-10 3.126503625184e-01 + 4.328000000000e-10 3.399043734480e-01 + 4.428000000000e-10 3.571021595385e-01 + 4.528000000000e-10 3.475896983741e-01 + 4.628000000000e-10 2.857411927694e-01 + 4.728000000000e-10 1.706053611761e-01 + 4.828000000000e-10 3.010795594348e-02 + 4.928000000000e-10 -1.024135388755e-01 + 5.028000000000e-10 -2.033190471438e-01 + 5.128000000000e-10 -2.705615444577e-01 + 5.228000000000e-10 -3.125558523975e-01 + 5.328000000000e-10 -3.397330193449e-01 + 5.428000000000e-10 -3.570354300338e-01 + 5.528000000000e-10 -3.474353611027e-01 + 5.628000000000e-10 -2.856876769732e-01 + 5.728000000000e-10 -1.704760895977e-01 + 5.828000000000e-10 -3.008641427314e-02 + 5.928000000000e-10 1.025087996136e-01 + 6.028000000000e-10 2.033209986443e-01 + 6.128000000000e-10 2.706412375819e-01 + 6.228000000000e-10 3.125457575810e-01 + 6.328000000000e-10 3.398008382665e-01 + 6.428000000000e-10 3.570145583479e-01 + 6.528000000000e-10 3.474888598072e-01 + 6.628000000000e-10 2.856551852535e-01 + 6.728000000000e-10 1.705188293935e-01 + 6.828000000000e-10 3.004736925580e-02 + 6.928000000000e-10 -1.024728514478e-01 + 7.028000000000e-10 -2.033602328622e-01 + 7.128000000000e-10 -2.706061106716e-01 + 7.228000000000e-10 -3.125843283316e-01 + 7.328000000000e-10 -3.397655433228e-01 + 7.428000000000e-10 -3.570523646632e-01 + 7.528000000000e-10 -3.474554820929e-01 + 7.628000000000e-10 -2.856929985560e-01 + 7.728000000000e-10 -1.704859799650e-01 + 7.828000000000e-10 -3.008383757896e-02 + 7.928000000000e-10 1.025039608177e-01 + 8.028000000000e-10 2.033261442763e-01 + 8.128000000000e-10 2.706371082838e-01 + 8.228000000000e-10 3.125504649737e-01 + 8.328000000000e-10 3.397966066528e-01 + 8.428000000000e-10 3.570198965640e-01 + 8.528000000000e-10 3.474857187206e-01 + 8.628000000000e-10 2.856614378232e-01 + 8.728000000000e-10 1.705164607562e-01 + 8.828000000000e-10 3.005354621749e-02 + 8.928000000000e-10 -1.024749769036e-01 + 9.028000000000e-10 -2.033548454455e-01 + 9.128000000000e-10 -2.706087008930e-01 + 9.228000000000e-10 -3.125792630790e-01 + 9.328000000000e-10 -3.397683901773e-01 + 9.428000000000e-10 -3.570478314069e-01 + 9.528000000000e-10 -3.474583427153e-01 + 9.628000000000e-10 -2.856887110961e-01 + 9.728000000000e-10 -1.704892548593e-01 + 9.828000000000e-10 -3.008001356704e-02 + 9.928000000000e-10 1.025005080892e-01 + 1.000000000000e-09 1.786649040194e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/conditions.yaml new file mode 100644 index 00000000..f674196c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 2 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_02 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/CML_core_tb.sch new file mode 100644 index 00000000..35de4f4a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/CML_core_tb_3.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/CML_core_tb_3.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/CML_core_tb_3.data new file mode 100644 index 00000000..0cc77d23 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/CML_core_tb_3.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.958574299710e-01 + 1.728000000000e-10 -1.791897212785e-01 + 1.828000000000e-10 -3.599075048614e-02 + 1.928000000000e-10 9.946703268478e-02 + 2.028000000000e-10 2.032502871016e-01 + 2.128000000000e-10 2.733994094958e-01 + 2.228000000000e-10 3.172845988123e-01 + 2.328000000000e-10 3.455609123691e-01 + 2.428000000000e-10 3.630923957132e-01 + 2.528000000000e-10 3.534419450967e-01 + 2.628000000000e-10 2.903663934708e-01 + 2.728000000000e-10 1.726743312860e-01 + 2.828000000000e-10 2.930291139472e-02 + 2.928000000000e-10 -1.057514312075e-01 + 3.028000000000e-10 -2.091913834589e-01 + 3.128000000000e-10 -2.784696434768e-01 + 3.228000000000e-10 -3.216873931074e-01 + 3.328000000000e-10 -3.491870426412e-01 + 3.428000000000e-10 -3.662894191498e-01 + 3.528000000000e-10 -3.560374131806e-01 + 3.628000000000e-10 -2.925719059469e-01 + 3.728000000000e-10 -1.742159787839e-01 + 3.828000000000e-10 -3.049391935212e-02 + 3.928000000000e-10 1.049756016137e-01 + 4.028000000000e-10 2.084672065617e-01 + 4.128000000000e-10 2.779301238417e-01 + 4.228000000000e-10 3.211180618030e-01 + 4.328000000000e-10 3.488255023686e-01 + 4.428000000000e-10 3.659572542624e-01 + 4.528000000000e-10 3.559493947967e-01 + 4.628000000000e-10 2.925058094407e-01 + 4.728000000000e-10 1.743267017008e-01 + 4.828000000000e-10 3.054314172764e-02 + 4.928000000000e-10 -1.048175245910e-01 + 5.028000000000e-10 -2.084096499031e-01 + 5.128000000000e-10 -2.777998408986e-01 + 5.228000000000e-10 -3.210985617265e-01 + 5.328000000000e-10 -3.487226120056e-01 + 5.428000000000e-10 -3.659481451181e-01 + 5.528000000000e-10 -3.558482598240e-01 + 5.628000000000e-10 -2.924942070749e-01 + 5.728000000000e-10 -1.742324941843e-01 + 5.828000000000e-10 -3.054486718364e-02 + 5.928000000000e-10 1.048934295445e-01 + 6.028000000000e-10 2.083991544976e-01 + 6.128000000000e-10 2.778660140822e-01 + 6.228000000000e-10 3.210794561497e-01 + 6.328000000000e-10 3.487805773205e-01 + 6.428000000000e-10 3.659226785140e-01 + 6.528000000000e-10 3.558970058340e-01 + 6.628000000000e-10 2.924624137185e-01 + 6.728000000000e-10 1.742748110039e-01 + 6.828000000000e-10 3.050920657876e-02 + 6.928000000000e-10 -1.048562048812e-01 + 7.028000000000e-10 -2.084343791218e-01 + 7.128000000000e-10 -2.778299623633e-01 + 7.228000000000e-10 -3.211147582115e-01 + 7.328000000000e-10 -3.487447461690e-01 + 7.428000000000e-10 -3.659575085549e-01 + 7.528000000000e-10 -3.558632428052e-01 + 7.628000000000e-10 -2.924972481137e-01 + 7.728000000000e-10 -1.742418088753e-01 + 7.828000000000e-10 -3.054328720193e-02 + 7.928000000000e-10 1.048870377838e-01 + 8.028000000000e-10 2.084024115537e-01 + 8.128000000000e-10 2.778603942564e-01 + 8.228000000000e-10 3.210827582845e-01 + 8.328000000000e-10 3.487751488045e-01 + 8.428000000000e-10 3.659266824704e-01 + 8.528000000000e-10 3.558925702991e-01 + 8.628000000000e-10 2.924671830422e-01 + 8.728000000000e-10 1.742711856894e-01 + 8.828000000000e-10 3.051417003050e-02 + 8.928000000000e-10 -1.048591994973e-01 + 9.028000000000e-10 -2.084299430076e-01 + 9.128000000000e-10 -2.778331783696e-01 + 9.228000000000e-10 -3.211104359655e-01 + 9.328000000000e-10 -3.487480244246e-01 + 9.428000000000e-10 -3.659535267111e-01 + 9.528000000000e-10 -3.558663548813e-01 + 9.628000000000e-10 -2.924933270906e-01 + 9.728000000000e-10 -1.742451324195e-01 + 9.828000000000e-10 -3.053963678018e-02 + 9.928000000000e-10 1.048836196344e-01 + 1.000000000000e-09 1.830293824662e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/conditions.yaml new file mode 100644 index 00000000..8bfe7921 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 3 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_03 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/CML_core_tb.sch new file mode 100644 index 00000000..98adc519 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/CML_core_tb_4.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/CML_core_tb_4.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/CML_core_tb_4.data new file mode 100644 index 00000000..38ffd8bf --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/CML_core_tb_4.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.689355033953e-01 + 1.728000000000e-10 -1.691728954892e-01 + 1.828000000000e-10 -4.423302134033e-02 + 1.928000000000e-10 7.663444207075e-02 + 2.028000000000e-10 1.714764750752e-01 + 2.128000000000e-10 2.368219567798e-01 + 2.228000000000e-10 2.772768132445e-01 + 2.328000000000e-10 3.013675537348e-01 + 2.428000000000e-10 3.140706479520e-01 + 2.528000000000e-10 3.038549886105e-01 + 2.628000000000e-10 2.508404086347e-01 + 2.728000000000e-10 1.528360605683e-01 + 2.828000000000e-10 3.040034809293e-02 + 2.928000000000e-10 -8.785381094258e-02 + 3.028000000000e-10 -1.808734961109e-01 + 3.128000000000e-10 -2.445795528199e-01 + 3.228000000000e-10 -2.838354337528e-01 + 3.328000000000e-10 -3.065800962400e-01 + 3.428000000000e-10 -3.181767360109e-01 + 3.528000000000e-10 -3.065752663659e-01 + 3.628000000000e-10 -2.523878800401e-01 + 3.728000000000e-10 -1.531173668737e-01 + 3.828000000000e-10 -2.992055538556e-02 + 3.928000000000e-10 8.900435641641e-02 + 4.028000000000e-10 1.821756238512e-01 + 4.128000000000e-10 2.460123650690e-01 + 4.228000000000e-10 2.851182310100e-01 + 4.328000000000e-10 3.079291995556e-01 + 4.428000000000e-10 3.194129911462e-01 + 4.528000000000e-10 3.078915366323e-01 + 4.628000000000e-10 2.535144344421e-01 + 4.728000000000e-10 1.541542026196e-01 + 4.828000000000e-10 3.063651583090e-02 + 4.928000000000e-10 -8.839161491074e-02 + 5.028000000000e-10 -1.817999659778e-01 + 5.128000000000e-10 -2.456456661989e-01 + 5.228000000000e-10 -2.849195350591e-01 + 5.328000000000e-10 -3.077091828990e-01 + 5.428000000000e-10 -3.193505374448e-01 + 5.528000000000e-10 -3.078081521678e-01 + 5.628000000000e-10 -2.535787813503e-01 + 5.728000000000e-10 -1.541764927596e-01 + 5.828000000000e-10 -3.077048554081e-02 + 5.928000000000e-10 8.832790620553e-02 + 6.028000000000e-10 1.816551916875e-01 + 6.128000000000e-10 2.455879975104e-01 + 6.228000000000e-10 2.847911932982e-01 + 6.328000000000e-10 3.076677363016e-01 + 6.428000000000e-10 3.192371229053e-01 + 6.528000000000e-10 3.077778412262e-01 + 6.628000000000e-10 2.534819327505e-01 + 6.728000000000e-10 1.541683138663e-01 + 6.828000000000e-10 3.070155435378e-02 + 6.928000000000e-10 -8.831320560130e-02 + 7.028000000000e-10 -1.817038543937e-01 + 7.128000000000e-10 -2.455619958387e-01 + 7.228000000000e-10 -2.848320347671e-01 + 7.328000000000e-10 -3.076358698550e-01 + 7.428000000000e-10 -3.192710667609e-01 + 7.528000000000e-10 -3.077409972388e-01 + 7.628000000000e-10 -2.535098012890e-01 + 7.728000000000e-10 -1.541282589474e-01 + 7.828000000000e-10 -3.072672689244e-02 + 7.928000000000e-10 8.835148526653e-02 + 8.028000000000e-10 1.816795669555e-01 + 8.128000000000e-10 2.455984246601e-01 + 8.228000000000e-10 2.848062931006e-01 + 8.328000000000e-10 3.076705916890e-01 + 8.428000000000e-10 3.192450073559e-01 + 8.528000000000e-10 3.077736319697e-01 + 8.628000000000e-10 2.534831121829e-01 + 8.728000000000e-10 1.541590953584e-01 + 8.828000000000e-10 3.069946612700e-02 + 8.928000000000e-10 -8.832341199891e-02 + 9.028000000000e-10 -1.817063952021e-01 + 9.128000000000e-10 -2.455714256322e-01 + 9.228000000000e-10 -2.848333922463e-01 + 9.328000000000e-10 -3.076440936715e-01 + 9.428000000000e-10 -3.192716274515e-01 + 9.528000000000e-10 -3.077481608676e-01 + 9.628000000000e-10 -2.535093614867e-01 + 9.728000000000e-10 -1.541340765567e-01 + 9.828000000000e-10 -3.072486745089e-02 + 9.928000000000e-10 8.834711873249e-02 + 1.000000000000e-09 1.586239577417e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/conditions.yaml new file mode 100644 index 00000000..66eb1871 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 4 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_04 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/CML_core_tb.sch new file mode 100644 index 00000000..459472a8 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/CML_core_tb_5.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/CML_core_tb_5.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/CML_core_tb_5.data new file mode 100644 index 00000000..b4ed17dd --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/CML_core_tb_5.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.722799425151e-01 + 1.728000000000e-10 -1.701277707773e-01 + 1.828000000000e-10 -4.252496989706e-02 + 1.928000000000e-10 8.092536896213e-02 + 2.028000000000e-10 1.785199933375e-01 + 2.128000000000e-10 2.463984181452e-01 + 2.228000000000e-10 2.885755113271e-01 + 2.328000000000e-10 3.131967480955e-01 + 2.428000000000e-10 3.255285716483e-01 + 2.528000000000e-10 3.143820454109e-01 + 2.628000000000e-10 2.595824958850e-01 + 2.728000000000e-10 1.585585813323e-01 + 2.828000000000e-10 3.254606172598e-02 + 2.928000000000e-10 -8.921916265210e-02 + 3.028000000000e-10 -1.857143058967e-01 + 3.128000000000e-10 -2.524588707093e-01 + 3.228000000000e-10 -2.937876617757e-01 + 3.328000000000e-10 -3.173655773168e-01 + 3.428000000000e-10 -3.288566343508e-01 + 3.528000000000e-10 -3.166123605828e-01 + 3.628000000000e-10 -2.609360611345e-01 + 3.728000000000e-10 -1.589355414621e-01 + 3.828000000000e-10 -3.237621747627e-02 + 3.928000000000e-10 8.990939637816e-02 + 4.028000000000e-10 1.864994737191e-01 + 4.128000000000e-10 2.533636311879e-01 + 4.228000000000e-10 2.945633129641e-01 + 4.328000000000e-10 3.182197832362e-01 + 4.428000000000e-10 3.296245618008e-01 + 4.528000000000e-10 3.174841059207e-01 + 4.628000000000e-10 2.616780558587e-01 + 4.728000000000e-10 1.596622360522e-01 + 4.828000000000e-10 3.287681921596e-02 + 4.928000000000e-10 -8.943999963453e-02 + 5.028000000000e-10 -1.862066308093e-01 + 5.128000000000e-10 -2.530527908612e-01 + 5.228000000000e-10 -2.943931136832e-01 + 5.328000000000e-10 -3.180152021024e-01 + 5.428000000000e-10 -3.295545667130e-01 + 5.528000000000e-10 -3.173812952412e-01 + 5.628000000000e-10 -2.617027726155e-01 + 5.728000000000e-10 -1.596411992093e-01 + 5.828000000000e-10 -3.295895028258e-02 + 5.928000000000e-10 8.942267434718e-02 + 6.028000000000e-10 1.861105403656e-01 + 6.128000000000e-10 2.530344325895e-01 + 6.228000000000e-10 2.943051008579e-01 + 6.328000000000e-10 3.180051485103e-01 + 6.428000000000e-10 3.294737915539e-01 + 6.528000000000e-10 3.173744791022e-01 + 6.628000000000e-10 2.616291881364e-01 + 6.728000000000e-10 1.596450333001e-01 + 6.828000000000e-10 3.290088244348e-02 + 6.928000000000e-10 -8.940659470005e-02 + 7.028000000000e-10 -1.861562133447e-01 + 7.128000000000e-10 -2.530116656482e-01 + 7.228000000000e-10 -2.943454309811e-01 + 7.328000000000e-10 -3.179780561670e-01 + 7.428000000000e-10 -3.295087969733e-01 + 7.528000000000e-10 -3.173438661274e-01 + 7.628000000000e-10 -2.616591955397e-01 + 7.728000000000e-10 -1.596115565426e-01 + 7.828000000000e-10 -3.292790237402e-02 + 7.928000000000e-10 8.943927261705e-02 + 8.028000000000e-10 1.861310420114e-01 + 8.128000000000e-10 2.530433655174e-01 + 8.228000000000e-10 2.943195630770e-01 + 8.328000000000e-10 3.180088285378e-01 + 8.428000000000e-10 3.294832118435e-01 + 8.528000000000e-10 3.173732295072e-01 + 8.628000000000e-10 2.616337486722e-01 + 8.728000000000e-10 1.596399004289e-01 + 8.828000000000e-10 3.290244884503e-02 + 8.928000000000e-10 -8.941301350766e-02 + 9.028000000000e-10 -1.861557185261e-01 + 9.128000000000e-10 -2.530180139920e-01 + 9.228000000000e-10 -2.943444772306e-01 + 9.328000000000e-10 -3.179838696148e-01 + 9.428000000000e-10 -3.295076633013e-01 + 9.528000000000e-10 -3.173492560727e-01 + 9.628000000000e-10 -2.616577755083e-01 + 9.728000000000e-10 -1.596163947717e-01 + 9.828000000000e-10 -3.292583900074e-02 + 9.928000000000e-10 8.943518431692e-02 + 1.000000000000e-09 1.621529465729e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/conditions.yaml new file mode 100644 index 00000000..22e861a7 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 5 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_05 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/CML_core_tb.sch new file mode 100644 index 00000000..4e78f7cb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/CML_core_tb_6.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/CML_core_tb_6.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/CML_core_tb_6.data new file mode 100644 index 00000000..6b24d1d6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/CML_core_tb_6.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.622644182692e-01 + 1.728000000000e-10 -1.962653738736e-01 + 1.828000000000e-10 -5.712895575235e-03 + 1.928000000000e-10 1.510345047594e-01 + 2.028000000000e-10 2.432775412534e-01 + 2.128000000000e-10 2.772000132926e-01 + 2.228000000000e-10 3.161630086256e-01 + 2.328000000000e-10 3.654121904616e-01 + 2.428000000000e-10 4.070200809677e-01 + 2.528000000000e-10 4.211809118313e-01 + 2.628000000000e-10 3.552666659990e-01 + 2.728000000000e-10 1.954111420719e-01 + 2.828000000000e-10 7.499275151763e-03 + 2.928000000000e-10 -1.488912332472e-01 + 3.028000000000e-10 -2.420325529570e-01 + 3.128000000000e-10 -2.768171400503e-01 + 3.228000000000e-10 -3.164103191401e-01 + 3.328000000000e-10 -3.656815561297e-01 + 3.428000000000e-10 -4.072561733660e-01 + 3.528000000000e-10 -4.210637971044e-01 + 3.628000000000e-10 -3.548415521036e-01 + 3.728000000000e-10 -1.946286859654e-01 + 3.828000000000e-10 -6.746438981043e-03 + 3.928000000000e-10 1.496127957227e-01 + 4.028000000000e-10 2.425057762271e-01 + 4.128000000000e-10 2.772590268750e-01 + 4.228000000000e-10 3.167075169816e-01 + 4.328000000000e-10 3.660182242119e-01 + 4.428000000000e-10 4.074726111052e-01 + 4.528000000000e-10 4.212975956202e-01 + 4.628000000000e-10 3.549573822535e-01 + 4.728000000000e-10 1.947835560361e-01 + 4.828000000000e-10 6.801482567115e-03 + 4.928000000000e-10 -1.495086456760e-01 + 5.028000000000e-10 -2.424863730465e-01 + 5.128000000000e-10 -2.771744431737e-01 + 5.228000000000e-10 -3.166940000076e-01 + 5.328000000000e-10 -3.659398771497e-01 + 5.428000000000e-10 -4.074689465730e-01 + 5.528000000000e-10 -4.212394549000e-01 + 5.628000000000e-10 -3.549741510035e-01 + 5.728000000000e-10 -1.947436351784e-01 + 5.828000000000e-10 -6.830080160870e-03 + 5.928000000000e-10 1.495407150967e-01 + 6.028000000000e-10 2.424570295697e-01 + 6.128000000000e-10 2.772066160972e-01 + 6.228000000000e-10 3.166654934082e-01 + 6.328000000000e-10 3.659723864247e-01 + 6.428000000000e-10 4.074416211051e-01 + 6.528000000000e-10 4.212697301261e-01 + 6.628000000000e-10 3.549467093259e-01 + 6.728000000000e-10 1.947718238583e-01 + 6.828000000000e-10 6.800951177238e-03 + 6.928000000000e-10 -1.495148390529e-01 + 7.028000000000e-10 -2.424852043575e-01 + 7.128000000000e-10 -2.771809105751e-01 + 7.228000000000e-10 -3.166930947909e-01 + 7.328000000000e-10 -3.659459016360e-01 + 7.428000000000e-10 -4.074677461547e-01 + 7.528000000000e-10 -4.212442717757e-01 + 7.628000000000e-10 -3.549717520551e-01 + 7.728000000000e-10 -1.947463263521e-01 + 7.828000000000e-10 -6.825916545420e-03 + 7.928000000000e-10 1.495385751436e-01 + 8.028000000000e-10 2.424609931904e-01 + 8.128000000000e-10 2.772040406871e-01 + 8.228000000000e-10 3.166687905139e-01 + 8.328000000000e-10 3.659694951712e-01 + 8.428000000000e-10 4.074447010218e-01 + 8.528000000000e-10 4.212671408417e-01 + 8.628000000000e-10 3.549498827484e-01 + 8.728000000000e-10 1.947689363825e-01 + 8.828000000000e-10 6.803756635994e-03 + 8.928000000000e-10 -1.495176738691e-01 + 9.028000000000e-10 -2.424825342063e-01 + 9.128000000000e-10 -2.771836734306e-01 + 9.228000000000e-10 -3.166902103892e-01 + 9.328000000000e-10 -3.659485359213e-01 + 9.428000000000e-10 -4.074650210911e-01 + 9.528000000000e-10 -4.212469657833e-01 + 9.628000000000e-10 -3.549694058275e-01 + 9.728000000000e-10 -1.947487958951e-01 + 9.828000000000e-10 -6.823236278537e-03 + 9.928000000000e-10 1.495363177485e-01 + 1.000000000000e-09 2.250264100511e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/conditions.yaml new file mode 100644 index 00000000..bb1416c2 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 6 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_06 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/CML_core_tb.sch new file mode 100644 index 00000000..f2eb2baf --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/CML_core_tb_7.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/CML_core_tb_7.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/CML_core_tb_7.data new file mode 100644 index 00000000..1453012b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/CML_core_tb_7.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.668500025046e-01 + 1.728000000000e-10 -1.978704758130e-01 + 1.828000000000e-10 -3.069550951996e-03 + 1.928000000000e-10 1.561389387989e-01 + 2.028000000000e-10 2.488697408913e-01 + 2.128000000000e-10 2.833379270136e-01 + 2.228000000000e-10 3.221467647695e-01 + 2.328000000000e-10 3.723176028273e-01 + 2.428000000000e-10 4.147931582649e-01 + 2.528000000000e-10 4.286646301121e-01 + 2.628000000000e-10 3.614677855799e-01 + 2.728000000000e-10 1.982726052647e-01 + 2.828000000000e-10 5.580533140739e-03 + 2.928000000000e-10 -1.536551403474e-01 + 3.028000000000e-10 -2.474729097395e-01 + 3.128000000000e-10 -2.827981749211e-01 + 3.228000000000e-10 -3.222400643179e-01 + 3.328000000000e-10 -3.724510578191e-01 + 3.428000000000e-10 -4.149487937489e-01 + 3.528000000000e-10 -4.285094572794e-01 + 3.628000000000e-10 -3.610716711123e-01 + 3.728000000000e-10 -1.975613483211e-01 + 3.828000000000e-10 -4.936396792217e-03 + 3.928000000000e-10 1.542720670721e-01 + 4.028000000000e-10 2.478554934965e-01 + 4.128000000000e-10 2.831768205427e-01 + 4.228000000000e-10 3.224764565266e-01 + 4.328000000000e-10 3.727376628527e-01 + 4.428000000000e-10 4.151128450004e-01 + 4.528000000000e-10 4.287030398326e-01 + 4.628000000000e-10 3.611465460996e-01 + 4.728000000000e-10 1.976871290976e-01 + 4.828000000000e-10 4.962067120498e-03 + 4.928000000000e-10 -1.541857483448e-01 + 5.028000000000e-10 -2.478549856990e-01 + 5.128000000000e-10 -2.831031432303e-01 + 5.228000000000e-10 -3.224786212940e-01 + 5.328000000000e-10 -3.726675199031e-01 + 5.428000000000e-10 -4.151222726988e-01 + 5.528000000000e-10 -4.286496175832e-01 + 5.628000000000e-10 -3.611719348809e-01 + 5.728000000000e-10 -1.976471175954e-01 + 5.828000000000e-10 -4.995016715658e-03 + 5.928000000000e-10 1.542195273485e-01 + 6.028000000000e-10 2.478226151197e-01 + 6.128000000000e-10 2.831371441394e-01 + 6.228000000000e-10 3.224465270882e-01 + 6.328000000000e-10 3.727020829784e-01 + 6.428000000000e-10 4.150919188021e-01 + 6.528000000000e-10 4.286821395136e-01 + 6.628000000000e-10 3.611419365066e-01 + 6.728000000000e-10 1.976777927703e-01 + 6.828000000000e-10 4.963507878799e-03 + 6.928000000000e-10 -1.541913949207e-01 + 7.028000000000e-10 -2.478529800499e-01 + 7.128000000000e-10 -2.831092109235e-01 + 7.228000000000e-10 -3.224762894768e-01 + 7.328000000000e-10 -3.726728668334e-01 + 7.428000000000e-10 -4.151201370880e-01 + 7.528000000000e-10 -4.286543531433e-01 + 7.628000000000e-10 -3.611692599178e-01 + 7.728000000000e-10 -1.976499135935e-01 + 7.828000000000e-10 -4.990471824028e-03 + 7.928000000000e-10 1.542171227717e-01 + 8.028000000000e-10 2.478269854332e-01 + 8.128000000000e-10 2.831343470853e-01 + 8.228000000000e-10 3.224500362551e-01 + 8.328000000000e-10 3.726987138014e-01 + 8.428000000000e-10 4.150953468135e-01 + 8.528000000000e-10 4.286792233560e-01 + 8.628000000000e-10 3.611455588852e-01 + 8.728000000000e-10 1.976743961081e-01 + 8.828000000000e-10 4.966432661841e-03 + 8.928000000000e-10 -1.541946484524e-01 + 9.028000000000e-10 -2.478502288236e-01 + 9.128000000000e-10 -2.831123474050e-01 + 9.228000000000e-10 -3.224731331421e-01 + 9.328000000000e-10 -3.726757720747e-01 + 9.428000000000e-10 -4.151172388981e-01 + 9.528000000000e-10 -4.286573581279e-01 + 9.628000000000e-10 -3.611667698498e-01 + 9.728000000000e-10 -1.976525646923e-01 + 9.828000000000e-10 -4.987471597641e-03 + 9.928000000000e-10 1.542147143463e-01 + 1.000000000000e-09 2.301006397866e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/conditions.yaml new file mode 100644 index 00000000..4de32c6f --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 7 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_07 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/CML_core_tb.sch new file mode 100644 index 00000000..49645a4c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/CML_core_tb_8.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/CML_core_tb_8.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/CML_core_tb_8.data new file mode 100644 index 00000000..3b0782c6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/CML_core_tb_8.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.388323931118e-01 + 1.728000000000e-10 -1.851651732117e-01 + 1.828000000000e-10 -4.985209728467e-03 + 1.928000000000e-10 1.464303664236e-01 + 2.028000000000e-10 2.390890865534e-01 + 2.128000000000e-10 2.778147857521e-01 + 2.228000000000e-10 3.140298283994e-01 + 2.328000000000e-10 3.564486269316e-01 + 2.428000000000e-10 3.920777300126e-01 + 2.528000000000e-10 4.026431485981e-01 + 2.628000000000e-10 3.407818057760e-01 + 2.728000000000e-10 1.919413521399e-01 + 2.828000000000e-10 1.380608162301e-02 + 2.928000000000e-10 -1.377275777470e-01 + 3.028000000000e-10 -2.320727525709e-01 + 3.128000000000e-10 -2.723718882130e-01 + 3.228000000000e-10 -3.097195919600e-01 + 3.328000000000e-10 -3.525356430610e-01 + 3.428000000000e-10 -3.885938438581e-01 + 3.528000000000e-10 -3.995683250409e-01 + 3.628000000000e-10 -3.382392747069e-01 + 3.728000000000e-10 -1.897685835172e-01 + 3.828000000000e-10 -1.211190537496e-02 + 3.928000000000e-10 1.391365825109e-01 + 4.028000000000e-10 2.331433172305e-01 + 4.128000000000e-10 2.733678679410e-01 + 4.228000000000e-10 3.105714733021e-01 + 4.328000000000e-10 3.533708758772e-01 + 4.428000000000e-10 3.892622592719e-01 + 4.528000000000e-10 4.001272859757e-01 + 4.628000000000e-10 3.385642563623e-01 + 4.728000000000e-10 1.899916781684e-01 + 4.828000000000e-10 1.218033620775e-02 + 4.928000000000e-10 -1.390656421002e-01 + 5.028000000000e-10 -2.331398693887e-01 + 5.128000000000e-10 -2.733037181082e-01 + 5.228000000000e-10 -3.105518491305e-01 + 5.328000000000e-10 -3.533032068815e-01 + 5.428000000000e-10 -3.892531494066e-01 + 5.528000000000e-10 -4.000849100741e-01 + 5.628000000000e-10 -3.385845178207e-01 + 5.728000000000e-10 -1.899774211598e-01 + 5.828000000000e-10 -1.221996984529e-02 + 5.928000000000e-10 1.390720456320e-01 + 6.028000000000e-10 2.331027694491e-01 + 6.128000000000e-10 2.733156842718e-01 + 6.228000000000e-10 3.105197170718e-01 + 6.328000000000e-10 3.533171034352e-01 + 6.428000000000e-10 3.892243222051e-01 + 6.528000000000e-10 4.000997182403e-01 + 6.628000000000e-10 3.385594083538e-01 + 6.728000000000e-10 1.899934277570e-01 + 6.828000000000e-10 1.219466050150e-02 + 6.928000000000e-10 -1.390553921853e-01 + 7.028000000000e-10 -2.331263672195e-01 + 7.128000000000e-10 -2.732987102222e-01 + 7.228000000000e-10 -3.105421090081e-01 + 7.328000000000e-10 -3.532994962925e-01 + 7.428000000000e-10 -3.892451651423e-01 + 7.528000000000e-10 -4.000824543639e-01 + 7.628000000000e-10 -3.385783830881e-01 + 7.728000000000e-10 -1.899748483052e-01 + 7.828000000000e-10 -1.221334688082e-02 + 7.928000000000e-10 1.390733351530e-01 + 8.028000000000e-10 2.331082732353e-01 + 8.128000000000e-10 2.733160005972e-01 + 8.228000000000e-10 3.105237742784e-01 + 8.328000000000e-10 3.533165556732e-01 + 8.428000000000e-10 3.892279285214e-01 + 8.528000000000e-10 4.000991009611e-01 + 8.628000000000e-10 3.385625511294e-01 + 8.728000000000e-10 1.899914169425e-01 + 8.828000000000e-10 1.219669858142e-02 + 8.928000000000e-10 -1.390576717936e-01 + 9.028000000000e-10 -2.331245304799e-01 + 9.128000000000e-10 -2.733009677599e-01 + 9.228000000000e-10 -3.105397739050e-01 + 9.328000000000e-10 -3.533012749995e-01 + 9.428000000000e-10 -3.892430673555e-01 + 9.528000000000e-10 -4.000844420176e-01 + 9.628000000000e-10 -3.385768441038e-01 + 9.728000000000e-10 -1.899764612955e-01 + 9.828000000000e-10 -1.221122328152e-02 + 9.928000000000e-10 1.390717643268e-01 + 1.000000000000e-09 2.142511381663e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/conditions.yaml new file mode 100644 index 00000000..950867e9 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 8 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_08 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/CML_core_tb.sch new file mode 100644 index 00000000..87120267 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/CML_core_tb_9.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/CML_core_tb_9.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/CML_core_tb_9.data new file mode 100644 index 00000000..73c31d13 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/CML_core_tb_9.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.445927026449e-01 + 1.728000000000e-10 -1.889320969581e-01 + 1.828000000000e-10 -5.355234564888e-03 + 1.928000000000e-10 1.489911128277e-01 + 2.028000000000e-10 2.434822449071e-01 + 2.128000000000e-10 2.838702060450e-01 + 2.228000000000e-10 3.202156401988e-01 + 2.328000000000e-10 3.629401474789e-01 + 2.428000000000e-10 3.990998051164e-01 + 2.528000000000e-10 4.099063275401e-01 + 2.628000000000e-10 3.477923521709e-01 + 2.728000000000e-10 1.968519788675e-01 + 2.828000000000e-10 1.493750763318e-02 + 2.928000000000e-10 -1.398437743336e-01 + 3.028000000000e-10 -2.362338093992e-01 + 3.128000000000e-10 -2.782887085314e-01 + 3.228000000000e-10 -3.158910292643e-01 + 3.328000000000e-10 -3.590893499920e-01 + 3.428000000000e-10 -3.957248346768e-01 + 3.528000000000e-10 -4.069627998073e-01 + 3.628000000000e-10 -3.454070734708e-01 + 3.728000000000e-10 -1.948243362004e-01 + 3.828000000000e-10 -1.337926088934e-02 + 3.928000000000e-10 1.411472162204e-01 + 4.028000000000e-10 2.372231231196e-01 + 4.128000000000e-10 2.792284454069e-01 + 4.228000000000e-10 3.166817589057e-01 + 4.328000000000e-10 3.598702175634e-01 + 4.428000000000e-10 3.963375250752e-01 + 4.528000000000e-10 4.074753309124e-01 + 4.628000000000e-10 3.456854225481e-01 + 4.728000000000e-10 1.950177434222e-01 + 4.828000000000e-10 1.342430394201e-02 + 4.928000000000e-10 -1.410850608466e-01 + 5.028000000000e-10 -2.372286880899e-01 + 5.128000000000e-10 -2.791659662153e-01 + 5.228000000000e-10 -3.166689293508e-01 + 5.328000000000e-10 -3.598026374101e-01 + 5.428000000000e-10 -3.963331138013e-01 + 5.528000000000e-10 -4.074316676804e-01 + 5.628000000000e-10 -3.457088001737e-01 + 5.728000000000e-10 -1.950000158899e-01 + 5.828000000000e-10 -1.346504722293e-02 + 5.928000000000e-10 1.410957635246e-01 + 6.028000000000e-10 2.371909425038e-01 + 6.128000000000e-10 2.791817404178e-01 + 6.228000000000e-10 3.166356138828e-01 + 6.328000000000e-10 3.598203377806e-01 + 6.428000000000e-10 3.963033609435e-01 + 6.528000000000e-10 4.074499160221e-01 + 6.628000000000e-10 3.456826167292e-01 + 6.728000000000e-10 1.950190841630e-01 + 6.828000000000e-10 1.343803454206e-02 + 6.928000000000e-10 -1.410764950259e-01 + 7.028000000000e-10 -2.372163265848e-01 + 7.128000000000e-10 -2.791624229651e-01 + 7.228000000000e-10 -3.166599225368e-01 + 7.328000000000e-10 -3.598002455584e-01 + 7.428000000000e-10 -3.963259615583e-01 + 7.528000000000e-10 -4.074304662079e-01 + 7.628000000000e-10 -3.457033629648e-01 + 7.728000000000e-10 -1.949983704767e-01 + 7.828000000000e-10 -1.345872104163e-02 + 7.928000000000e-10 1.410962716693e-01 + 8.028000000000e-10 2.371963808526e-01 + 8.128000000000e-10 2.791814500218e-01 + 8.228000000000e-10 3.166396456569e-01 + 8.328000000000e-10 3.598191409746e-01 + 8.428000000000e-10 3.963069790813e-01 + 8.528000000000e-10 4.074488078929e-01 + 8.628000000000e-10 3.456858987705e-01 + 8.728000000000e-10 1.950166421641e-01 + 8.828000000000e-10 1.344025602045e-02 + 8.928000000000e-10 -1.410790665154e-01 + 9.028000000000e-10 -2.372142995262e-01 + 9.128000000000e-10 -2.791649325552e-01 + 9.228000000000e-10 -3.166573514474e-01 + 9.328000000000e-10 -3.598022359716e-01 + 9.428000000000e-10 -3.963236588924e-01 + 9.528000000000e-10 -4.074326778223e-01 + 9.628000000000e-10 -3.457016440453e-01 + 9.728000000000e-10 -1.950001702792e-01 + 9.828000000000e-10 -1.345633761364e-02 + 9.928000000000e-10 1.410945129066e-01 + 1.000000000000e-09 2.176807579100e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/conditions.yaml new file mode 100644 index 00000000..1f4a0c85 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 9 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_09 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/CML_core_tb.sch new file mode 100644 index 00000000..daa6bd55 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/CML_core_tb_10.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/CML_core_tb_10.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/CML_core_tb_10.data new file mode 100644 index 00000000..6f87c434 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/CML_core_tb_10.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.831577979118e-01 + 1.728000000000e-10 -1.548331321524e-01 + 1.828000000000e-10 2.954507991941e-03 + 1.928000000000e-10 1.412083661187e-01 + 2.028000000000e-10 2.303947789211e-01 + 2.128000000000e-10 2.725788032239e-01 + 2.228000000000e-10 3.064646814943e-01 + 2.328000000000e-10 3.412898568956e-01 + 2.428000000000e-10 3.692979025942e-01 + 2.528000000000e-10 3.751979264520e-01 + 2.628000000000e-10 3.186495551608e-01 + 2.728000000000e-10 1.849115684226e-01 + 2.828000000000e-10 2.146912258403e-02 + 2.928000000000e-10 -1.215319416200e-01 + 3.028000000000e-10 -2.147336364713e-01 + 3.128000000000e-10 -2.593628319189e-01 + 3.228000000000e-10 -2.947919001104e-01 + 3.328000000000e-10 -3.306034656465e-01 + 3.428000000000e-10 -3.598903423599e-01 + 3.528000000000e-10 -3.674806029527e-01 + 3.628000000000e-10 -3.131864519443e-01 + 3.728000000000e-10 -1.816607205648e-01 + 3.828000000000e-10 -2.002885045896e-02 + 3.928000000000e-10 1.219326732879e-01 + 4.028000000000e-10 2.146583452252e-01 + 4.128000000000e-10 2.593288859790e-01 + 4.228000000000e-10 2.947836961551e-01 + 4.328000000000e-10 3.305873089453e-01 + 4.428000000000e-10 3.597520160348e-01 + 4.528000000000e-10 3.672634041173e-01 + 4.628000000000e-10 3.128292575731e-01 + 4.728000000000e-10 1.812525079401e-01 + 4.828000000000e-10 1.956255085056e-02 + 4.928000000000e-10 -1.223539241893e-01 + 5.028000000000e-10 -2.150587893921e-01 + 5.128000000000e-10 -2.596440912838e-01 + 5.228000000000e-10 -2.950896959018e-01 + 5.328000000000e-10 -3.308452440946e-01 + 5.428000000000e-10 -3.600168265621e-01 + 5.528000000000e-10 -3.674687038170e-01 + 5.628000000000e-10 -3.130140501398e-01 + 5.728000000000e-10 -1.813584327872e-01 + 5.828000000000e-10 -1.965159115909e-02 + 5.928000000000e-10 1.223212864923e-01 + 6.028000000000e-10 2.150157103205e-01 + 6.128000000000e-10 2.596318060931e-01 + 6.228000000000e-10 2.950524078153e-01 + 6.328000000000e-10 3.308363963911e-01 + 6.428000000000e-10 3.599874022300e-01 + 6.528000000000e-10 3.674690181116e-01 + 6.628000000000e-10 3.129980588961e-01 + 6.728000000000e-10 1.813712653368e-01 + 6.828000000000e-10 1.964491680526e-02 + 6.928000000000e-10 -1.223023112353e-01 + 7.028000000000e-10 -2.150202483004e-01 + 7.128000000000e-10 -2.596144309164e-01 + 7.228000000000e-10 -2.950582886643e-01 + 7.328000000000e-10 -3.308199600200e-01 + 7.428000000000e-10 -3.599931640339e-01 + 7.528000000000e-10 -3.674538095645e-01 + 7.628000000000e-10 -3.130042913922e-01 + 7.728000000000e-10 -1.813570925598e-01 + 7.828000000000e-10 -1.965290666609e-02 + 7.928000000000e-10 1.223145971689e-01 + 8.028000000000e-10 2.150114430495e-01 + 8.128000000000e-10 2.596256780136e-01 + 8.228000000000e-10 2.950490452158e-01 + 8.328000000000e-10 3.308307530718e-01 + 8.428000000000e-10 3.599842799802e-01 + 8.528000000000e-10 3.674639698479e-01 + 8.628000000000e-10 3.129957925611e-01 + 8.728000000000e-10 1.813666711568e-01 + 8.828000000000e-10 1.964348030724e-02 + 8.928000000000e-10 -1.223056361887e-01 + 9.028000000000e-10 -2.150207890100e-01 + 9.128000000000e-10 -2.596171721225e-01 + 9.228000000000e-10 -2.950581404305e-01 + 9.328000000000e-10 -3.308221104591e-01 + 9.428000000000e-10 -3.599929167296e-01 + 9.528000000000e-10 -3.674557320782e-01 + 9.628000000000e-10 -3.130039671541e-01 + 9.728000000000e-10 -1.813582011282e-01 + 9.828000000000e-10 -1.965175786777e-02 + 9.928000000000e-10 1.223137237372e-01 + 1.000000000000e-09 1.953703252853e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/conditions.yaml new file mode 100644 index 00000000..adfee817 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 10 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_10 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/CML_core_tb.sch new file mode 100644 index 00000000..421adbfb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/CML_core_tb_11.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/CML_core_tb_11.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/CML_core_tb_11.data new file mode 100644 index 00000000..1e62d263 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/CML_core_tb_11.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.857852225245e-01 + 1.728000000000e-10 -1.572533595452e-01 + 1.828000000000e-10 2.540381659783e-03 + 1.928000000000e-10 1.434374080790e-01 + 2.028000000000e-10 2.351272809546e-01 + 2.128000000000e-10 2.797956268783e-01 + 2.228000000000e-10 3.144243918962e-01 + 2.328000000000e-10 3.493618787392e-01 + 2.428000000000e-10 3.773715695689e-01 + 2.528000000000e-10 3.831823569325e-01 + 2.628000000000e-10 3.264482498061e-01 + 2.728000000000e-10 1.910530045686e-01 + 2.828000000000e-10 2.436059711742e-02 + 2.928000000000e-10 -1.220220612332e-01 + 3.028000000000e-10 -2.180809390746e-01 + 3.128000000000e-10 -2.653775774444e-01 + 3.228000000000e-10 -3.017848824321e-01 + 3.328000000000e-10 -3.379021858146e-01 + 3.428000000000e-10 -3.673696540777e-01 + 3.528000000000e-10 -3.751149757425e-01 + 3.628000000000e-10 -3.209083740174e-01 + 3.728000000000e-10 -1.878979131572e-01 + 3.828000000000e-10 -2.307531260616e-02 + 3.928000000000e-10 1.222703025101e-01 + 4.028000000000e-10 2.179003509445e-01 + 4.128000000000e-10 2.652908784701e-01 + 4.228000000000e-10 3.017672646237e-01 + 4.328000000000e-10 3.378931599738e-01 + 4.428000000000e-10 3.672390198172e-01 + 4.528000000000e-10 3.748903812400e-01 + 4.628000000000e-10 3.205316331029e-01 + 4.728000000000e-10 1.874647700937e-01 + 4.828000000000e-10 2.258819957166e-02 + 4.928000000000e-10 -1.227112688171e-01 + 5.028000000000e-10 -2.183172764214e-01 + 5.128000000000e-10 -2.656203742551e-01 + 5.228000000000e-10 -3.020800906145e-01 + 5.328000000000e-10 -3.381553362553e-01 + 5.428000000000e-10 -3.675051891202e-01 + 5.528000000000e-10 -3.750972240389e-01 + 5.628000000000e-10 -3.207148935088e-01 + 5.728000000000e-10 -1.875700292984e-01 + 5.828000000000e-10 -2.267596999196e-02 + 5.928000000000e-10 1.226776663562e-01 + 6.028000000000e-10 2.182733434309e-01 + 6.128000000000e-10 2.656053081095e-01 + 6.228000000000e-10 3.020411985396e-01 + 6.328000000000e-10 3.381435634392e-01 + 6.428000000000e-10 3.674743818406e-01 + 6.528000000000e-10 3.750952532513e-01 + 6.628000000000e-10 3.206986438750e-01 + 6.728000000000e-10 1.875816736609e-01 + 6.828000000000e-10 2.266940437016e-02 + 6.928000000000e-10 -1.226596158426e-01 + 7.028000000000e-10 -2.182776851932e-01 + 7.128000000000e-10 -2.655888997029e-01 + 7.228000000000e-10 -3.020470638059e-01 + 7.328000000000e-10 -3.381282771084e-01 + 7.428000000000e-10 -3.674800981492e-01 + 7.528000000000e-10 -3.750811166601e-01 + 7.628000000000e-10 -3.207046174850e-01 + 7.728000000000e-10 -1.875682790354e-01 + 7.828000000000e-10 -2.267703281628e-02 + 7.928000000000e-10 1.226713327530e-01 + 8.028000000000e-10 2.182693863135e-01 + 8.128000000000e-10 2.655996099454e-01 + 8.228000000000e-10 3.020383466326e-01 + 8.328000000000e-10 3.381385294735e-01 + 8.428000000000e-10 3.674717742910e-01 + 8.528000000000e-10 3.750907045119e-01 + 8.628000000000e-10 3.206966644115e-01 + 8.728000000000e-10 1.875773616331e-01 + 8.828000000000e-10 2.266807684955e-02 + 8.928000000000e-10 -1.226628120211e-01 + 9.028000000000e-10 -2.182782381400e-01 + 9.128000000000e-10 -2.655915506047e-01 + 9.228000000000e-10 -3.020469590318e-01 + 9.328000000000e-10 -3.381303351991e-01 + 9.428000000000e-10 -3.674798958779e-01 + 9.528000000000e-10 -3.750829516380e-01 + 9.628000000000e-10 -3.207043265993e-01 + 9.728000000000e-10 -1.875693454762e-01 + 9.828000000000e-10 -2.267594148777e-02 + 9.928000000000e-10 1.226704651969e-01 + 1.000000000000e-09 1.977257563344e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/conditions.yaml new file mode 100644 index 00000000..d808158e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 11 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_11 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/CML_core_tb.sch new file mode 100644 index 00000000..4cb8f529 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/CML_core_tb_12.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/CML_core_tb_12.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/CML_core_tb_12.data new file mode 100644 index 00000000..16422ca1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/CML_core_tb_12.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.213526702696e-01 + 1.728000000000e-10 -1.557909441213e-01 + 1.828000000000e-10 3.476956205809e-02 + 1.928000000000e-10 1.811250151598e-01 + 2.028000000000e-10 2.596166993269e-01 + 2.128000000000e-10 2.853727091731e-01 + 2.228000000000e-10 3.254453264627e-01 + 2.328000000000e-10 3.792799604087e-01 + 2.428000000000e-10 4.176388066249e-01 + 2.528000000000e-10 4.205544301124e-01 + 2.628000000000e-10 3.463528198985e-01 + 2.728000000000e-10 1.792096076204e-01 + 2.828000000000e-10 -1.442396833933e-02 + 2.928000000000e-10 -1.649237711275e-01 + 3.028000000000e-10 -2.471596975948e-01 + 3.128000000000e-10 -2.748735614517e-01 + 3.228000000000e-10 -3.160128767795e-01 + 3.328000000000e-10 -3.707930594343e-01 + 3.428000000000e-10 -4.104823651943e-01 + 3.528000000000e-10 -4.153692056047e-01 + 3.628000000000e-10 -3.427931169871e-01 + 3.728000000000e-10 -1.769552164151e-01 + 3.828000000000e-10 1.590673093360e-02 + 3.928000000000e-10 1.658834812043e-01 + 4.028000000000e-10 2.479775600913e-01 + 4.128000000000e-10 2.756409688001e-01 + 4.228000000000e-10 3.168596600790e-01 + 4.328000000000e-10 3.715133147191e-01 + 4.428000000000e-10 4.111218222953e-01 + 4.528000000000e-10 4.157229971644e-01 + 4.628000000000e-10 3.430019798682e-01 + 4.728000000000e-10 1.769456026445e-01 + 4.828000000000e-10 -1.592886494610e-02 + 4.928000000000e-10 -1.659782283296e-01 + 5.028000000000e-10 -2.479947853664e-01 + 5.128000000000e-10 -2.756931315881e-01 + 5.228000000000e-10 -3.168416717549e-01 + 5.328000000000e-10 -3.715547211919e-01 + 5.428000000000e-10 -4.111034138799e-01 + 5.528000000000e-10 -4.157691346087e-01 + 5.628000000000e-10 -3.429925568898e-01 + 5.728000000000e-10 -1.770024985869e-01 + 5.828000000000e-10 1.592938202906e-02 + 5.928000000000e-10 1.659292038608e-01 + 6.028000000000e-10 2.480043512000e-01 + 6.128000000000e-10 2.756533285421e-01 + 6.228000000000e-10 3.168576585763e-01 + 6.328000000000e-10 3.715156583068e-01 + 6.428000000000e-10 4.111207690964e-01 + 6.528000000000e-10 4.157343976531e-01 + 6.628000000000e-10 3.430135347581e-01 + 6.728000000000e-10 1.769734665185e-01 + 6.828000000000e-10 -1.590652763180e-02 + 6.928000000000e-10 -1.659537152419e-01 + 7.028000000000e-10 -2.479812550746e-01 + 7.128000000000e-10 -2.756768834918e-01 + 7.228000000000e-10 -3.168350969677e-01 + 7.328000000000e-10 -3.715419152243e-01 + 7.428000000000e-10 -4.110983779981e-01 + 7.528000000000e-10 -4.157587194411e-01 + 7.628000000000e-10 -3.429901444601e-01 + 7.728000000000e-10 -1.769973775521e-01 + 7.828000000000e-10 1.592723735432e-02 + 7.928000000000e-10 1.659318535084e-01 + 8.028000000000e-10 2.480017799848e-01 + 8.128000000000e-10 2.756559811492e-01 + 8.228000000000e-10 3.168566227283e-01 + 8.328000000000e-10 3.715195500188e-01 + 8.428000000000e-10 4.111190536097e-01 + 8.528000000000e-10 4.157370668569e-01 + 8.628000000000e-10 3.430103710665e-01 + 8.728000000000e-10 1.769771675859e-01 + 8.828000000000e-10 -1.590770493918e-02 + 8.928000000000e-10 -1.659501582149e-01 + 9.028000000000e-10 -2.479827571068e-01 + 9.128000000000e-10 -2.756738772283e-01 + 9.228000000000e-10 -3.168377001445e-01 + 9.328000000000e-10 -3.715391180409e-01 + 9.428000000000e-10 -4.111007797151e-01 + 9.528000000000e-10 -4.157556639381e-01 + 9.628000000000e-10 -3.429919881202e-01 + 9.728000000000e-10 -1.769955652012e-01 + 9.828000000000e-10 1.592430721908e-02 + 9.928000000000e-10 1.659331850974e-01 + 1.000000000000e-09 2.332140069758e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/conditions.yaml new file mode 100644 index 00000000..31f821ce --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 12 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_12 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/CML_core_tb.sch new file mode 100644 index 00000000..89253593 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/CML_core_tb_13.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/CML_core_tb_13.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/CML_core_tb_13.data new file mode 100644 index 00000000..3dfcf241 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/CML_core_tb_13.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.365386572536e-01 + 1.728000000000e-10 -1.657072094068e-01 + 1.828000000000e-10 3.099865584261e-02 + 1.928000000000e-10 1.820426436768e-01 + 2.028000000000e-10 2.627018214462e-01 + 2.128000000000e-10 2.893736945719e-01 + 2.228000000000e-10 3.287984169352e-01 + 2.328000000000e-10 3.833334317825e-01 + 2.428000000000e-10 4.238785365972e-01 + 2.528000000000e-10 4.280322768716e-01 + 2.628000000000e-10 3.532409470363e-01 + 2.728000000000e-10 1.834641899168e-01 + 2.828000000000e-10 -1.474496205711e-02 + 2.928000000000e-10 -1.691349612478e-01 + 3.028000000000e-10 -2.530204867896e-01 + 3.128000000000e-10 -2.814070764654e-01 + 3.228000000000e-10 -3.218416847899e-01 + 3.328000000000e-10 -3.771799136100e-01 + 3.428000000000e-10 -4.187055626636e-01 + 3.528000000000e-10 -4.243036771430e-01 + 3.628000000000e-10 -3.506062035467e-01 + 3.728000000000e-10 -1.816763297909e-01 + 3.828000000000e-10 1.601938741723e-02 + 3.928000000000e-10 1.700087907901e-01 + 4.028000000000e-10 2.537596951165e-01 + 4.128000000000e-10 2.820887501770e-01 + 4.228000000000e-10 3.225625541805e-01 + 4.328000000000e-10 3.777928583784e-01 + 4.428000000000e-10 4.192485534625e-01 + 4.528000000000e-10 4.246080285894e-01 + 4.628000000000e-10 3.507916132015e-01 + 4.728000000000e-10 1.816929452641e-01 + 4.828000000000e-10 -1.601075067965e-02 + 4.928000000000e-10 -1.700562644838e-01 + 5.028000000000e-10 -2.537513990380e-01 + 5.128000000000e-10 -2.821086741965e-01 + 5.228000000000e-10 -3.225309737549e-01 + 5.328000000000e-10 -3.778081660132e-01 + 5.428000000000e-10 -4.192196231589e-01 + 5.528000000000e-10 -4.246325132019e-01 + 5.628000000000e-10 -3.507765562578e-01 + 5.728000000000e-10 -1.817315603141e-01 + 5.828000000000e-10 1.601468821266e-02 + 5.928000000000e-10 1.700220210141e-01 + 6.028000000000e-10 2.537612841477e-01 + 6.128000000000e-10 2.820810469197e-01 + 6.228000000000e-10 3.225454957468e-01 + 6.328000000000e-10 3.777800822765e-01 + 6.428000000000e-10 4.192350742948e-01 + 6.528000000000e-10 4.246071005326e-01 + 6.628000000000e-10 3.507940665347e-01 + 6.728000000000e-10 1.817094337521e-01 + 6.828000000000e-10 -1.599736953115e-02 + 6.928000000000e-10 -1.700405869499e-01 + 7.028000000000e-10 -2.537437685408e-01 + 7.128000000000e-10 -2.820988428465e-01 + 7.228000000000e-10 -3.225283133162e-01 + 7.328000000000e-10 -3.778004844844e-01 + 7.428000000000e-10 -4.192180216890e-01 + 7.528000000000e-10 -4.246257635725e-01 + 7.628000000000e-10 -3.507760422929e-01 + 7.728000000000e-10 -1.817278922025e-01 + 7.828000000000e-10 1.601285231965e-02 + 7.928000000000e-10 1.700238629540e-01 + 8.028000000000e-10 2.537592487741e-01 + 8.128000000000e-10 2.820829438407e-01 + 8.228000000000e-10 3.225445511573e-01 + 8.328000000000e-10 3.777829985044e-01 + 8.428000000000e-10 4.192337708379e-01 + 8.528000000000e-10 4.246090234999e-01 + 8.628000000000e-10 3.507916632731e-01 + 8.728000000000e-10 1.817122417436e-01 + 8.828000000000e-10 -1.599824136343e-02 + 8.928000000000e-10 -1.700377849177e-01 + 9.028000000000e-10 -2.537449127629e-01 + 9.128000000000e-10 -2.820965585668e-01 + 9.228000000000e-10 -3.225302446360e-01 + 9.328000000000e-10 -3.777982010874e-01 + 9.428000000000e-10 -4.192199753705e-01 + 9.528000000000e-10 -4.246232587341e-01 + 9.628000000000e-10 -3.507775800865e-01 + 9.728000000000e-10 -1.817263367247e-01 + 9.828000000000e-10 1.601066647660e-02 + 9.928000000000e-10 1.700248857455e-01 + 1.000000000000e-09 2.385375784000e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/conditions.yaml new file mode 100644 index 00000000..21bcab57 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 13 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_13 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/CML_core_tb.sch new file mode 100644 index 00000000..90cc3dc4 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/CML_core_tb_14.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/CML_core_tb_14.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/CML_core_tb_14.data new file mode 100644 index 00000000..86f9b023 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/CML_core_tb_14.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.747912795524e-01 + 1.728000000000e-10 -1.327955908449e-01 + 1.828000000000e-10 3.931332790349e-02 + 1.928000000000e-10 1.782957289495e-01 + 2.028000000000e-10 2.573194188668e-01 + 2.128000000000e-10 2.870254911902e-01 + 2.228000000000e-10 3.228650321442e-01 + 2.328000000000e-10 3.690575149088e-01 + 2.428000000000e-10 4.023791308175e-01 + 2.528000000000e-10 4.034409994944e-01 + 2.628000000000e-10 3.332295993533e-01 + 2.728000000000e-10 1.767123870243e-01 + 2.828000000000e-10 -7.574880255958e-03 + 2.928000000000e-10 -1.550892096227e-01 + 3.028000000000e-10 -2.394679486139e-01 + 3.128000000000e-10 -2.715465054757e-01 + 3.228000000000e-10 -3.085580168164e-01 + 3.328000000000e-10 -3.560821219044e-01 + 3.428000000000e-10 -3.914831036325e-01 + 3.528000000000e-10 -3.956717314322e-01 + 3.628000000000e-10 -3.285929470428e-01 + 3.728000000000e-10 -1.747908753666e-01 + 3.828000000000e-10 7.882784627431e-03 + 3.928000000000e-10 1.545893087045e-01 + 4.028000000000e-10 2.389887597051e-01 + 4.128000000000e-10 2.712307710628e-01 + 4.228000000000e-10 3.085047043395e-01 + 4.328000000000e-10 3.559448484744e-01 + 4.428000000000e-10 3.913507819782e-01 + 4.528000000000e-10 3.953547803018e-01 + 4.628000000000e-10 3.282585464854e-01 + 4.728000000000e-10 1.743078825018e-01 + 4.828000000000e-10 -8.291328068348e-03 + 4.928000000000e-10 -1.550293895867e-01 + 5.028000000000e-10 -2.392804293874e-01 + 5.128000000000e-10 -2.715405217782e-01 + 5.228000000000e-10 -3.087067361985e-01 + 5.328000000000e-10 -3.562070457914e-01 + 5.428000000000e-10 -3.915132320474e-01 + 5.528000000000e-10 -3.955548280332e-01 + 5.628000000000e-10 -3.283427048941e-01 + 5.728000000000e-10 -1.744282326244e-01 + 5.828000000000e-10 8.270645751064e-03 + 5.928000000000e-10 1.549582711486e-01 + 6.028000000000e-10 2.392860039329e-01 + 6.128000000000e-10 2.714820836214e-01 + 6.228000000000e-10 3.087161022039e-01 + 6.328000000000e-10 3.561494137047e-01 + 6.428000000000e-10 3.915273490759e-01 + 6.528000000000e-10 3.955079501007e-01 + 6.628000000000e-10 3.283677191723e-01 + 6.728000000000e-10 1.743944727908e-01 + 6.828000000000e-10 -8.238033211244e-03 + 6.928000000000e-10 -1.549849820320e-01 + 7.028000000000e-10 -2.392533741503e-01 + 7.128000000000e-10 -2.715088112944e-01 + 7.228000000000e-10 -3.086845279612e-01 + 7.328000000000e-10 -3.561786907982e-01 + 7.428000000000e-10 -3.914967682891e-01 + 7.528000000000e-10 -3.955360247734e-01 + 7.628000000000e-10 -3.283379458960e-01 + 7.728000000000e-10 -1.744219452106e-01 + 7.828000000000e-10 8.266285029230e-03 + 7.928000000000e-10 1.549592969714e-01 + 8.028000000000e-10 2.392805186707e-01 + 8.128000000000e-10 2.714837558368e-01 + 8.228000000000e-10 3.087120651005e-01 + 8.328000000000e-10 3.561520690508e-01 + 8.428000000000e-10 3.915233230940e-01 + 8.528000000000e-10 3.955100606400e-01 + 8.628000000000e-10 3.283632493206e-01 + 8.728000000000e-10 1.743968536756e-01 + 8.828000000000e-10 -8.241845610385e-03 + 8.928000000000e-10 -1.549825747228e-01 + 9.028000000000e-10 -2.392568734068e-01 + 9.128000000000e-10 -2.715063119250e-01 + 9.228000000000e-10 -3.086881712182e-01 + 9.328000000000e-10 -3.561760305782e-01 + 9.428000000000e-10 -3.915002731039e-01 + 9.528000000000e-10 -3.955331724158e-01 + 9.628000000000e-10 -3.283409163093e-01 + 9.728000000000e-10 -1.744193777973e-01 + 9.828000000000e-10 8.263272108901e-03 + 9.928000000000e-10 1.549616575981e-01 + 1.000000000000e-09 2.229820050464e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/conditions.yaml new file mode 100644 index 00000000..8c6f06b1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 14 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_14 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/CML_core_tb.sch new file mode 100644 index 00000000..23daa263 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/CML_core_tb_15.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/CML_core_tb_15.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/CML_core_tb_15.data new file mode 100644 index 00000000..7b2e7ab2 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/CML_core_tb_15.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.957054612407e-01 + 1.728000000000e-10 -1.475216919691e-01 + 1.828000000000e-10 3.196996632833e-02 + 1.928000000000e-10 1.773696584526e-01 + 2.028000000000e-10 2.602670445343e-01 + 2.128000000000e-10 2.919684489720e-01 + 2.228000000000e-10 3.273690981683e-01 + 2.328000000000e-10 3.736661732429e-01 + 2.428000000000e-10 4.086769482098e-01 + 2.528000000000e-10 4.113258498473e-01 + 2.628000000000e-10 3.414272197123e-01 + 2.728000000000e-10 1.833836328070e-01 + 2.828000000000e-10 -4.501363849837e-03 + 2.928000000000e-10 -1.562318489881e-01 + 3.028000000000e-10 -2.435570784568e-01 + 3.128000000000e-10 -2.775386220390e-01 + 3.228000000000e-10 -3.142878056355e-01 + 3.328000000000e-10 -3.618442790176e-01 + 3.428000000000e-10 -3.986028140213e-01 + 3.528000000000e-10 -4.040381865127e-01 + 3.628000000000e-10 -3.369104214062e-01 + 3.728000000000e-10 -1.811830752063e-01 + 3.828000000000e-10 5.355128083595e-03 + 3.928000000000e-10 1.563630270676e-01 + 4.028000000000e-10 2.436522664355e-01 + 4.128000000000e-10 2.777202130414e-01 + 4.228000000000e-10 3.146716935396e-01 + 4.328000000000e-10 3.621309165835e-01 + 4.428000000000e-10 3.988648293319e-01 + 4.528000000000e-10 4.040567761896e-01 + 4.628000000000e-10 3.368362274946e-01 + 4.728000000000e-10 1.809052635954e-01 + 4.828000000000e-10 -5.606347307292e-03 + 4.928000000000e-10 -1.566747533637e-01 + 5.028000000000e-10 -2.438438929936e-01 + 5.128000000000e-10 -2.779365198916e-01 + 5.228000000000e-10 -3.147868656031e-01 + 5.328000000000e-10 -3.623069078218e-01 + 5.428000000000e-10 -3.989546307961e-01 + 5.528000000000e-10 -4.041975741324e-01 + 5.628000000000e-10 -3.368831845243e-01 + 5.728000000000e-10 -1.810020824460e-01 + 5.828000000000e-10 5.593858826262e-03 + 5.928000000000e-10 1.566090374935e-01 + 6.028000000000e-10 2.438493522755e-01 + 6.128000000000e-10 2.778818285943e-01 + 6.228000000000e-10 3.147972496077e-01 + 6.328000000000e-10 3.622530927659e-01 + 6.428000000000e-10 3.989689895438e-01 + 6.528000000000e-10 4.041528360847e-01 + 6.628000000000e-10 3.369065350765e-01 + 6.728000000000e-10 1.809679655825e-01 + 6.828000000000e-10 -5.565139497590e-03 + 6.928000000000e-10 -1.566366178225e-01 + 7.028000000000e-10 -2.438204188033e-01 + 7.128000000000e-10 -2.779089356335e-01 + 7.228000000000e-10 -3.147686522157e-01 + 7.328000000000e-10 -3.622826637804e-01 + 7.428000000000e-10 -3.989411843085e-01 + 7.528000000000e-10 -4.041807678845e-01 + 7.628000000000e-10 -3.368790616195e-01 + 7.728000000000e-10 -1.809947630224e-01 + 7.828000000000e-10 5.591512634984e-03 + 7.928000000000e-10 1.566120178189e-01 + 8.028000000000e-10 2.438458933358e-01 + 8.128000000000e-10 2.778849719194e-01 + 8.228000000000e-10 3.147945034671e-01 + 8.328000000000e-10 3.622568751046e-01 + 8.428000000000e-10 3.989662140554e-01 + 8.528000000000e-10 4.041558823701e-01 + 8.628000000000e-10 3.369030769235e-01 + 8.728000000000e-10 1.809706945647e-01 + 8.828000000000e-10 -5.568483515763e-03 + 8.928000000000e-10 -1.566340912711e-01 + 9.028000000000e-10 -2.438236181184e-01 + 9.128000000000e-10 -2.779064153414e-01 + 9.228000000000e-10 -3.147718720666e-01 + 9.328000000000e-10 -3.622798572716e-01 + 9.428000000000e-10 -3.989444036153e-01 + 9.528000000000e-10 -4.041778978449e-01 + 9.628000000000e-10 -3.368819513246e-01 + 9.728000000000e-10 -1.809921012276e-01 + 9.828000000000e-10 5.588724287086e-03 + 9.928000000000e-10 1.566143682128e-01 + 1.000000000000e-09 2.267750497136e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/conditions.yaml new file mode 100644 index 00000000..16180f19 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 15 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_15 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/CML_core_tb.sch new file mode 100644 index 00000000..2fc8057c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/CML_core_tb_16.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/CML_core_tb_16.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/CML_core_tb_16.data new file mode 100644 index 00000000..a01deb89 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/CML_core_tb_16.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -1.908985659112e-01 + 1.728000000000e-10 -9.049079150817e-02 + 1.828000000000e-10 3.945873683219e-02 + 1.928000000000e-10 1.521437177417e-01 + 2.028000000000e-10 2.220068772324e-01 + 2.128000000000e-10 2.535092334052e-01 + 2.228000000000e-10 2.861973397174e-01 + 2.328000000000e-10 3.239843013312e-01 + 2.428000000000e-10 3.520113017607e-01 + 2.528000000000e-10 3.540468115658e-01 + 2.628000000000e-10 2.949447709683e-01 + 2.728000000000e-10 1.587983397866e-01 + 2.828000000000e-10 -6.865354773069e-03 + 2.928000000000e-10 -1.448078480843e-01 + 3.028000000000e-10 -2.275605338030e-01 + 3.128000000000e-10 -2.625604064747e-01 + 3.228000000000e-10 -2.958552078644e-01 + 3.328000000000e-10 -3.351711406638e-01 + 3.428000000000e-10 -3.644984224381e-01 + 3.528000000000e-10 -3.669950471097e-01 + 3.628000000000e-10 -3.072796408874e-01 + 3.728000000000e-10 -1.699866077827e-01 + 3.828000000000e-10 -2.842045316933e-03 + 3.928000000000e-10 1.365086891956e-01 + 4.028000000000e-10 2.207869920157e-01 + 4.128000000000e-10 2.567713461579e-01 + 4.228000000000e-10 2.907030026757e-01 + 4.328000000000e-10 3.302687598301e-01 + 4.428000000000e-10 3.600803190405e-01 + 4.528000000000e-10 3.632331450943e-01 + 4.628000000000e-10 3.045482678871e-01 + 4.728000000000e-10 1.682698274629e-01 + 4.828000000000e-10 2.058504292284e-03 + 4.928000000000e-10 -1.367871396964e-01 + 5.028000000000e-10 -2.207717990252e-01 + 5.128000000000e-10 -2.567684885934e-01 + 5.228000000000e-10 -2.906651825463e-01 + 5.328000000000e-10 -3.302494358660e-01 + 5.428000000000e-10 -3.599712284157e-01 + 5.528000000000e-10 -3.631239508150e-01 + 5.628000000000e-10 -3.043584109358e-01 + 5.728000000000e-10 -1.680958385636e-01 + 5.828000000000e-10 -1.834034512727e-03 + 5.928000000000e-10 1.369613450439e-01 + 6.028000000000e-10 2.209618957221e-01 + 6.128000000000e-10 2.568952536478e-01 + 6.228000000000e-10 2.908171185353e-01 + 6.328000000000e-10 3.303549214919e-01 + 6.428000000000e-10 3.601082390759e-01 + 6.528000000000e-10 3.632059905221e-01 + 6.628000000000e-10 3.044557238628e-01 + 6.728000000000e-10 1.681292777859e-01 + 6.828000000000e-10 1.882442241730e-03 + 6.928000000000e-10 -1.369637862409e-01 + 7.028000000000e-10 -2.209363992802e-01 + 7.128000000000e-10 -2.569065829626e-01 + 7.228000000000e-10 -2.907936706940e-01 + 7.328000000000e-10 -3.303682701482e-01 + 7.428000000000e-10 -3.600879594395e-01 + 7.528000000000e-10 -3.632220959958e-01 + 7.628000000000e-10 -3.044401007882e-01 + 7.728000000000e-10 -1.681486407544e-01 + 7.828000000000e-10 -1.870004957548e-03 + 7.928000000000e-10 1.369437070838e-01 + 8.028000000000e-10 2.209481957039e-01 + 8.128000000000e-10 2.568879030180e-01 + 8.228000000000e-10 2.908064848389e-01 + 8.328000000000e-10 3.303493303219e-01 + 8.428000000000e-10 3.601006147126e-01 + 8.528000000000e-10 3.632041339109e-01 + 8.628000000000e-10 3.044528281549e-01 + 8.728000000000e-10 1.681322760827e-01 + 8.828000000000e-10 1.883536763259e-03 + 8.928000000000e-10 -1.369582535540e-01 + 9.028000000000e-10 -2.209346296842e-01 + 9.128000000000e-10 -2.569016830366e-01 + 9.228000000000e-10 -2.907925936742e-01 + 9.328000000000e-10 -3.303636164667e-01 + 9.428000000000e-10 -3.600871302257e-01 + 9.528000000000e-10 -3.632178492939e-01 + 9.628000000000e-10 -3.044398392752e-01 + 9.728000000000e-10 -1.681454261603e-01 + 9.828000000000e-10 -1.870628705438e-03 + 9.928000000000e-10 1.369459433541e-01 + 1.000000000000e-09 2.037746084522e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/conditions.yaml new file mode 100644 index 00000000..7b1f789e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 16 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_16 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/CML_core_tb.sch new file mode 100644 index 00000000..a8f0c987 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/CML_core_tb_17.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/CML_core_tb_17.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/CML_core_tb_17.data new file mode 100644 index 00000000..c21b093d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/CML_core_tb_17.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.135873679018e-01 + 1.728000000000e-10 -1.054229355639e-01 + 1.828000000000e-10 3.485798650969e-02 + 1.928000000000e-10 1.569675139767e-01 + 2.028000000000e-10 2.330635404696e-01 + 2.128000000000e-10 2.680443549179e-01 + 2.228000000000e-10 3.014044829899e-01 + 2.328000000000e-10 3.394080314353e-01 + 2.428000000000e-10 3.679529618424e-01 + 2.528000000000e-10 3.700593040123e-01 + 2.628000000000e-10 3.097824620429e-01 + 2.728000000000e-10 1.706514675999e-01 + 2.828000000000e-10 3.558070014658e-04 + 2.928000000000e-10 -1.428409974599e-01 + 3.028000000000e-10 -2.298289579719e-01 + 3.128000000000e-10 -2.678794741753e-01 + 3.228000000000e-10 -3.017454056957e-01 + 3.328000000000e-10 -3.410620518407e-01 + 3.428000000000e-10 -3.712405389398e-01 + 3.528000000000e-10 -3.749327973471e-01 + 3.628000000000e-10 -3.157484466493e-01 + 3.728000000000e-10 -1.773087198166e-01 + 3.828000000000e-10 -7.070252178339e-03 + 3.928000000000e-10 1.364462941621e-01 + 4.028000000000e-10 2.243241068758e-01 + 4.128000000000e-10 2.631279769125e-01 + 4.228000000000e-10 2.976097246349e-01 + 4.328000000000e-10 3.371159716785e-01 + 4.428000000000e-10 3.676405775058e-01 + 4.528000000000e-10 3.717787254056e-01 + 4.628000000000e-10 3.133854979421e-01 + 4.728000000000e-10 1.756870158595e-01 + 4.828000000000e-10 6.171257018760e-03 + 4.928000000000e-10 -1.369680995621e-01 + 5.028000000000e-10 -2.245781248931e-01 + 5.128000000000e-10 -2.633829468620e-01 + 5.228000000000e-10 -2.978042748481e-01 + 5.328000000000e-10 -3.373348877854e-01 + 5.428000000000e-10 -3.677584906255e-01 + 5.528000000000e-10 -3.718812762918e-01 + 5.628000000000e-10 -3.133649557524e-01 + 5.728000000000e-10 -1.756479312047e-01 + 5.828000000000e-10 -6.040608056278e-03 + 5.928000000000e-10 1.370690415770e-01 + 6.028000000000e-10 2.247181767783e-01 + 6.128000000000e-10 2.634617265965e-01 + 6.228000000000e-10 2.979157296699e-01 + 6.328000000000e-10 3.373958940353e-01 + 6.428000000000e-10 3.678612954525e-01 + 6.528000000000e-10 3.719309221475e-01 + 6.628000000000e-10 3.134447453066e-01 + 6.728000000000e-10 1.756687688086e-01 + 6.828000000000e-10 6.090200135509e-03 + 6.928000000000e-10 -1.370702307281e-01 + 7.028000000000e-10 -2.246847420648e-01 + 7.128000000000e-10 -2.634701196121e-01 + 7.228000000000e-10 -2.978849158722e-01 + 7.328000000000e-10 -3.374068878437e-01 + 7.428000000000e-10 -3.678336110941e-01 + 7.528000000000e-10 -3.719446503824e-01 + 7.628000000000e-10 -3.134227431793e-01 + 7.728000000000e-10 -1.756868885858e-01 + 7.828000000000e-10 -6.072676723321e-03 + 7.928000000000e-10 1.370503070743e-01 + 8.028000000000e-10 2.247004966695e-01 + 8.128000000000e-10 2.634509722982e-01 + 8.228000000000e-10 2.979013793804e-01 + 8.328000000000e-10 3.373870921905e-01 + 8.428000000000e-10 3.678495602861e-01 + 8.528000000000e-10 3.719256264749e-01 + 8.628000000000e-10 3.134381864470e-01 + 8.728000000000e-10 1.756688935561e-01 + 8.828000000000e-10 6.088345643719e-03 + 8.928000000000e-10 -1.370666831053e-01 + 9.028000000000e-10 -2.246851372638e-01 + 9.128000000000e-10 -2.634666121684e-01 + 9.228000000000e-10 -2.978856025968e-01 + 9.328000000000e-10 -3.374033621769e-01 + 9.428000000000e-10 -3.678342837151e-01 + 9.528000000000e-10 -3.719412125322e-01 + 9.628000000000e-10 -3.134235677100e-01 + 9.728000000000e-10 -1.756838495744e-01 + 9.828000000000e-10 -6.073781243164e-03 + 9.928000000000e-10 1.370527135588e-01 + 1.000000000000e-09 2.065229990524e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/conditions.yaml new file mode 100644 index 00000000..4836dc98 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 17 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/run_17 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/simulation_summary.csv b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/simulation_summary.csv new file mode 100644 index 00000000..2b2b1892 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/simulation_summary.csv @@ -0,0 +1,19 @@ +run,corner,temperature,vdd,time,vo_diff,frequency +run_00,tt,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.111e-01, -1.870e-01, -3.563e-02, …]",4.722 +run_01,ss,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.163e-01, -1.876e-01, -3.217e-02, …]",4.722 +run_02,tt,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.915e-01, -1.780e-01, -3.803e-02, …]",4.722 +run_03,ss,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.959e-01, -1.792e-01, -3.599e-02, …]",4.722 +run_04,tt,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.689e-01, -1.692e-01, -4.423e-02, …]",4.722 +run_05,ss,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.723e-01, -1.701e-01, -4.252e-02, …]",4.722 +run_06,tt,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.623e-01, -1.963e-01, -5.713e-03, …]",4.722 +run_07,ss,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.669e-01, -1.979e-01, -3.070e-03, …]",4.722 +run_08,tt,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.388e-01, -1.852e-01, -4.985e-03, …]",4.722 +run_09,ss,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.446e-01, -1.889e-01, -5.355e-03, …]",4.722 +run_10,tt,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.832e-01, -1.548e-01, 2.955e-03, …]",4.722 +run_11,ss,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.858e-01, -1.573e-01, 2.540e-03, …]",4.722 +run_12,tt,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.214e-01, -1.558e-01, 3.477e-02, …]",4.722 +run_13,ss,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.365e-01, -1.657e-01, 3.100e-02, …]",4.722 +run_14,tt,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.748e-01, -1.328e-01, 3.931e-02, …]",4.722 +run_15,ss,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.957e-01, -1.475e-01, 3.197e-02, …]",4.722 +run_16,tt,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-1.909e-01, -9.049e-02, 3.946e-02, …]",4.722 +run_17,ss,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.136e-01, -1.054e-01, 3.486e-02, …]",4.722 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/simulation_summary.md b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/simulation_summary.md new file mode 100644 index 00000000..248ed80a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/parameters/Frequency/simulation_summary.md @@ -0,0 +1,22 @@ +# Simulation Summary for Freq + +| run | corner | temperature | vdd | time | vo_diff | frequency | +| :-- | -----: | ----------: | --: | ---: | ------: | --------: | +| run_00 | tt | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.111e-01, -1.870e-01, -3.563e-02, …] | 4.722 | +| run_01 | ss | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.163e-01, -1.876e-01, -3.217e-02, …] | 4.722 | +| run_02 | tt | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.915e-01, -1.780e-01, -3.803e-02, …] | 4.722 | +| run_03 | ss | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.959e-01, -1.792e-01, -3.599e-02, …] | 4.722 | +| run_04 | tt | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.689e-01, -1.692e-01, -4.423e-02, …] | 4.722 | +| run_05 | ss | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.723e-01, -1.701e-01, -4.252e-02, …] | 4.722 | +| run_06 | tt | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.623e-01, -1.963e-01, -5.713e-03, …] | 4.722 | +| run_07 | ss | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.669e-01, -1.979e-01, -3.070e-03, …] | 4.722 | +| run_08 | tt | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.388e-01, -1.852e-01, -4.985e-03, …] | 4.722 | +| run_09 | ss | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.446e-01, -1.889e-01, -5.355e-03, …] | 4.722 | +| run_10 | tt | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.832e-01, -1.548e-01, 2.955e-03, …] | 4.722 | +| run_11 | ss | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.858e-01, -1.573e-01, 2.540e-03, …] | 4.722 | +| run_12 | tt | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.214e-01, -1.558e-01, 3.477e-02, …] | 4.722 | +| run_13 | ss | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.365e-01, -1.657e-01, 3.100e-02, …] | 4.722 | +| run_14 | tt | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.748e-01, -1.328e-01, 3.931e-02, …] | 4.722 | +| run_15 | ss | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.957e-01, -1.475e-01, 3.197e-02, …] | 4.722 | +| run_16 | tt | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-1.909e-01, -9.049e-02, 3.946e-02, …] | 4.722 | +| run_17 | ss | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.136e-01, -1.054e-01, 3.486e-02, …] | 4.722 | diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/summary.md b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/summary.md new file mode 100644 index 00000000..9177d5db --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-38-36/summary.md @@ -0,0 +1,9 @@ + +# CACE Summary for CML_divider + +**netlist source**: schematic + +| Parameter | Tool | Result | Min Limit | Min Value | Typ Target | Typ Value | Max Limit | Max Value | Status | +| :------------------- | :------------------- | :-------------- | ---------: | -----------: | ---------: | -----------: | ---------: | -----------: | :------: | +| Freq | ngspice | frequency | any | 0.000 GHz | any | 0.000 GHz | any | 0.000 GHz | Pass ✅ | + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/CML_core_tb.sch new file mode 100644 index 00000000..48f6f0bb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=CACE\{vdd\} savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/CML_core_tb.sch new file mode 100644 index 00000000..6495f6cb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/CML_core_tb_0.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/CML_core_tb_0.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/CML_core_tb_0.data new file mode 100644 index 00000000..3b0782c6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/CML_core_tb_0.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.388323931118e-01 + 1.728000000000e-10 -1.851651732117e-01 + 1.828000000000e-10 -4.985209728467e-03 + 1.928000000000e-10 1.464303664236e-01 + 2.028000000000e-10 2.390890865534e-01 + 2.128000000000e-10 2.778147857521e-01 + 2.228000000000e-10 3.140298283994e-01 + 2.328000000000e-10 3.564486269316e-01 + 2.428000000000e-10 3.920777300126e-01 + 2.528000000000e-10 4.026431485981e-01 + 2.628000000000e-10 3.407818057760e-01 + 2.728000000000e-10 1.919413521399e-01 + 2.828000000000e-10 1.380608162301e-02 + 2.928000000000e-10 -1.377275777470e-01 + 3.028000000000e-10 -2.320727525709e-01 + 3.128000000000e-10 -2.723718882130e-01 + 3.228000000000e-10 -3.097195919600e-01 + 3.328000000000e-10 -3.525356430610e-01 + 3.428000000000e-10 -3.885938438581e-01 + 3.528000000000e-10 -3.995683250409e-01 + 3.628000000000e-10 -3.382392747069e-01 + 3.728000000000e-10 -1.897685835172e-01 + 3.828000000000e-10 -1.211190537496e-02 + 3.928000000000e-10 1.391365825109e-01 + 4.028000000000e-10 2.331433172305e-01 + 4.128000000000e-10 2.733678679410e-01 + 4.228000000000e-10 3.105714733021e-01 + 4.328000000000e-10 3.533708758772e-01 + 4.428000000000e-10 3.892622592719e-01 + 4.528000000000e-10 4.001272859757e-01 + 4.628000000000e-10 3.385642563623e-01 + 4.728000000000e-10 1.899916781684e-01 + 4.828000000000e-10 1.218033620775e-02 + 4.928000000000e-10 -1.390656421002e-01 + 5.028000000000e-10 -2.331398693887e-01 + 5.128000000000e-10 -2.733037181082e-01 + 5.228000000000e-10 -3.105518491305e-01 + 5.328000000000e-10 -3.533032068815e-01 + 5.428000000000e-10 -3.892531494066e-01 + 5.528000000000e-10 -4.000849100741e-01 + 5.628000000000e-10 -3.385845178207e-01 + 5.728000000000e-10 -1.899774211598e-01 + 5.828000000000e-10 -1.221996984529e-02 + 5.928000000000e-10 1.390720456320e-01 + 6.028000000000e-10 2.331027694491e-01 + 6.128000000000e-10 2.733156842718e-01 + 6.228000000000e-10 3.105197170718e-01 + 6.328000000000e-10 3.533171034352e-01 + 6.428000000000e-10 3.892243222051e-01 + 6.528000000000e-10 4.000997182403e-01 + 6.628000000000e-10 3.385594083538e-01 + 6.728000000000e-10 1.899934277570e-01 + 6.828000000000e-10 1.219466050150e-02 + 6.928000000000e-10 -1.390553921853e-01 + 7.028000000000e-10 -2.331263672195e-01 + 7.128000000000e-10 -2.732987102222e-01 + 7.228000000000e-10 -3.105421090081e-01 + 7.328000000000e-10 -3.532994962925e-01 + 7.428000000000e-10 -3.892451651423e-01 + 7.528000000000e-10 -4.000824543639e-01 + 7.628000000000e-10 -3.385783830881e-01 + 7.728000000000e-10 -1.899748483052e-01 + 7.828000000000e-10 -1.221334688082e-02 + 7.928000000000e-10 1.390733351530e-01 + 8.028000000000e-10 2.331082732353e-01 + 8.128000000000e-10 2.733160005972e-01 + 8.228000000000e-10 3.105237742784e-01 + 8.328000000000e-10 3.533165556732e-01 + 8.428000000000e-10 3.892279285214e-01 + 8.528000000000e-10 4.000991009611e-01 + 8.628000000000e-10 3.385625511294e-01 + 8.728000000000e-10 1.899914169425e-01 + 8.828000000000e-10 1.219669858142e-02 + 8.928000000000e-10 -1.390576717936e-01 + 9.028000000000e-10 -2.331245304799e-01 + 9.128000000000e-10 -2.733009677599e-01 + 9.228000000000e-10 -3.105397739050e-01 + 9.328000000000e-10 -3.533012749995e-01 + 9.428000000000e-10 -3.892430673555e-01 + 9.528000000000e-10 -4.000844420176e-01 + 9.628000000000e-10 -3.385768441038e-01 + 9.728000000000e-10 -1.899764612955e-01 + 9.828000000000e-10 -1.221122328152e-02 + 9.928000000000e-10 1.390717643268e-01 + 1.000000000000e-09 2.142511381663e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/conditions.yaml new file mode 100644 index 00000000..13744412 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/parameters/Frequency/run_0 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/summary.md b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/summary.md new file mode 100644 index 00000000..0840f717 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-07/summary.md @@ -0,0 +1,9 @@ + +# CACE Summary for CML_divider + +**netlist source**: schematic + +| Parameter | Tool | Result | Min Limit | Min Value | Typ Target | Typ Value | Max Limit | Max Value | Status | +| :------------------- | :------------------- | :-------------- | ---------: | -----------: | ---------: | -----------: | ---------: | -----------: | :------: | +| Freq | ngspice | frequency | 4.2 GHz | ​ | 5.4 GHz | ​ | 7.1 GHz | ​ | Error ❗ | + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-30/parameters/Frequency/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-30/parameters/Frequency/CML_core_tb.sch new file mode 100644 index 00000000..48f6f0bb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-30/parameters/Frequency/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=CACE\{vdd\} savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-30/parameters/Frequency/frequency.png b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-41-30/parameters/Frequency/frequency.png new file mode 100644 index 0000000000000000000000000000000000000000..cfba68b3a5e2c2aaf1a17272aa6e745e414b03e7 GIT binary patch literal 33283 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

H~fblLfGZUImjCZX{5|w(7!1AyTc^f)H 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

b+Fors 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 HU3UK)g=}gj literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/CML_core_tb.sch new file mode 100644 index 00000000..1af9ac89 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/CML_core_tb_0.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/CML_core_tb_0.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/CML_core_tb_0.data new file mode 100644 index 00000000..4cb5b399 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/CML_core_tb_0.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.110742996065e-01 + 1.728000000000e-10 -1.869505717284e-01 + 1.828000000000e-10 -3.563037101706e-02 + 1.928000000000e-10 1.056708524540e-01 + 2.028000000000e-10 2.100393804445e-01 + 2.128000000000e-10 2.784249297688e-01 + 2.228000000000e-10 3.224310579067e-01 + 2.328000000000e-10 3.548600651170e-01 + 2.428000000000e-10 3.792482005271e-01 + 2.528000000000e-10 3.740820324036e-01 + 2.628000000000e-10 3.079440308227e-01 + 2.728000000000e-10 1.813826171807e-01 + 2.828000000000e-10 2.923027813912e-02 + 2.928000000000e-10 -1.118282325615e-01 + 3.028000000000e-10 -2.157337068367e-01 + 3.128000000000e-10 -2.829033176767e-01 + 3.228000000000e-10 -3.260714502323e-01 + 3.328000000000e-10 -3.577361248183e-01 + 3.428000000000e-10 -3.819104006606e-01 + 3.528000000000e-10 -3.764730474160e-01 + 3.628000000000e-10 -3.102968359246e-01 + 3.728000000000e-10 -1.832608913655e-01 + 3.828000000000e-10 -3.084931437320e-02 + 3.928000000000e-10 1.106163095990e-01 + 4.028000000000e-10 2.145714971977e-01 + 4.128000000000e-10 2.819937231053e-01 + 4.228000000000e-10 3.251740998910e-01 + 4.328000000000e-10 3.570946969464e-01 + 4.428000000000e-10 3.813004444382e-01 + 4.528000000000e-10 3.761230596147e-01 + 4.628000000000e-10 3.099646053412e-01 + 4.728000000000e-10 1.831473345022e-01 + 4.828000000000e-10 3.069401022130e-02 + 4.928000000000e-10 -1.106258411343e-01 + 5.028000000000e-10 -2.146793601179e-01 + 5.128000000000e-10 -2.820035552799e-01 + 5.228000000000e-10 -3.252909243829e-01 + 5.328000000000e-10 -3.570986338553e-01 + 5.428000000000e-10 -3.813904658256e-01 + 5.528000000000e-10 -3.760889514061e-01 + 5.628000000000e-10 -3.100114096943e-01 + 5.728000000000e-10 -1.830827247194e-01 + 5.828000000000e-10 -3.072480545922e-02 + 5.928000000000e-10 1.106906463094e-01 + 6.028000000000e-10 2.146493837568e-01 + 6.128000000000e-10 2.820610673881e-01 + 6.228000000000e-10 3.252525482967e-01 + 6.328000000000e-10 3.571504708749e-01 + 6.428000000000e-10 3.813516648295e-01 + 6.528000000000e-10 3.761390656738e-01 + 6.628000000000e-10 3.099742259389e-01 + 6.728000000000e-10 1.831331110808e-01 + 6.828000000000e-10 3.068765829312e-02 + 6.928000000000e-10 -1.106445812930e-01 + 7.028000000000e-10 -2.146859050297e-01 + 7.128000000000e-10 -2.820172231683e-01 + 7.228000000000e-10 -3.252905125649e-01 + 7.328000000000e-10 -3.571078709926e-01 + 7.428000000000e-10 -3.813893177320e-01 + 7.528000000000e-10 -3.760986555866e-01 + 7.628000000000e-10 -3.100117776476e-01 + 7.728000000000e-10 -1.830935153198e-01 + 7.828000000000e-10 -3.072484475908e-02 + 7.928000000000e-10 1.106810594907e-01 + 8.028000000000e-10 2.146507312123e-01 + 8.128000000000e-10 2.820530370402e-01 + 8.228000000000e-10 3.252547871433e-01 + 8.328000000000e-10 3.571432636036e-01 + 8.428000000000e-10 3.813547544577e-01 + 8.528000000000e-10 3.761324372121e-01 + 8.628000000000e-10 3.099775475493e-01 + 8.728000000000e-10 1.831274535707e-01 + 8.828000000000e-10 3.069175078476e-02 + 8.928000000000e-10 -1.106491559136e-01 + 9.028000000000e-10 -2.146821655528e-01 + 9.128000000000e-10 -2.820218639330e-01 + 9.228000000000e-10 -3.252864642203e-01 + 9.328000000000e-10 -3.571122611941e-01 + 9.428000000000e-10 -3.813854215351e-01 + 9.528000000000e-10 -3.761024723822e-01 + 9.628000000000e-10 -3.100075395903e-01 + 9.728000000000e-10 -1.830975404653e-01 + 9.828000000000e-10 -3.072097080048e-02 + 9.928000000000e-10 1.106770531472e-01 + 1.000000000000e-09 1.895325033433e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/conditions.yaml new file mode 100644 index 00000000..d73bdff9 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_00 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/CML_core_tb.sch new file mode 100644 index 00000000..7e7b8738 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/CML_core_tb_1.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/CML_core_tb_1.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/CML_core_tb_1.data new file mode 100644 index 00000000..b332ca2c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/CML_core_tb_1.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.162797108708e-01 + 1.728000000000e-10 -1.875883768906e-01 + 1.828000000000e-10 -3.217177564589e-02 + 1.928000000000e-10 1.118453904517e-01 + 2.028000000000e-10 2.178869753922e-01 + 2.128000000000e-10 2.869187499571e-01 + 2.228000000000e-10 3.311831063176e-01 + 2.328000000000e-10 3.637965093552e-01 + 2.428000000000e-10 3.884475585753e-01 + 2.528000000000e-10 3.831703446637e-01 + 2.628000000000e-10 3.149426000366e-01 + 2.728000000000e-10 1.840825734866e-01 + 2.828000000000e-10 2.786370536806e-02 + 2.928000000000e-10 -1.159899232258e-01 + 3.028000000000e-10 -2.217323928122e-01 + 3.128000000000e-10 -2.897841810826e-01 + 3.228000000000e-10 -3.334256487170e-01 + 3.328000000000e-10 -3.654508602495e-01 + 3.428000000000e-10 -3.900407544937e-01 + 3.528000000000e-10 -3.846189534315e-01 + 3.628000000000e-10 -3.164922452622e-01 + 3.728000000000e-10 -1.853182634851e-01 + 3.828000000000e-10 -2.898615964086e-02 + 3.928000000000e-10 1.151710782521e-01 + 4.028000000000e-10 2.209054309263e-01 + 4.128000000000e-10 2.891817322742e-01 + 4.228000000000e-10 3.328077516782e-01 + 4.328000000000e-10 3.650515838921e-01 + 4.428000000000e-10 3.896233583948e-01 + 4.528000000000e-10 3.844074302627e-01 + 4.628000000000e-10 3.162448842688e-01 + 4.728000000000e-10 1.852475068120e-01 + 4.828000000000e-10 2.884623360652e-02 + 4.928000000000e-10 -1.151788252337e-01 + 5.028000000000e-10 -2.210147130581e-01 + 5.128000000000e-10 -2.891872658193e-01 + 5.228000000000e-10 -3.329167168088e-01 + 5.328000000000e-10 -3.650471930963e-01 + 5.428000000000e-10 -3.897100874545e-01 + 5.528000000000e-10 -3.843762306477e-01 + 5.628000000000e-10 -3.163013912188e-01 + 5.728000000000e-10 -1.851950213487e-01 + 5.828000000000e-10 -2.889036873678e-02 + 5.928000000000e-10 1.152312899162e-01 + 6.028000000000e-10 2.209735588305e-01 + 6.128000000000e-10 2.892357416511e-01 + 6.228000000000e-10 3.328707955285e-01 + 6.328000000000e-10 3.650931065031e-01 + 6.428000000000e-10 3.896657987149e-01 + 6.528000000000e-10 3.844215105032e-01 + 6.628000000000e-10 3.162596917265e-01 + 6.728000000000e-10 1.852417351036e-01 + 6.828000000000e-10 2.884992827621e-02 + 6.928000000000e-10 -1.151876679011e-01 + 7.028000000000e-10 -2.210123101756e-01 + 7.128000000000e-10 -2.891938845816e-01 + 7.228000000000e-10 -3.329106389600e-01 + 7.328000000000e-10 -3.650518039465e-01 + 7.428000000000e-10 -3.897047407363e-01 + 7.528000000000e-10 -3.843819858648e-01 + 7.628000000000e-10 -3.162978744015e-01 + 7.728000000000e-10 -1.852023753321e-01 + 7.828000000000e-10 -2.888743165850e-02 + 7.928000000000e-10 1.152240030808e-01 + 8.028000000000e-10 2.209771419031e-01 + 8.128000000000e-10 2.892295361788e-01 + 8.228000000000e-10 3.328747680971e-01 + 8.328000000000e-10 3.650871456099e-01 + 8.428000000000e-10 3.896701175780e-01 + 8.528000000000e-10 3.844156912621e-01 + 8.628000000000e-10 3.162637401476e-01 + 8.728000000000e-10 1.852363586492e-01 + 8.828000000000e-10 2.885434112124e-02 + 8.928000000000e-10 -1.151920978903e-01 + 9.028000000000e-10 -2.210084087345e-01 + 9.128000000000e-10 -2.891984388712e-01 + 9.228000000000e-10 -3.329064027155e-01 + 9.328000000000e-10 -3.650560988894e-01 + 9.428000000000e-10 -3.897007143418e-01 + 9.528000000000e-10 -3.843858173814e-01 + 9.628000000000e-10 -3.162935974835e-01 + 9.728000000000e-10 -1.852064424274e-01 + 9.828000000000e-10 -2.888350905479e-02 + 9.928000000000e-10 1.152199079204e-01 + 1.000000000000e-09 1.954791142410e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/conditions.yaml new file mode 100644 index 00000000..90b469c5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 1 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_01 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/CML_core_tb.sch new file mode 100644 index 00000000..aef5907d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/CML_core_tb_2.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/CML_core_tb_2.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/CML_core_tb_2.data new file mode 100644 index 00000000..6dccbfd6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/CML_core_tb_2.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.914571027454e-01 + 1.728000000000e-10 -1.780117263272e-01 + 1.828000000000e-10 -3.802564096594e-02 + 1.928000000000e-10 9.479025580261e-02 + 2.028000000000e-10 1.961220444980e-01 + 2.128000000000e-10 2.643669322964e-01 + 2.228000000000e-10 3.071498875260e-01 + 2.328000000000e-10 3.351667250191e-01 + 2.428000000000e-10 3.529478733093e-01 + 2.528000000000e-10 3.439767079911e-01 + 2.628000000000e-10 2.827109934029e-01 + 2.728000000000e-10 1.683025534555e-01 + 2.828000000000e-10 2.843266655337e-02 + 2.928000000000e-10 -1.036223502576e-01 + 3.028000000000e-10 -2.042863713809e-01 + 3.128000000000e-10 -2.713818104821e-01 + 3.228000000000e-10 -3.132717880322e-01 + 3.328000000000e-10 -3.402903477971e-01 + 3.428000000000e-10 -3.574262556597e-01 + 3.528000000000e-10 -3.476240566503e-01 + 3.628000000000e-10 -2.857203755187e-01 + 3.728000000000e-10 -1.703849236420e-01 + 3.828000000000e-10 -2.994825869373e-02 + 3.928000000000e-10 1.026817167876e-01 + 4.028000000000e-10 2.034750084544e-01 + 4.128000000000e-10 2.707812081585e-01 + 4.228000000000e-10 3.126503625184e-01 + 4.328000000000e-10 3.399043734480e-01 + 4.428000000000e-10 3.571021595385e-01 + 4.528000000000e-10 3.475896983741e-01 + 4.628000000000e-10 2.857411927694e-01 + 4.728000000000e-10 1.706053611761e-01 + 4.828000000000e-10 3.010795594348e-02 + 4.928000000000e-10 -1.024135388755e-01 + 5.028000000000e-10 -2.033190471438e-01 + 5.128000000000e-10 -2.705615444577e-01 + 5.228000000000e-10 -3.125558523975e-01 + 5.328000000000e-10 -3.397330193449e-01 + 5.428000000000e-10 -3.570354300338e-01 + 5.528000000000e-10 -3.474353611027e-01 + 5.628000000000e-10 -2.856876769732e-01 + 5.728000000000e-10 -1.704760895977e-01 + 5.828000000000e-10 -3.008641427314e-02 + 5.928000000000e-10 1.025087996136e-01 + 6.028000000000e-10 2.033209986443e-01 + 6.128000000000e-10 2.706412375819e-01 + 6.228000000000e-10 3.125457575810e-01 + 6.328000000000e-10 3.398008382665e-01 + 6.428000000000e-10 3.570145583479e-01 + 6.528000000000e-10 3.474888598072e-01 + 6.628000000000e-10 2.856551852535e-01 + 6.728000000000e-10 1.705188293935e-01 + 6.828000000000e-10 3.004736925580e-02 + 6.928000000000e-10 -1.024728514478e-01 + 7.028000000000e-10 -2.033602328622e-01 + 7.128000000000e-10 -2.706061106716e-01 + 7.228000000000e-10 -3.125843283316e-01 + 7.328000000000e-10 -3.397655433228e-01 + 7.428000000000e-10 -3.570523646632e-01 + 7.528000000000e-10 -3.474554820929e-01 + 7.628000000000e-10 -2.856929985560e-01 + 7.728000000000e-10 -1.704859799650e-01 + 7.828000000000e-10 -3.008383757896e-02 + 7.928000000000e-10 1.025039608177e-01 + 8.028000000000e-10 2.033261442763e-01 + 8.128000000000e-10 2.706371082838e-01 + 8.228000000000e-10 3.125504649737e-01 + 8.328000000000e-10 3.397966066528e-01 + 8.428000000000e-10 3.570198965640e-01 + 8.528000000000e-10 3.474857187206e-01 + 8.628000000000e-10 2.856614378232e-01 + 8.728000000000e-10 1.705164607562e-01 + 8.828000000000e-10 3.005354621749e-02 + 8.928000000000e-10 -1.024749769036e-01 + 9.028000000000e-10 -2.033548454455e-01 + 9.128000000000e-10 -2.706087008930e-01 + 9.228000000000e-10 -3.125792630790e-01 + 9.328000000000e-10 -3.397683901773e-01 + 9.428000000000e-10 -3.570478314069e-01 + 9.528000000000e-10 -3.474583427153e-01 + 9.628000000000e-10 -2.856887110961e-01 + 9.728000000000e-10 -1.704892548593e-01 + 9.828000000000e-10 -3.008001356704e-02 + 9.928000000000e-10 1.025005080892e-01 + 1.000000000000e-09 1.786649040194e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/conditions.yaml new file mode 100644 index 00000000..74221d72 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 2 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_02 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/CML_core_tb.sch new file mode 100644 index 00000000..2d185d5a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/CML_core_tb_3.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/CML_core_tb_3.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/CML_core_tb_3.data new file mode 100644 index 00000000..0cc77d23 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/CML_core_tb_3.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.958574299710e-01 + 1.728000000000e-10 -1.791897212785e-01 + 1.828000000000e-10 -3.599075048614e-02 + 1.928000000000e-10 9.946703268478e-02 + 2.028000000000e-10 2.032502871016e-01 + 2.128000000000e-10 2.733994094958e-01 + 2.228000000000e-10 3.172845988123e-01 + 2.328000000000e-10 3.455609123691e-01 + 2.428000000000e-10 3.630923957132e-01 + 2.528000000000e-10 3.534419450967e-01 + 2.628000000000e-10 2.903663934708e-01 + 2.728000000000e-10 1.726743312860e-01 + 2.828000000000e-10 2.930291139472e-02 + 2.928000000000e-10 -1.057514312075e-01 + 3.028000000000e-10 -2.091913834589e-01 + 3.128000000000e-10 -2.784696434768e-01 + 3.228000000000e-10 -3.216873931074e-01 + 3.328000000000e-10 -3.491870426412e-01 + 3.428000000000e-10 -3.662894191498e-01 + 3.528000000000e-10 -3.560374131806e-01 + 3.628000000000e-10 -2.925719059469e-01 + 3.728000000000e-10 -1.742159787839e-01 + 3.828000000000e-10 -3.049391935212e-02 + 3.928000000000e-10 1.049756016137e-01 + 4.028000000000e-10 2.084672065617e-01 + 4.128000000000e-10 2.779301238417e-01 + 4.228000000000e-10 3.211180618030e-01 + 4.328000000000e-10 3.488255023686e-01 + 4.428000000000e-10 3.659572542624e-01 + 4.528000000000e-10 3.559493947967e-01 + 4.628000000000e-10 2.925058094407e-01 + 4.728000000000e-10 1.743267017008e-01 + 4.828000000000e-10 3.054314172764e-02 + 4.928000000000e-10 -1.048175245910e-01 + 5.028000000000e-10 -2.084096499031e-01 + 5.128000000000e-10 -2.777998408986e-01 + 5.228000000000e-10 -3.210985617265e-01 + 5.328000000000e-10 -3.487226120056e-01 + 5.428000000000e-10 -3.659481451181e-01 + 5.528000000000e-10 -3.558482598240e-01 + 5.628000000000e-10 -2.924942070749e-01 + 5.728000000000e-10 -1.742324941843e-01 + 5.828000000000e-10 -3.054486718364e-02 + 5.928000000000e-10 1.048934295445e-01 + 6.028000000000e-10 2.083991544976e-01 + 6.128000000000e-10 2.778660140822e-01 + 6.228000000000e-10 3.210794561497e-01 + 6.328000000000e-10 3.487805773205e-01 + 6.428000000000e-10 3.659226785140e-01 + 6.528000000000e-10 3.558970058340e-01 + 6.628000000000e-10 2.924624137185e-01 + 6.728000000000e-10 1.742748110039e-01 + 6.828000000000e-10 3.050920657876e-02 + 6.928000000000e-10 -1.048562048812e-01 + 7.028000000000e-10 -2.084343791218e-01 + 7.128000000000e-10 -2.778299623633e-01 + 7.228000000000e-10 -3.211147582115e-01 + 7.328000000000e-10 -3.487447461690e-01 + 7.428000000000e-10 -3.659575085549e-01 + 7.528000000000e-10 -3.558632428052e-01 + 7.628000000000e-10 -2.924972481137e-01 + 7.728000000000e-10 -1.742418088753e-01 + 7.828000000000e-10 -3.054328720193e-02 + 7.928000000000e-10 1.048870377838e-01 + 8.028000000000e-10 2.084024115537e-01 + 8.128000000000e-10 2.778603942564e-01 + 8.228000000000e-10 3.210827582845e-01 + 8.328000000000e-10 3.487751488045e-01 + 8.428000000000e-10 3.659266824704e-01 + 8.528000000000e-10 3.558925702991e-01 + 8.628000000000e-10 2.924671830422e-01 + 8.728000000000e-10 1.742711856894e-01 + 8.828000000000e-10 3.051417003050e-02 + 8.928000000000e-10 -1.048591994973e-01 + 9.028000000000e-10 -2.084299430076e-01 + 9.128000000000e-10 -2.778331783696e-01 + 9.228000000000e-10 -3.211104359655e-01 + 9.328000000000e-10 -3.487480244246e-01 + 9.428000000000e-10 -3.659535267111e-01 + 9.528000000000e-10 -3.558663548813e-01 + 9.628000000000e-10 -2.924933270906e-01 + 9.728000000000e-10 -1.742451324195e-01 + 9.828000000000e-10 -3.053963678018e-02 + 9.928000000000e-10 1.048836196344e-01 + 1.000000000000e-09 1.830293824662e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/conditions.yaml new file mode 100644 index 00000000..40accfeb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 3 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_03 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/CML_core_tb.sch new file mode 100644 index 00000000..28f7c28e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/CML_core_tb_4.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/CML_core_tb_4.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/CML_core_tb_4.data new file mode 100644 index 00000000..38ffd8bf --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/CML_core_tb_4.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.689355033953e-01 + 1.728000000000e-10 -1.691728954892e-01 + 1.828000000000e-10 -4.423302134033e-02 + 1.928000000000e-10 7.663444207075e-02 + 2.028000000000e-10 1.714764750752e-01 + 2.128000000000e-10 2.368219567798e-01 + 2.228000000000e-10 2.772768132445e-01 + 2.328000000000e-10 3.013675537348e-01 + 2.428000000000e-10 3.140706479520e-01 + 2.528000000000e-10 3.038549886105e-01 + 2.628000000000e-10 2.508404086347e-01 + 2.728000000000e-10 1.528360605683e-01 + 2.828000000000e-10 3.040034809293e-02 + 2.928000000000e-10 -8.785381094258e-02 + 3.028000000000e-10 -1.808734961109e-01 + 3.128000000000e-10 -2.445795528199e-01 + 3.228000000000e-10 -2.838354337528e-01 + 3.328000000000e-10 -3.065800962400e-01 + 3.428000000000e-10 -3.181767360109e-01 + 3.528000000000e-10 -3.065752663659e-01 + 3.628000000000e-10 -2.523878800401e-01 + 3.728000000000e-10 -1.531173668737e-01 + 3.828000000000e-10 -2.992055538556e-02 + 3.928000000000e-10 8.900435641641e-02 + 4.028000000000e-10 1.821756238512e-01 + 4.128000000000e-10 2.460123650690e-01 + 4.228000000000e-10 2.851182310100e-01 + 4.328000000000e-10 3.079291995556e-01 + 4.428000000000e-10 3.194129911462e-01 + 4.528000000000e-10 3.078915366323e-01 + 4.628000000000e-10 2.535144344421e-01 + 4.728000000000e-10 1.541542026196e-01 + 4.828000000000e-10 3.063651583090e-02 + 4.928000000000e-10 -8.839161491074e-02 + 5.028000000000e-10 -1.817999659778e-01 + 5.128000000000e-10 -2.456456661989e-01 + 5.228000000000e-10 -2.849195350591e-01 + 5.328000000000e-10 -3.077091828990e-01 + 5.428000000000e-10 -3.193505374448e-01 + 5.528000000000e-10 -3.078081521678e-01 + 5.628000000000e-10 -2.535787813503e-01 + 5.728000000000e-10 -1.541764927596e-01 + 5.828000000000e-10 -3.077048554081e-02 + 5.928000000000e-10 8.832790620553e-02 + 6.028000000000e-10 1.816551916875e-01 + 6.128000000000e-10 2.455879975104e-01 + 6.228000000000e-10 2.847911932982e-01 + 6.328000000000e-10 3.076677363016e-01 + 6.428000000000e-10 3.192371229053e-01 + 6.528000000000e-10 3.077778412262e-01 + 6.628000000000e-10 2.534819327505e-01 + 6.728000000000e-10 1.541683138663e-01 + 6.828000000000e-10 3.070155435378e-02 + 6.928000000000e-10 -8.831320560130e-02 + 7.028000000000e-10 -1.817038543937e-01 + 7.128000000000e-10 -2.455619958387e-01 + 7.228000000000e-10 -2.848320347671e-01 + 7.328000000000e-10 -3.076358698550e-01 + 7.428000000000e-10 -3.192710667609e-01 + 7.528000000000e-10 -3.077409972388e-01 + 7.628000000000e-10 -2.535098012890e-01 + 7.728000000000e-10 -1.541282589474e-01 + 7.828000000000e-10 -3.072672689244e-02 + 7.928000000000e-10 8.835148526653e-02 + 8.028000000000e-10 1.816795669555e-01 + 8.128000000000e-10 2.455984246601e-01 + 8.228000000000e-10 2.848062931006e-01 + 8.328000000000e-10 3.076705916890e-01 + 8.428000000000e-10 3.192450073559e-01 + 8.528000000000e-10 3.077736319697e-01 + 8.628000000000e-10 2.534831121829e-01 + 8.728000000000e-10 1.541590953584e-01 + 8.828000000000e-10 3.069946612700e-02 + 8.928000000000e-10 -8.832341199891e-02 + 9.028000000000e-10 -1.817063952021e-01 + 9.128000000000e-10 -2.455714256322e-01 + 9.228000000000e-10 -2.848333922463e-01 + 9.328000000000e-10 -3.076440936715e-01 + 9.428000000000e-10 -3.192716274515e-01 + 9.528000000000e-10 -3.077481608676e-01 + 9.628000000000e-10 -2.535093614867e-01 + 9.728000000000e-10 -1.541340765567e-01 + 9.828000000000e-10 -3.072486745089e-02 + 9.928000000000e-10 8.834711873249e-02 + 1.000000000000e-09 1.586239577417e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/conditions.yaml new file mode 100644 index 00000000..c1562ae5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 4 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_04 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/CML_core_tb.sch new file mode 100644 index 00000000..b143b8ab --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/CML_core_tb_5.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/CML_core_tb_5.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/CML_core_tb_5.data new file mode 100644 index 00000000..b4ed17dd --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/CML_core_tb_5.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.722799425151e-01 + 1.728000000000e-10 -1.701277707773e-01 + 1.828000000000e-10 -4.252496989706e-02 + 1.928000000000e-10 8.092536896213e-02 + 2.028000000000e-10 1.785199933375e-01 + 2.128000000000e-10 2.463984181452e-01 + 2.228000000000e-10 2.885755113271e-01 + 2.328000000000e-10 3.131967480955e-01 + 2.428000000000e-10 3.255285716483e-01 + 2.528000000000e-10 3.143820454109e-01 + 2.628000000000e-10 2.595824958850e-01 + 2.728000000000e-10 1.585585813323e-01 + 2.828000000000e-10 3.254606172598e-02 + 2.928000000000e-10 -8.921916265210e-02 + 3.028000000000e-10 -1.857143058967e-01 + 3.128000000000e-10 -2.524588707093e-01 + 3.228000000000e-10 -2.937876617757e-01 + 3.328000000000e-10 -3.173655773168e-01 + 3.428000000000e-10 -3.288566343508e-01 + 3.528000000000e-10 -3.166123605828e-01 + 3.628000000000e-10 -2.609360611345e-01 + 3.728000000000e-10 -1.589355414621e-01 + 3.828000000000e-10 -3.237621747627e-02 + 3.928000000000e-10 8.990939637816e-02 + 4.028000000000e-10 1.864994737191e-01 + 4.128000000000e-10 2.533636311879e-01 + 4.228000000000e-10 2.945633129641e-01 + 4.328000000000e-10 3.182197832362e-01 + 4.428000000000e-10 3.296245618008e-01 + 4.528000000000e-10 3.174841059207e-01 + 4.628000000000e-10 2.616780558587e-01 + 4.728000000000e-10 1.596622360522e-01 + 4.828000000000e-10 3.287681921596e-02 + 4.928000000000e-10 -8.943999963453e-02 + 5.028000000000e-10 -1.862066308093e-01 + 5.128000000000e-10 -2.530527908612e-01 + 5.228000000000e-10 -2.943931136832e-01 + 5.328000000000e-10 -3.180152021024e-01 + 5.428000000000e-10 -3.295545667130e-01 + 5.528000000000e-10 -3.173812952412e-01 + 5.628000000000e-10 -2.617027726155e-01 + 5.728000000000e-10 -1.596411992093e-01 + 5.828000000000e-10 -3.295895028258e-02 + 5.928000000000e-10 8.942267434718e-02 + 6.028000000000e-10 1.861105403656e-01 + 6.128000000000e-10 2.530344325895e-01 + 6.228000000000e-10 2.943051008579e-01 + 6.328000000000e-10 3.180051485103e-01 + 6.428000000000e-10 3.294737915539e-01 + 6.528000000000e-10 3.173744791022e-01 + 6.628000000000e-10 2.616291881364e-01 + 6.728000000000e-10 1.596450333001e-01 + 6.828000000000e-10 3.290088244348e-02 + 6.928000000000e-10 -8.940659470005e-02 + 7.028000000000e-10 -1.861562133447e-01 + 7.128000000000e-10 -2.530116656482e-01 + 7.228000000000e-10 -2.943454309811e-01 + 7.328000000000e-10 -3.179780561670e-01 + 7.428000000000e-10 -3.295087969733e-01 + 7.528000000000e-10 -3.173438661274e-01 + 7.628000000000e-10 -2.616591955397e-01 + 7.728000000000e-10 -1.596115565426e-01 + 7.828000000000e-10 -3.292790237402e-02 + 7.928000000000e-10 8.943927261705e-02 + 8.028000000000e-10 1.861310420114e-01 + 8.128000000000e-10 2.530433655174e-01 + 8.228000000000e-10 2.943195630770e-01 + 8.328000000000e-10 3.180088285378e-01 + 8.428000000000e-10 3.294832118435e-01 + 8.528000000000e-10 3.173732295072e-01 + 8.628000000000e-10 2.616337486722e-01 + 8.728000000000e-10 1.596399004289e-01 + 8.828000000000e-10 3.290244884503e-02 + 8.928000000000e-10 -8.941301350766e-02 + 9.028000000000e-10 -1.861557185261e-01 + 9.128000000000e-10 -2.530180139920e-01 + 9.228000000000e-10 -2.943444772306e-01 + 9.328000000000e-10 -3.179838696148e-01 + 9.428000000000e-10 -3.295076633013e-01 + 9.528000000000e-10 -3.173492560727e-01 + 9.628000000000e-10 -2.616577755083e-01 + 9.728000000000e-10 -1.596163947717e-01 + 9.828000000000e-10 -3.292583900074e-02 + 9.928000000000e-10 8.943518431692e-02 + 1.000000000000e-09 1.621529465729e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/conditions.yaml new file mode 100644 index 00000000..ae5c0488 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 5 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_05 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/CML_core_tb.sch new file mode 100644 index 00000000..ff91eaf0 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/CML_core_tb_6.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/CML_core_tb_6.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/CML_core_tb_6.data new file mode 100644 index 00000000..6b24d1d6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/CML_core_tb_6.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.622644182692e-01 + 1.728000000000e-10 -1.962653738736e-01 + 1.828000000000e-10 -5.712895575235e-03 + 1.928000000000e-10 1.510345047594e-01 + 2.028000000000e-10 2.432775412534e-01 + 2.128000000000e-10 2.772000132926e-01 + 2.228000000000e-10 3.161630086256e-01 + 2.328000000000e-10 3.654121904616e-01 + 2.428000000000e-10 4.070200809677e-01 + 2.528000000000e-10 4.211809118313e-01 + 2.628000000000e-10 3.552666659990e-01 + 2.728000000000e-10 1.954111420719e-01 + 2.828000000000e-10 7.499275151763e-03 + 2.928000000000e-10 -1.488912332472e-01 + 3.028000000000e-10 -2.420325529570e-01 + 3.128000000000e-10 -2.768171400503e-01 + 3.228000000000e-10 -3.164103191401e-01 + 3.328000000000e-10 -3.656815561297e-01 + 3.428000000000e-10 -4.072561733660e-01 + 3.528000000000e-10 -4.210637971044e-01 + 3.628000000000e-10 -3.548415521036e-01 + 3.728000000000e-10 -1.946286859654e-01 + 3.828000000000e-10 -6.746438981043e-03 + 3.928000000000e-10 1.496127957227e-01 + 4.028000000000e-10 2.425057762271e-01 + 4.128000000000e-10 2.772590268750e-01 + 4.228000000000e-10 3.167075169816e-01 + 4.328000000000e-10 3.660182242119e-01 + 4.428000000000e-10 4.074726111052e-01 + 4.528000000000e-10 4.212975956202e-01 + 4.628000000000e-10 3.549573822535e-01 + 4.728000000000e-10 1.947835560361e-01 + 4.828000000000e-10 6.801482567115e-03 + 4.928000000000e-10 -1.495086456760e-01 + 5.028000000000e-10 -2.424863730465e-01 + 5.128000000000e-10 -2.771744431737e-01 + 5.228000000000e-10 -3.166940000076e-01 + 5.328000000000e-10 -3.659398771497e-01 + 5.428000000000e-10 -4.074689465730e-01 + 5.528000000000e-10 -4.212394549000e-01 + 5.628000000000e-10 -3.549741510035e-01 + 5.728000000000e-10 -1.947436351784e-01 + 5.828000000000e-10 -6.830080160870e-03 + 5.928000000000e-10 1.495407150967e-01 + 6.028000000000e-10 2.424570295697e-01 + 6.128000000000e-10 2.772066160972e-01 + 6.228000000000e-10 3.166654934082e-01 + 6.328000000000e-10 3.659723864247e-01 + 6.428000000000e-10 4.074416211051e-01 + 6.528000000000e-10 4.212697301261e-01 + 6.628000000000e-10 3.549467093259e-01 + 6.728000000000e-10 1.947718238583e-01 + 6.828000000000e-10 6.800951177238e-03 + 6.928000000000e-10 -1.495148390529e-01 + 7.028000000000e-10 -2.424852043575e-01 + 7.128000000000e-10 -2.771809105751e-01 + 7.228000000000e-10 -3.166930947909e-01 + 7.328000000000e-10 -3.659459016360e-01 + 7.428000000000e-10 -4.074677461547e-01 + 7.528000000000e-10 -4.212442717757e-01 + 7.628000000000e-10 -3.549717520551e-01 + 7.728000000000e-10 -1.947463263521e-01 + 7.828000000000e-10 -6.825916545420e-03 + 7.928000000000e-10 1.495385751436e-01 + 8.028000000000e-10 2.424609931904e-01 + 8.128000000000e-10 2.772040406871e-01 + 8.228000000000e-10 3.166687905139e-01 + 8.328000000000e-10 3.659694951712e-01 + 8.428000000000e-10 4.074447010218e-01 + 8.528000000000e-10 4.212671408417e-01 + 8.628000000000e-10 3.549498827484e-01 + 8.728000000000e-10 1.947689363825e-01 + 8.828000000000e-10 6.803756635994e-03 + 8.928000000000e-10 -1.495176738691e-01 + 9.028000000000e-10 -2.424825342063e-01 + 9.128000000000e-10 -2.771836734306e-01 + 9.228000000000e-10 -3.166902103892e-01 + 9.328000000000e-10 -3.659485359213e-01 + 9.428000000000e-10 -4.074650210911e-01 + 9.528000000000e-10 -4.212469657833e-01 + 9.628000000000e-10 -3.549694058275e-01 + 9.728000000000e-10 -1.947487958951e-01 + 9.828000000000e-10 -6.823236278537e-03 + 9.928000000000e-10 1.495363177485e-01 + 1.000000000000e-09 2.250264100511e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/conditions.yaml new file mode 100644 index 00000000..e20b175a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 6 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_06 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/CML_core_tb.sch new file mode 100644 index 00000000..f2ee83e7 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/CML_core_tb_7.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/CML_core_tb_7.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/CML_core_tb_7.data new file mode 100644 index 00000000..1453012b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/CML_core_tb_7.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.668500025046e-01 + 1.728000000000e-10 -1.978704758130e-01 + 1.828000000000e-10 -3.069550951996e-03 + 1.928000000000e-10 1.561389387989e-01 + 2.028000000000e-10 2.488697408913e-01 + 2.128000000000e-10 2.833379270136e-01 + 2.228000000000e-10 3.221467647695e-01 + 2.328000000000e-10 3.723176028273e-01 + 2.428000000000e-10 4.147931582649e-01 + 2.528000000000e-10 4.286646301121e-01 + 2.628000000000e-10 3.614677855799e-01 + 2.728000000000e-10 1.982726052647e-01 + 2.828000000000e-10 5.580533140739e-03 + 2.928000000000e-10 -1.536551403474e-01 + 3.028000000000e-10 -2.474729097395e-01 + 3.128000000000e-10 -2.827981749211e-01 + 3.228000000000e-10 -3.222400643179e-01 + 3.328000000000e-10 -3.724510578191e-01 + 3.428000000000e-10 -4.149487937489e-01 + 3.528000000000e-10 -4.285094572794e-01 + 3.628000000000e-10 -3.610716711123e-01 + 3.728000000000e-10 -1.975613483211e-01 + 3.828000000000e-10 -4.936396792217e-03 + 3.928000000000e-10 1.542720670721e-01 + 4.028000000000e-10 2.478554934965e-01 + 4.128000000000e-10 2.831768205427e-01 + 4.228000000000e-10 3.224764565266e-01 + 4.328000000000e-10 3.727376628527e-01 + 4.428000000000e-10 4.151128450004e-01 + 4.528000000000e-10 4.287030398326e-01 + 4.628000000000e-10 3.611465460996e-01 + 4.728000000000e-10 1.976871290976e-01 + 4.828000000000e-10 4.962067120498e-03 + 4.928000000000e-10 -1.541857483448e-01 + 5.028000000000e-10 -2.478549856990e-01 + 5.128000000000e-10 -2.831031432303e-01 + 5.228000000000e-10 -3.224786212940e-01 + 5.328000000000e-10 -3.726675199031e-01 + 5.428000000000e-10 -4.151222726988e-01 + 5.528000000000e-10 -4.286496175832e-01 + 5.628000000000e-10 -3.611719348809e-01 + 5.728000000000e-10 -1.976471175954e-01 + 5.828000000000e-10 -4.995016715658e-03 + 5.928000000000e-10 1.542195273485e-01 + 6.028000000000e-10 2.478226151197e-01 + 6.128000000000e-10 2.831371441394e-01 + 6.228000000000e-10 3.224465270882e-01 + 6.328000000000e-10 3.727020829784e-01 + 6.428000000000e-10 4.150919188021e-01 + 6.528000000000e-10 4.286821395136e-01 + 6.628000000000e-10 3.611419365066e-01 + 6.728000000000e-10 1.976777927703e-01 + 6.828000000000e-10 4.963507878799e-03 + 6.928000000000e-10 -1.541913949207e-01 + 7.028000000000e-10 -2.478529800499e-01 + 7.128000000000e-10 -2.831092109235e-01 + 7.228000000000e-10 -3.224762894768e-01 + 7.328000000000e-10 -3.726728668334e-01 + 7.428000000000e-10 -4.151201370880e-01 + 7.528000000000e-10 -4.286543531433e-01 + 7.628000000000e-10 -3.611692599178e-01 + 7.728000000000e-10 -1.976499135935e-01 + 7.828000000000e-10 -4.990471824028e-03 + 7.928000000000e-10 1.542171227717e-01 + 8.028000000000e-10 2.478269854332e-01 + 8.128000000000e-10 2.831343470853e-01 + 8.228000000000e-10 3.224500362551e-01 + 8.328000000000e-10 3.726987138014e-01 + 8.428000000000e-10 4.150953468135e-01 + 8.528000000000e-10 4.286792233560e-01 + 8.628000000000e-10 3.611455588852e-01 + 8.728000000000e-10 1.976743961081e-01 + 8.828000000000e-10 4.966432661841e-03 + 8.928000000000e-10 -1.541946484524e-01 + 9.028000000000e-10 -2.478502288236e-01 + 9.128000000000e-10 -2.831123474050e-01 + 9.228000000000e-10 -3.224731331421e-01 + 9.328000000000e-10 -3.726757720747e-01 + 9.428000000000e-10 -4.151172388981e-01 + 9.528000000000e-10 -4.286573581279e-01 + 9.628000000000e-10 -3.611667698498e-01 + 9.728000000000e-10 -1.976525646923e-01 + 9.828000000000e-10 -4.987471597641e-03 + 9.928000000000e-10 1.542147143463e-01 + 1.000000000000e-09 2.301006397866e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/conditions.yaml new file mode 100644 index 00000000..a6f6017c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 7 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_07 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/CML_core_tb.sch new file mode 100644 index 00000000..02c1ba11 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/CML_core_tb_8.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/CML_core_tb_8.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/CML_core_tb_8.data new file mode 100644 index 00000000..3b0782c6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/CML_core_tb_8.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.388323931118e-01 + 1.728000000000e-10 -1.851651732117e-01 + 1.828000000000e-10 -4.985209728467e-03 + 1.928000000000e-10 1.464303664236e-01 + 2.028000000000e-10 2.390890865534e-01 + 2.128000000000e-10 2.778147857521e-01 + 2.228000000000e-10 3.140298283994e-01 + 2.328000000000e-10 3.564486269316e-01 + 2.428000000000e-10 3.920777300126e-01 + 2.528000000000e-10 4.026431485981e-01 + 2.628000000000e-10 3.407818057760e-01 + 2.728000000000e-10 1.919413521399e-01 + 2.828000000000e-10 1.380608162301e-02 + 2.928000000000e-10 -1.377275777470e-01 + 3.028000000000e-10 -2.320727525709e-01 + 3.128000000000e-10 -2.723718882130e-01 + 3.228000000000e-10 -3.097195919600e-01 + 3.328000000000e-10 -3.525356430610e-01 + 3.428000000000e-10 -3.885938438581e-01 + 3.528000000000e-10 -3.995683250409e-01 + 3.628000000000e-10 -3.382392747069e-01 + 3.728000000000e-10 -1.897685835172e-01 + 3.828000000000e-10 -1.211190537496e-02 + 3.928000000000e-10 1.391365825109e-01 + 4.028000000000e-10 2.331433172305e-01 + 4.128000000000e-10 2.733678679410e-01 + 4.228000000000e-10 3.105714733021e-01 + 4.328000000000e-10 3.533708758772e-01 + 4.428000000000e-10 3.892622592719e-01 + 4.528000000000e-10 4.001272859757e-01 + 4.628000000000e-10 3.385642563623e-01 + 4.728000000000e-10 1.899916781684e-01 + 4.828000000000e-10 1.218033620775e-02 + 4.928000000000e-10 -1.390656421002e-01 + 5.028000000000e-10 -2.331398693887e-01 + 5.128000000000e-10 -2.733037181082e-01 + 5.228000000000e-10 -3.105518491305e-01 + 5.328000000000e-10 -3.533032068815e-01 + 5.428000000000e-10 -3.892531494066e-01 + 5.528000000000e-10 -4.000849100741e-01 + 5.628000000000e-10 -3.385845178207e-01 + 5.728000000000e-10 -1.899774211598e-01 + 5.828000000000e-10 -1.221996984529e-02 + 5.928000000000e-10 1.390720456320e-01 + 6.028000000000e-10 2.331027694491e-01 + 6.128000000000e-10 2.733156842718e-01 + 6.228000000000e-10 3.105197170718e-01 + 6.328000000000e-10 3.533171034352e-01 + 6.428000000000e-10 3.892243222051e-01 + 6.528000000000e-10 4.000997182403e-01 + 6.628000000000e-10 3.385594083538e-01 + 6.728000000000e-10 1.899934277570e-01 + 6.828000000000e-10 1.219466050150e-02 + 6.928000000000e-10 -1.390553921853e-01 + 7.028000000000e-10 -2.331263672195e-01 + 7.128000000000e-10 -2.732987102222e-01 + 7.228000000000e-10 -3.105421090081e-01 + 7.328000000000e-10 -3.532994962925e-01 + 7.428000000000e-10 -3.892451651423e-01 + 7.528000000000e-10 -4.000824543639e-01 + 7.628000000000e-10 -3.385783830881e-01 + 7.728000000000e-10 -1.899748483052e-01 + 7.828000000000e-10 -1.221334688082e-02 + 7.928000000000e-10 1.390733351530e-01 + 8.028000000000e-10 2.331082732353e-01 + 8.128000000000e-10 2.733160005972e-01 + 8.228000000000e-10 3.105237742784e-01 + 8.328000000000e-10 3.533165556732e-01 + 8.428000000000e-10 3.892279285214e-01 + 8.528000000000e-10 4.000991009611e-01 + 8.628000000000e-10 3.385625511294e-01 + 8.728000000000e-10 1.899914169425e-01 + 8.828000000000e-10 1.219669858142e-02 + 8.928000000000e-10 -1.390576717936e-01 + 9.028000000000e-10 -2.331245304799e-01 + 9.128000000000e-10 -2.733009677599e-01 + 9.228000000000e-10 -3.105397739050e-01 + 9.328000000000e-10 -3.533012749995e-01 + 9.428000000000e-10 -3.892430673555e-01 + 9.528000000000e-10 -4.000844420176e-01 + 9.628000000000e-10 -3.385768441038e-01 + 9.728000000000e-10 -1.899764612955e-01 + 9.828000000000e-10 -1.221122328152e-02 + 9.928000000000e-10 1.390717643268e-01 + 1.000000000000e-09 2.142511381663e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/conditions.yaml new file mode 100644 index 00000000..1d7df575 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 8 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_08 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/CML_core_tb.sch new file mode 100644 index 00000000..bb89ef86 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/CML_core_tb_9.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/CML_core_tb_9.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/CML_core_tb_9.data new file mode 100644 index 00000000..73c31d13 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/CML_core_tb_9.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.445927026449e-01 + 1.728000000000e-10 -1.889320969581e-01 + 1.828000000000e-10 -5.355234564888e-03 + 1.928000000000e-10 1.489911128277e-01 + 2.028000000000e-10 2.434822449071e-01 + 2.128000000000e-10 2.838702060450e-01 + 2.228000000000e-10 3.202156401988e-01 + 2.328000000000e-10 3.629401474789e-01 + 2.428000000000e-10 3.990998051164e-01 + 2.528000000000e-10 4.099063275401e-01 + 2.628000000000e-10 3.477923521709e-01 + 2.728000000000e-10 1.968519788675e-01 + 2.828000000000e-10 1.493750763318e-02 + 2.928000000000e-10 -1.398437743336e-01 + 3.028000000000e-10 -2.362338093992e-01 + 3.128000000000e-10 -2.782887085314e-01 + 3.228000000000e-10 -3.158910292643e-01 + 3.328000000000e-10 -3.590893499920e-01 + 3.428000000000e-10 -3.957248346768e-01 + 3.528000000000e-10 -4.069627998073e-01 + 3.628000000000e-10 -3.454070734708e-01 + 3.728000000000e-10 -1.948243362004e-01 + 3.828000000000e-10 -1.337926088934e-02 + 3.928000000000e-10 1.411472162204e-01 + 4.028000000000e-10 2.372231231196e-01 + 4.128000000000e-10 2.792284454069e-01 + 4.228000000000e-10 3.166817589057e-01 + 4.328000000000e-10 3.598702175634e-01 + 4.428000000000e-10 3.963375250752e-01 + 4.528000000000e-10 4.074753309124e-01 + 4.628000000000e-10 3.456854225481e-01 + 4.728000000000e-10 1.950177434222e-01 + 4.828000000000e-10 1.342430394201e-02 + 4.928000000000e-10 -1.410850608466e-01 + 5.028000000000e-10 -2.372286880899e-01 + 5.128000000000e-10 -2.791659662153e-01 + 5.228000000000e-10 -3.166689293508e-01 + 5.328000000000e-10 -3.598026374101e-01 + 5.428000000000e-10 -3.963331138013e-01 + 5.528000000000e-10 -4.074316676804e-01 + 5.628000000000e-10 -3.457088001737e-01 + 5.728000000000e-10 -1.950000158899e-01 + 5.828000000000e-10 -1.346504722293e-02 + 5.928000000000e-10 1.410957635246e-01 + 6.028000000000e-10 2.371909425038e-01 + 6.128000000000e-10 2.791817404178e-01 + 6.228000000000e-10 3.166356138828e-01 + 6.328000000000e-10 3.598203377806e-01 + 6.428000000000e-10 3.963033609435e-01 + 6.528000000000e-10 4.074499160221e-01 + 6.628000000000e-10 3.456826167292e-01 + 6.728000000000e-10 1.950190841630e-01 + 6.828000000000e-10 1.343803454206e-02 + 6.928000000000e-10 -1.410764950259e-01 + 7.028000000000e-10 -2.372163265848e-01 + 7.128000000000e-10 -2.791624229651e-01 + 7.228000000000e-10 -3.166599225368e-01 + 7.328000000000e-10 -3.598002455584e-01 + 7.428000000000e-10 -3.963259615583e-01 + 7.528000000000e-10 -4.074304662079e-01 + 7.628000000000e-10 -3.457033629648e-01 + 7.728000000000e-10 -1.949983704767e-01 + 7.828000000000e-10 -1.345872104163e-02 + 7.928000000000e-10 1.410962716693e-01 + 8.028000000000e-10 2.371963808526e-01 + 8.128000000000e-10 2.791814500218e-01 + 8.228000000000e-10 3.166396456569e-01 + 8.328000000000e-10 3.598191409746e-01 + 8.428000000000e-10 3.963069790813e-01 + 8.528000000000e-10 4.074488078929e-01 + 8.628000000000e-10 3.456858987705e-01 + 8.728000000000e-10 1.950166421641e-01 + 8.828000000000e-10 1.344025602045e-02 + 8.928000000000e-10 -1.410790665154e-01 + 9.028000000000e-10 -2.372142995262e-01 + 9.128000000000e-10 -2.791649325552e-01 + 9.228000000000e-10 -3.166573514474e-01 + 9.328000000000e-10 -3.598022359716e-01 + 9.428000000000e-10 -3.963236588924e-01 + 9.528000000000e-10 -4.074326778223e-01 + 9.628000000000e-10 -3.457016440453e-01 + 9.728000000000e-10 -1.950001702792e-01 + 9.828000000000e-10 -1.345633761364e-02 + 9.928000000000e-10 1.410945129066e-01 + 1.000000000000e-09 2.176807579100e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/conditions.yaml new file mode 100644 index 00000000..af466938 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 9 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_09 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/CML_core_tb.sch new file mode 100644 index 00000000..d8afeb55 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/CML_core_tb_10.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/CML_core_tb_10.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/CML_core_tb_10.data new file mode 100644 index 00000000..6f87c434 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/CML_core_tb_10.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.831577979118e-01 + 1.728000000000e-10 -1.548331321524e-01 + 1.828000000000e-10 2.954507991941e-03 + 1.928000000000e-10 1.412083661187e-01 + 2.028000000000e-10 2.303947789211e-01 + 2.128000000000e-10 2.725788032239e-01 + 2.228000000000e-10 3.064646814943e-01 + 2.328000000000e-10 3.412898568956e-01 + 2.428000000000e-10 3.692979025942e-01 + 2.528000000000e-10 3.751979264520e-01 + 2.628000000000e-10 3.186495551608e-01 + 2.728000000000e-10 1.849115684226e-01 + 2.828000000000e-10 2.146912258403e-02 + 2.928000000000e-10 -1.215319416200e-01 + 3.028000000000e-10 -2.147336364713e-01 + 3.128000000000e-10 -2.593628319189e-01 + 3.228000000000e-10 -2.947919001104e-01 + 3.328000000000e-10 -3.306034656465e-01 + 3.428000000000e-10 -3.598903423599e-01 + 3.528000000000e-10 -3.674806029527e-01 + 3.628000000000e-10 -3.131864519443e-01 + 3.728000000000e-10 -1.816607205648e-01 + 3.828000000000e-10 -2.002885045896e-02 + 3.928000000000e-10 1.219326732879e-01 + 4.028000000000e-10 2.146583452252e-01 + 4.128000000000e-10 2.593288859790e-01 + 4.228000000000e-10 2.947836961551e-01 + 4.328000000000e-10 3.305873089453e-01 + 4.428000000000e-10 3.597520160348e-01 + 4.528000000000e-10 3.672634041173e-01 + 4.628000000000e-10 3.128292575731e-01 + 4.728000000000e-10 1.812525079401e-01 + 4.828000000000e-10 1.956255085056e-02 + 4.928000000000e-10 -1.223539241893e-01 + 5.028000000000e-10 -2.150587893921e-01 + 5.128000000000e-10 -2.596440912838e-01 + 5.228000000000e-10 -2.950896959018e-01 + 5.328000000000e-10 -3.308452440946e-01 + 5.428000000000e-10 -3.600168265621e-01 + 5.528000000000e-10 -3.674687038170e-01 + 5.628000000000e-10 -3.130140501398e-01 + 5.728000000000e-10 -1.813584327872e-01 + 5.828000000000e-10 -1.965159115909e-02 + 5.928000000000e-10 1.223212864923e-01 + 6.028000000000e-10 2.150157103205e-01 + 6.128000000000e-10 2.596318060931e-01 + 6.228000000000e-10 2.950524078153e-01 + 6.328000000000e-10 3.308363963911e-01 + 6.428000000000e-10 3.599874022300e-01 + 6.528000000000e-10 3.674690181116e-01 + 6.628000000000e-10 3.129980588961e-01 + 6.728000000000e-10 1.813712653368e-01 + 6.828000000000e-10 1.964491680526e-02 + 6.928000000000e-10 -1.223023112353e-01 + 7.028000000000e-10 -2.150202483004e-01 + 7.128000000000e-10 -2.596144309164e-01 + 7.228000000000e-10 -2.950582886643e-01 + 7.328000000000e-10 -3.308199600200e-01 + 7.428000000000e-10 -3.599931640339e-01 + 7.528000000000e-10 -3.674538095645e-01 + 7.628000000000e-10 -3.130042913922e-01 + 7.728000000000e-10 -1.813570925598e-01 + 7.828000000000e-10 -1.965290666609e-02 + 7.928000000000e-10 1.223145971689e-01 + 8.028000000000e-10 2.150114430495e-01 + 8.128000000000e-10 2.596256780136e-01 + 8.228000000000e-10 2.950490452158e-01 + 8.328000000000e-10 3.308307530718e-01 + 8.428000000000e-10 3.599842799802e-01 + 8.528000000000e-10 3.674639698479e-01 + 8.628000000000e-10 3.129957925611e-01 + 8.728000000000e-10 1.813666711568e-01 + 8.828000000000e-10 1.964348030724e-02 + 8.928000000000e-10 -1.223056361887e-01 + 9.028000000000e-10 -2.150207890100e-01 + 9.128000000000e-10 -2.596171721225e-01 + 9.228000000000e-10 -2.950581404305e-01 + 9.328000000000e-10 -3.308221104591e-01 + 9.428000000000e-10 -3.599929167296e-01 + 9.528000000000e-10 -3.674557320782e-01 + 9.628000000000e-10 -3.130039671541e-01 + 9.728000000000e-10 -1.813582011282e-01 + 9.828000000000e-10 -1.965175786777e-02 + 9.928000000000e-10 1.223137237372e-01 + 1.000000000000e-09 1.953703252853e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/conditions.yaml new file mode 100644 index 00000000..d2d42923 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 10 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_10 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/CML_core_tb.sch new file mode 100644 index 00000000..b8b739db --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/CML_core_tb_11.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/CML_core_tb_11.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/CML_core_tb_11.data new file mode 100644 index 00000000..1e62d263 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/CML_core_tb_11.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.857852225245e-01 + 1.728000000000e-10 -1.572533595452e-01 + 1.828000000000e-10 2.540381659783e-03 + 1.928000000000e-10 1.434374080790e-01 + 2.028000000000e-10 2.351272809546e-01 + 2.128000000000e-10 2.797956268783e-01 + 2.228000000000e-10 3.144243918962e-01 + 2.328000000000e-10 3.493618787392e-01 + 2.428000000000e-10 3.773715695689e-01 + 2.528000000000e-10 3.831823569325e-01 + 2.628000000000e-10 3.264482498061e-01 + 2.728000000000e-10 1.910530045686e-01 + 2.828000000000e-10 2.436059711742e-02 + 2.928000000000e-10 -1.220220612332e-01 + 3.028000000000e-10 -2.180809390746e-01 + 3.128000000000e-10 -2.653775774444e-01 + 3.228000000000e-10 -3.017848824321e-01 + 3.328000000000e-10 -3.379021858146e-01 + 3.428000000000e-10 -3.673696540777e-01 + 3.528000000000e-10 -3.751149757425e-01 + 3.628000000000e-10 -3.209083740174e-01 + 3.728000000000e-10 -1.878979131572e-01 + 3.828000000000e-10 -2.307531260616e-02 + 3.928000000000e-10 1.222703025101e-01 + 4.028000000000e-10 2.179003509445e-01 + 4.128000000000e-10 2.652908784701e-01 + 4.228000000000e-10 3.017672646237e-01 + 4.328000000000e-10 3.378931599738e-01 + 4.428000000000e-10 3.672390198172e-01 + 4.528000000000e-10 3.748903812400e-01 + 4.628000000000e-10 3.205316331029e-01 + 4.728000000000e-10 1.874647700937e-01 + 4.828000000000e-10 2.258819957166e-02 + 4.928000000000e-10 -1.227112688171e-01 + 5.028000000000e-10 -2.183172764214e-01 + 5.128000000000e-10 -2.656203742551e-01 + 5.228000000000e-10 -3.020800906145e-01 + 5.328000000000e-10 -3.381553362553e-01 + 5.428000000000e-10 -3.675051891202e-01 + 5.528000000000e-10 -3.750972240389e-01 + 5.628000000000e-10 -3.207148935088e-01 + 5.728000000000e-10 -1.875700292984e-01 + 5.828000000000e-10 -2.267596999196e-02 + 5.928000000000e-10 1.226776663562e-01 + 6.028000000000e-10 2.182733434309e-01 + 6.128000000000e-10 2.656053081095e-01 + 6.228000000000e-10 3.020411985396e-01 + 6.328000000000e-10 3.381435634392e-01 + 6.428000000000e-10 3.674743818406e-01 + 6.528000000000e-10 3.750952532513e-01 + 6.628000000000e-10 3.206986438750e-01 + 6.728000000000e-10 1.875816736609e-01 + 6.828000000000e-10 2.266940437016e-02 + 6.928000000000e-10 -1.226596158426e-01 + 7.028000000000e-10 -2.182776851932e-01 + 7.128000000000e-10 -2.655888997029e-01 + 7.228000000000e-10 -3.020470638059e-01 + 7.328000000000e-10 -3.381282771084e-01 + 7.428000000000e-10 -3.674800981492e-01 + 7.528000000000e-10 -3.750811166601e-01 + 7.628000000000e-10 -3.207046174850e-01 + 7.728000000000e-10 -1.875682790354e-01 + 7.828000000000e-10 -2.267703281628e-02 + 7.928000000000e-10 1.226713327530e-01 + 8.028000000000e-10 2.182693863135e-01 + 8.128000000000e-10 2.655996099454e-01 + 8.228000000000e-10 3.020383466326e-01 + 8.328000000000e-10 3.381385294735e-01 + 8.428000000000e-10 3.674717742910e-01 + 8.528000000000e-10 3.750907045119e-01 + 8.628000000000e-10 3.206966644115e-01 + 8.728000000000e-10 1.875773616331e-01 + 8.828000000000e-10 2.266807684955e-02 + 8.928000000000e-10 -1.226628120211e-01 + 9.028000000000e-10 -2.182782381400e-01 + 9.128000000000e-10 -2.655915506047e-01 + 9.228000000000e-10 -3.020469590318e-01 + 9.328000000000e-10 -3.381303351991e-01 + 9.428000000000e-10 -3.674798958779e-01 + 9.528000000000e-10 -3.750829516380e-01 + 9.628000000000e-10 -3.207043265993e-01 + 9.728000000000e-10 -1.875693454762e-01 + 9.828000000000e-10 -2.267594148777e-02 + 9.928000000000e-10 1.226704651969e-01 + 1.000000000000e-09 1.977257563344e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/conditions.yaml new file mode 100644 index 00000000..eaf144f1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 11 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_11 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/CML_core_tb.sch new file mode 100644 index 00000000..263af6d1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/CML_core_tb_12.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/CML_core_tb_12.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/CML_core_tb_12.data new file mode 100644 index 00000000..16422ca1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/CML_core_tb_12.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.213526702696e-01 + 1.728000000000e-10 -1.557909441213e-01 + 1.828000000000e-10 3.476956205809e-02 + 1.928000000000e-10 1.811250151598e-01 + 2.028000000000e-10 2.596166993269e-01 + 2.128000000000e-10 2.853727091731e-01 + 2.228000000000e-10 3.254453264627e-01 + 2.328000000000e-10 3.792799604087e-01 + 2.428000000000e-10 4.176388066249e-01 + 2.528000000000e-10 4.205544301124e-01 + 2.628000000000e-10 3.463528198985e-01 + 2.728000000000e-10 1.792096076204e-01 + 2.828000000000e-10 -1.442396833933e-02 + 2.928000000000e-10 -1.649237711275e-01 + 3.028000000000e-10 -2.471596975948e-01 + 3.128000000000e-10 -2.748735614517e-01 + 3.228000000000e-10 -3.160128767795e-01 + 3.328000000000e-10 -3.707930594343e-01 + 3.428000000000e-10 -4.104823651943e-01 + 3.528000000000e-10 -4.153692056047e-01 + 3.628000000000e-10 -3.427931169871e-01 + 3.728000000000e-10 -1.769552164151e-01 + 3.828000000000e-10 1.590673093360e-02 + 3.928000000000e-10 1.658834812043e-01 + 4.028000000000e-10 2.479775600913e-01 + 4.128000000000e-10 2.756409688001e-01 + 4.228000000000e-10 3.168596600790e-01 + 4.328000000000e-10 3.715133147191e-01 + 4.428000000000e-10 4.111218222953e-01 + 4.528000000000e-10 4.157229971644e-01 + 4.628000000000e-10 3.430019798682e-01 + 4.728000000000e-10 1.769456026445e-01 + 4.828000000000e-10 -1.592886494610e-02 + 4.928000000000e-10 -1.659782283296e-01 + 5.028000000000e-10 -2.479947853664e-01 + 5.128000000000e-10 -2.756931315881e-01 + 5.228000000000e-10 -3.168416717549e-01 + 5.328000000000e-10 -3.715547211919e-01 + 5.428000000000e-10 -4.111034138799e-01 + 5.528000000000e-10 -4.157691346087e-01 + 5.628000000000e-10 -3.429925568898e-01 + 5.728000000000e-10 -1.770024985869e-01 + 5.828000000000e-10 1.592938202906e-02 + 5.928000000000e-10 1.659292038608e-01 + 6.028000000000e-10 2.480043512000e-01 + 6.128000000000e-10 2.756533285421e-01 + 6.228000000000e-10 3.168576585763e-01 + 6.328000000000e-10 3.715156583068e-01 + 6.428000000000e-10 4.111207690964e-01 + 6.528000000000e-10 4.157343976531e-01 + 6.628000000000e-10 3.430135347581e-01 + 6.728000000000e-10 1.769734665185e-01 + 6.828000000000e-10 -1.590652763180e-02 + 6.928000000000e-10 -1.659537152419e-01 + 7.028000000000e-10 -2.479812550746e-01 + 7.128000000000e-10 -2.756768834918e-01 + 7.228000000000e-10 -3.168350969677e-01 + 7.328000000000e-10 -3.715419152243e-01 + 7.428000000000e-10 -4.110983779981e-01 + 7.528000000000e-10 -4.157587194411e-01 + 7.628000000000e-10 -3.429901444601e-01 + 7.728000000000e-10 -1.769973775521e-01 + 7.828000000000e-10 1.592723735432e-02 + 7.928000000000e-10 1.659318535084e-01 + 8.028000000000e-10 2.480017799848e-01 + 8.128000000000e-10 2.756559811492e-01 + 8.228000000000e-10 3.168566227283e-01 + 8.328000000000e-10 3.715195500188e-01 + 8.428000000000e-10 4.111190536097e-01 + 8.528000000000e-10 4.157370668569e-01 + 8.628000000000e-10 3.430103710665e-01 + 8.728000000000e-10 1.769771675859e-01 + 8.828000000000e-10 -1.590770493918e-02 + 8.928000000000e-10 -1.659501582149e-01 + 9.028000000000e-10 -2.479827571068e-01 + 9.128000000000e-10 -2.756738772283e-01 + 9.228000000000e-10 -3.168377001445e-01 + 9.328000000000e-10 -3.715391180409e-01 + 9.428000000000e-10 -4.111007797151e-01 + 9.528000000000e-10 -4.157556639381e-01 + 9.628000000000e-10 -3.429919881202e-01 + 9.728000000000e-10 -1.769955652012e-01 + 9.828000000000e-10 1.592430721908e-02 + 9.928000000000e-10 1.659331850974e-01 + 1.000000000000e-09 2.332140069758e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/conditions.yaml new file mode 100644 index 00000000..3b43cbad --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 12 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_12 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/CML_core_tb.sch new file mode 100644 index 00000000..d1cccfba --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/CML_core_tb_13.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/CML_core_tb_13.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/CML_core_tb_13.data new file mode 100644 index 00000000..3dfcf241 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/CML_core_tb_13.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.365386572536e-01 + 1.728000000000e-10 -1.657072094068e-01 + 1.828000000000e-10 3.099865584261e-02 + 1.928000000000e-10 1.820426436768e-01 + 2.028000000000e-10 2.627018214462e-01 + 2.128000000000e-10 2.893736945719e-01 + 2.228000000000e-10 3.287984169352e-01 + 2.328000000000e-10 3.833334317825e-01 + 2.428000000000e-10 4.238785365972e-01 + 2.528000000000e-10 4.280322768716e-01 + 2.628000000000e-10 3.532409470363e-01 + 2.728000000000e-10 1.834641899168e-01 + 2.828000000000e-10 -1.474496205711e-02 + 2.928000000000e-10 -1.691349612478e-01 + 3.028000000000e-10 -2.530204867896e-01 + 3.128000000000e-10 -2.814070764654e-01 + 3.228000000000e-10 -3.218416847899e-01 + 3.328000000000e-10 -3.771799136100e-01 + 3.428000000000e-10 -4.187055626636e-01 + 3.528000000000e-10 -4.243036771430e-01 + 3.628000000000e-10 -3.506062035467e-01 + 3.728000000000e-10 -1.816763297909e-01 + 3.828000000000e-10 1.601938741723e-02 + 3.928000000000e-10 1.700087907901e-01 + 4.028000000000e-10 2.537596951165e-01 + 4.128000000000e-10 2.820887501770e-01 + 4.228000000000e-10 3.225625541805e-01 + 4.328000000000e-10 3.777928583784e-01 + 4.428000000000e-10 4.192485534625e-01 + 4.528000000000e-10 4.246080285894e-01 + 4.628000000000e-10 3.507916132015e-01 + 4.728000000000e-10 1.816929452641e-01 + 4.828000000000e-10 -1.601075067965e-02 + 4.928000000000e-10 -1.700562644838e-01 + 5.028000000000e-10 -2.537513990380e-01 + 5.128000000000e-10 -2.821086741965e-01 + 5.228000000000e-10 -3.225309737549e-01 + 5.328000000000e-10 -3.778081660132e-01 + 5.428000000000e-10 -4.192196231589e-01 + 5.528000000000e-10 -4.246325132019e-01 + 5.628000000000e-10 -3.507765562578e-01 + 5.728000000000e-10 -1.817315603141e-01 + 5.828000000000e-10 1.601468821266e-02 + 5.928000000000e-10 1.700220210141e-01 + 6.028000000000e-10 2.537612841477e-01 + 6.128000000000e-10 2.820810469197e-01 + 6.228000000000e-10 3.225454957468e-01 + 6.328000000000e-10 3.777800822765e-01 + 6.428000000000e-10 4.192350742948e-01 + 6.528000000000e-10 4.246071005326e-01 + 6.628000000000e-10 3.507940665347e-01 + 6.728000000000e-10 1.817094337521e-01 + 6.828000000000e-10 -1.599736953115e-02 + 6.928000000000e-10 -1.700405869499e-01 + 7.028000000000e-10 -2.537437685408e-01 + 7.128000000000e-10 -2.820988428465e-01 + 7.228000000000e-10 -3.225283133162e-01 + 7.328000000000e-10 -3.778004844844e-01 + 7.428000000000e-10 -4.192180216890e-01 + 7.528000000000e-10 -4.246257635725e-01 + 7.628000000000e-10 -3.507760422929e-01 + 7.728000000000e-10 -1.817278922025e-01 + 7.828000000000e-10 1.601285231965e-02 + 7.928000000000e-10 1.700238629540e-01 + 8.028000000000e-10 2.537592487741e-01 + 8.128000000000e-10 2.820829438407e-01 + 8.228000000000e-10 3.225445511573e-01 + 8.328000000000e-10 3.777829985044e-01 + 8.428000000000e-10 4.192337708379e-01 + 8.528000000000e-10 4.246090234999e-01 + 8.628000000000e-10 3.507916632731e-01 + 8.728000000000e-10 1.817122417436e-01 + 8.828000000000e-10 -1.599824136343e-02 + 8.928000000000e-10 -1.700377849177e-01 + 9.028000000000e-10 -2.537449127629e-01 + 9.128000000000e-10 -2.820965585668e-01 + 9.228000000000e-10 -3.225302446360e-01 + 9.328000000000e-10 -3.777982010874e-01 + 9.428000000000e-10 -4.192199753705e-01 + 9.528000000000e-10 -4.246232587341e-01 + 9.628000000000e-10 -3.507775800865e-01 + 9.728000000000e-10 -1.817263367247e-01 + 9.828000000000e-10 1.601066647660e-02 + 9.928000000000e-10 1.700248857455e-01 + 1.000000000000e-09 2.385375784000e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/conditions.yaml new file mode 100644 index 00000000..3b8a7fe4 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 13 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_13 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/CML_core_tb.sch new file mode 100644 index 00000000..65438946 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/CML_core_tb_14.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/CML_core_tb_14.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/CML_core_tb_14.data new file mode 100644 index 00000000..86f9b023 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/CML_core_tb_14.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.747912795524e-01 + 1.728000000000e-10 -1.327955908449e-01 + 1.828000000000e-10 3.931332790349e-02 + 1.928000000000e-10 1.782957289495e-01 + 2.028000000000e-10 2.573194188668e-01 + 2.128000000000e-10 2.870254911902e-01 + 2.228000000000e-10 3.228650321442e-01 + 2.328000000000e-10 3.690575149088e-01 + 2.428000000000e-10 4.023791308175e-01 + 2.528000000000e-10 4.034409994944e-01 + 2.628000000000e-10 3.332295993533e-01 + 2.728000000000e-10 1.767123870243e-01 + 2.828000000000e-10 -7.574880255958e-03 + 2.928000000000e-10 -1.550892096227e-01 + 3.028000000000e-10 -2.394679486139e-01 + 3.128000000000e-10 -2.715465054757e-01 + 3.228000000000e-10 -3.085580168164e-01 + 3.328000000000e-10 -3.560821219044e-01 + 3.428000000000e-10 -3.914831036325e-01 + 3.528000000000e-10 -3.956717314322e-01 + 3.628000000000e-10 -3.285929470428e-01 + 3.728000000000e-10 -1.747908753666e-01 + 3.828000000000e-10 7.882784627431e-03 + 3.928000000000e-10 1.545893087045e-01 + 4.028000000000e-10 2.389887597051e-01 + 4.128000000000e-10 2.712307710628e-01 + 4.228000000000e-10 3.085047043395e-01 + 4.328000000000e-10 3.559448484744e-01 + 4.428000000000e-10 3.913507819782e-01 + 4.528000000000e-10 3.953547803018e-01 + 4.628000000000e-10 3.282585464854e-01 + 4.728000000000e-10 1.743078825018e-01 + 4.828000000000e-10 -8.291328068348e-03 + 4.928000000000e-10 -1.550293895867e-01 + 5.028000000000e-10 -2.392804293874e-01 + 5.128000000000e-10 -2.715405217782e-01 + 5.228000000000e-10 -3.087067361985e-01 + 5.328000000000e-10 -3.562070457914e-01 + 5.428000000000e-10 -3.915132320474e-01 + 5.528000000000e-10 -3.955548280332e-01 + 5.628000000000e-10 -3.283427048941e-01 + 5.728000000000e-10 -1.744282326244e-01 + 5.828000000000e-10 8.270645751064e-03 + 5.928000000000e-10 1.549582711486e-01 + 6.028000000000e-10 2.392860039329e-01 + 6.128000000000e-10 2.714820836214e-01 + 6.228000000000e-10 3.087161022039e-01 + 6.328000000000e-10 3.561494137047e-01 + 6.428000000000e-10 3.915273490759e-01 + 6.528000000000e-10 3.955079501007e-01 + 6.628000000000e-10 3.283677191723e-01 + 6.728000000000e-10 1.743944727908e-01 + 6.828000000000e-10 -8.238033211244e-03 + 6.928000000000e-10 -1.549849820320e-01 + 7.028000000000e-10 -2.392533741503e-01 + 7.128000000000e-10 -2.715088112944e-01 + 7.228000000000e-10 -3.086845279612e-01 + 7.328000000000e-10 -3.561786907982e-01 + 7.428000000000e-10 -3.914967682891e-01 + 7.528000000000e-10 -3.955360247734e-01 + 7.628000000000e-10 -3.283379458960e-01 + 7.728000000000e-10 -1.744219452106e-01 + 7.828000000000e-10 8.266285029230e-03 + 7.928000000000e-10 1.549592969714e-01 + 8.028000000000e-10 2.392805186707e-01 + 8.128000000000e-10 2.714837558368e-01 + 8.228000000000e-10 3.087120651005e-01 + 8.328000000000e-10 3.561520690508e-01 + 8.428000000000e-10 3.915233230940e-01 + 8.528000000000e-10 3.955100606400e-01 + 8.628000000000e-10 3.283632493206e-01 + 8.728000000000e-10 1.743968536756e-01 + 8.828000000000e-10 -8.241845610385e-03 + 8.928000000000e-10 -1.549825747228e-01 + 9.028000000000e-10 -2.392568734068e-01 + 9.128000000000e-10 -2.715063119250e-01 + 9.228000000000e-10 -3.086881712182e-01 + 9.328000000000e-10 -3.561760305782e-01 + 9.428000000000e-10 -3.915002731039e-01 + 9.528000000000e-10 -3.955331724158e-01 + 9.628000000000e-10 -3.283409163093e-01 + 9.728000000000e-10 -1.744193777973e-01 + 9.828000000000e-10 8.263272108901e-03 + 9.928000000000e-10 1.549616575981e-01 + 1.000000000000e-09 2.229820050464e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/conditions.yaml new file mode 100644 index 00000000..13060032 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 14 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_14 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/CML_core_tb.sch new file mode 100644 index 00000000..4440b192 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/CML_core_tb_15.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/CML_core_tb_15.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/CML_core_tb_15.data new file mode 100644 index 00000000..7b2e7ab2 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/CML_core_tb_15.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.957054612407e-01 + 1.728000000000e-10 -1.475216919691e-01 + 1.828000000000e-10 3.196996632833e-02 + 1.928000000000e-10 1.773696584526e-01 + 2.028000000000e-10 2.602670445343e-01 + 2.128000000000e-10 2.919684489720e-01 + 2.228000000000e-10 3.273690981683e-01 + 2.328000000000e-10 3.736661732429e-01 + 2.428000000000e-10 4.086769482098e-01 + 2.528000000000e-10 4.113258498473e-01 + 2.628000000000e-10 3.414272197123e-01 + 2.728000000000e-10 1.833836328070e-01 + 2.828000000000e-10 -4.501363849837e-03 + 2.928000000000e-10 -1.562318489881e-01 + 3.028000000000e-10 -2.435570784568e-01 + 3.128000000000e-10 -2.775386220390e-01 + 3.228000000000e-10 -3.142878056355e-01 + 3.328000000000e-10 -3.618442790176e-01 + 3.428000000000e-10 -3.986028140213e-01 + 3.528000000000e-10 -4.040381865127e-01 + 3.628000000000e-10 -3.369104214062e-01 + 3.728000000000e-10 -1.811830752063e-01 + 3.828000000000e-10 5.355128083595e-03 + 3.928000000000e-10 1.563630270676e-01 + 4.028000000000e-10 2.436522664355e-01 + 4.128000000000e-10 2.777202130414e-01 + 4.228000000000e-10 3.146716935396e-01 + 4.328000000000e-10 3.621309165835e-01 + 4.428000000000e-10 3.988648293319e-01 + 4.528000000000e-10 4.040567761896e-01 + 4.628000000000e-10 3.368362274946e-01 + 4.728000000000e-10 1.809052635954e-01 + 4.828000000000e-10 -5.606347307292e-03 + 4.928000000000e-10 -1.566747533637e-01 + 5.028000000000e-10 -2.438438929936e-01 + 5.128000000000e-10 -2.779365198916e-01 + 5.228000000000e-10 -3.147868656031e-01 + 5.328000000000e-10 -3.623069078218e-01 + 5.428000000000e-10 -3.989546307961e-01 + 5.528000000000e-10 -4.041975741324e-01 + 5.628000000000e-10 -3.368831845243e-01 + 5.728000000000e-10 -1.810020824460e-01 + 5.828000000000e-10 5.593858826262e-03 + 5.928000000000e-10 1.566090374935e-01 + 6.028000000000e-10 2.438493522755e-01 + 6.128000000000e-10 2.778818285943e-01 + 6.228000000000e-10 3.147972496077e-01 + 6.328000000000e-10 3.622530927659e-01 + 6.428000000000e-10 3.989689895438e-01 + 6.528000000000e-10 4.041528360847e-01 + 6.628000000000e-10 3.369065350765e-01 + 6.728000000000e-10 1.809679655825e-01 + 6.828000000000e-10 -5.565139497590e-03 + 6.928000000000e-10 -1.566366178225e-01 + 7.028000000000e-10 -2.438204188033e-01 + 7.128000000000e-10 -2.779089356335e-01 + 7.228000000000e-10 -3.147686522157e-01 + 7.328000000000e-10 -3.622826637804e-01 + 7.428000000000e-10 -3.989411843085e-01 + 7.528000000000e-10 -4.041807678845e-01 + 7.628000000000e-10 -3.368790616195e-01 + 7.728000000000e-10 -1.809947630224e-01 + 7.828000000000e-10 5.591512634984e-03 + 7.928000000000e-10 1.566120178189e-01 + 8.028000000000e-10 2.438458933358e-01 + 8.128000000000e-10 2.778849719194e-01 + 8.228000000000e-10 3.147945034671e-01 + 8.328000000000e-10 3.622568751046e-01 + 8.428000000000e-10 3.989662140554e-01 + 8.528000000000e-10 4.041558823701e-01 + 8.628000000000e-10 3.369030769235e-01 + 8.728000000000e-10 1.809706945647e-01 + 8.828000000000e-10 -5.568483515763e-03 + 8.928000000000e-10 -1.566340912711e-01 + 9.028000000000e-10 -2.438236181184e-01 + 9.128000000000e-10 -2.779064153414e-01 + 9.228000000000e-10 -3.147718720666e-01 + 9.328000000000e-10 -3.622798572716e-01 + 9.428000000000e-10 -3.989444036153e-01 + 9.528000000000e-10 -4.041778978449e-01 + 9.628000000000e-10 -3.368819513246e-01 + 9.728000000000e-10 -1.809921012276e-01 + 9.828000000000e-10 5.588724287086e-03 + 9.928000000000e-10 1.566143682128e-01 + 1.000000000000e-09 2.267750497136e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/conditions.yaml new file mode 100644 index 00000000..e707938e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 15 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_15 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/CML_core_tb.sch new file mode 100644 index 00000000..ce179453 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/CML_core_tb_16.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/CML_core_tb_16.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/CML_core_tb_16.data new file mode 100644 index 00000000..a01deb89 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/CML_core_tb_16.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -1.908985659112e-01 + 1.728000000000e-10 -9.049079150817e-02 + 1.828000000000e-10 3.945873683219e-02 + 1.928000000000e-10 1.521437177417e-01 + 2.028000000000e-10 2.220068772324e-01 + 2.128000000000e-10 2.535092334052e-01 + 2.228000000000e-10 2.861973397174e-01 + 2.328000000000e-10 3.239843013312e-01 + 2.428000000000e-10 3.520113017607e-01 + 2.528000000000e-10 3.540468115658e-01 + 2.628000000000e-10 2.949447709683e-01 + 2.728000000000e-10 1.587983397866e-01 + 2.828000000000e-10 -6.865354773069e-03 + 2.928000000000e-10 -1.448078480843e-01 + 3.028000000000e-10 -2.275605338030e-01 + 3.128000000000e-10 -2.625604064747e-01 + 3.228000000000e-10 -2.958552078644e-01 + 3.328000000000e-10 -3.351711406638e-01 + 3.428000000000e-10 -3.644984224381e-01 + 3.528000000000e-10 -3.669950471097e-01 + 3.628000000000e-10 -3.072796408874e-01 + 3.728000000000e-10 -1.699866077827e-01 + 3.828000000000e-10 -2.842045316933e-03 + 3.928000000000e-10 1.365086891956e-01 + 4.028000000000e-10 2.207869920157e-01 + 4.128000000000e-10 2.567713461579e-01 + 4.228000000000e-10 2.907030026757e-01 + 4.328000000000e-10 3.302687598301e-01 + 4.428000000000e-10 3.600803190405e-01 + 4.528000000000e-10 3.632331450943e-01 + 4.628000000000e-10 3.045482678871e-01 + 4.728000000000e-10 1.682698274629e-01 + 4.828000000000e-10 2.058504292284e-03 + 4.928000000000e-10 -1.367871396964e-01 + 5.028000000000e-10 -2.207717990252e-01 + 5.128000000000e-10 -2.567684885934e-01 + 5.228000000000e-10 -2.906651825463e-01 + 5.328000000000e-10 -3.302494358660e-01 + 5.428000000000e-10 -3.599712284157e-01 + 5.528000000000e-10 -3.631239508150e-01 + 5.628000000000e-10 -3.043584109358e-01 + 5.728000000000e-10 -1.680958385636e-01 + 5.828000000000e-10 -1.834034512727e-03 + 5.928000000000e-10 1.369613450439e-01 + 6.028000000000e-10 2.209618957221e-01 + 6.128000000000e-10 2.568952536478e-01 + 6.228000000000e-10 2.908171185353e-01 + 6.328000000000e-10 3.303549214919e-01 + 6.428000000000e-10 3.601082390759e-01 + 6.528000000000e-10 3.632059905221e-01 + 6.628000000000e-10 3.044557238628e-01 + 6.728000000000e-10 1.681292777859e-01 + 6.828000000000e-10 1.882442241730e-03 + 6.928000000000e-10 -1.369637862409e-01 + 7.028000000000e-10 -2.209363992802e-01 + 7.128000000000e-10 -2.569065829626e-01 + 7.228000000000e-10 -2.907936706940e-01 + 7.328000000000e-10 -3.303682701482e-01 + 7.428000000000e-10 -3.600879594395e-01 + 7.528000000000e-10 -3.632220959958e-01 + 7.628000000000e-10 -3.044401007882e-01 + 7.728000000000e-10 -1.681486407544e-01 + 7.828000000000e-10 -1.870004957548e-03 + 7.928000000000e-10 1.369437070838e-01 + 8.028000000000e-10 2.209481957039e-01 + 8.128000000000e-10 2.568879030180e-01 + 8.228000000000e-10 2.908064848389e-01 + 8.328000000000e-10 3.303493303219e-01 + 8.428000000000e-10 3.601006147126e-01 + 8.528000000000e-10 3.632041339109e-01 + 8.628000000000e-10 3.044528281549e-01 + 8.728000000000e-10 1.681322760827e-01 + 8.828000000000e-10 1.883536763259e-03 + 8.928000000000e-10 -1.369582535540e-01 + 9.028000000000e-10 -2.209346296842e-01 + 9.128000000000e-10 -2.569016830366e-01 + 9.228000000000e-10 -2.907925936742e-01 + 9.328000000000e-10 -3.303636164667e-01 + 9.428000000000e-10 -3.600871302257e-01 + 9.528000000000e-10 -3.632178492939e-01 + 9.628000000000e-10 -3.044398392752e-01 + 9.728000000000e-10 -1.681454261603e-01 + 9.828000000000e-10 -1.870628705438e-03 + 9.928000000000e-10 1.369459433541e-01 + 1.000000000000e-09 2.037746084522e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/conditions.yaml new file mode 100644 index 00000000..fcc6fd72 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 16 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_16 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/CML_core_tb.sch new file mode 100644 index 00000000..e5aa74f9 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/CML_core_tb_17.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/CML_core_tb_17.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/CML_core_tb_17.data new file mode 100644 index 00000000..c21b093d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/CML_core_tb_17.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.135873679018e-01 + 1.728000000000e-10 -1.054229355639e-01 + 1.828000000000e-10 3.485798650969e-02 + 1.928000000000e-10 1.569675139767e-01 + 2.028000000000e-10 2.330635404696e-01 + 2.128000000000e-10 2.680443549179e-01 + 2.228000000000e-10 3.014044829899e-01 + 2.328000000000e-10 3.394080314353e-01 + 2.428000000000e-10 3.679529618424e-01 + 2.528000000000e-10 3.700593040123e-01 + 2.628000000000e-10 3.097824620429e-01 + 2.728000000000e-10 1.706514675999e-01 + 2.828000000000e-10 3.558070014658e-04 + 2.928000000000e-10 -1.428409974599e-01 + 3.028000000000e-10 -2.298289579719e-01 + 3.128000000000e-10 -2.678794741753e-01 + 3.228000000000e-10 -3.017454056957e-01 + 3.328000000000e-10 -3.410620518407e-01 + 3.428000000000e-10 -3.712405389398e-01 + 3.528000000000e-10 -3.749327973471e-01 + 3.628000000000e-10 -3.157484466493e-01 + 3.728000000000e-10 -1.773087198166e-01 + 3.828000000000e-10 -7.070252178339e-03 + 3.928000000000e-10 1.364462941621e-01 + 4.028000000000e-10 2.243241068758e-01 + 4.128000000000e-10 2.631279769125e-01 + 4.228000000000e-10 2.976097246349e-01 + 4.328000000000e-10 3.371159716785e-01 + 4.428000000000e-10 3.676405775058e-01 + 4.528000000000e-10 3.717787254056e-01 + 4.628000000000e-10 3.133854979421e-01 + 4.728000000000e-10 1.756870158595e-01 + 4.828000000000e-10 6.171257018760e-03 + 4.928000000000e-10 -1.369680995621e-01 + 5.028000000000e-10 -2.245781248931e-01 + 5.128000000000e-10 -2.633829468620e-01 + 5.228000000000e-10 -2.978042748481e-01 + 5.328000000000e-10 -3.373348877854e-01 + 5.428000000000e-10 -3.677584906255e-01 + 5.528000000000e-10 -3.718812762918e-01 + 5.628000000000e-10 -3.133649557524e-01 + 5.728000000000e-10 -1.756479312047e-01 + 5.828000000000e-10 -6.040608056278e-03 + 5.928000000000e-10 1.370690415770e-01 + 6.028000000000e-10 2.247181767783e-01 + 6.128000000000e-10 2.634617265965e-01 + 6.228000000000e-10 2.979157296699e-01 + 6.328000000000e-10 3.373958940353e-01 + 6.428000000000e-10 3.678612954525e-01 + 6.528000000000e-10 3.719309221475e-01 + 6.628000000000e-10 3.134447453066e-01 + 6.728000000000e-10 1.756687688086e-01 + 6.828000000000e-10 6.090200135509e-03 + 6.928000000000e-10 -1.370702307281e-01 + 7.028000000000e-10 -2.246847420648e-01 + 7.128000000000e-10 -2.634701196121e-01 + 7.228000000000e-10 -2.978849158722e-01 + 7.328000000000e-10 -3.374068878437e-01 + 7.428000000000e-10 -3.678336110941e-01 + 7.528000000000e-10 -3.719446503824e-01 + 7.628000000000e-10 -3.134227431793e-01 + 7.728000000000e-10 -1.756868885858e-01 + 7.828000000000e-10 -6.072676723321e-03 + 7.928000000000e-10 1.370503070743e-01 + 8.028000000000e-10 2.247004966695e-01 + 8.128000000000e-10 2.634509722982e-01 + 8.228000000000e-10 2.979013793804e-01 + 8.328000000000e-10 3.373870921905e-01 + 8.428000000000e-10 3.678495602861e-01 + 8.528000000000e-10 3.719256264749e-01 + 8.628000000000e-10 3.134381864470e-01 + 8.728000000000e-10 1.756688935561e-01 + 8.828000000000e-10 6.088345643719e-03 + 8.928000000000e-10 -1.370666831053e-01 + 9.028000000000e-10 -2.246851372638e-01 + 9.128000000000e-10 -2.634666121684e-01 + 9.228000000000e-10 -2.978856025968e-01 + 9.328000000000e-10 -3.374033621769e-01 + 9.428000000000e-10 -3.678342837151e-01 + 9.528000000000e-10 -3.719412125322e-01 + 9.628000000000e-10 -3.134235677100e-01 + 9.728000000000e-10 -1.756838495744e-01 + 9.828000000000e-10 -6.073781243164e-03 + 9.928000000000e-10 1.370527135588e-01 + 1.000000000000e-09 2.065229990524e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/conditions.yaml new file mode 100644 index 00000000..c97e299d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 17 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/run_17 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/simulation_summary.csv b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/simulation_summary.csv new file mode 100644 index 00000000..a4eb11a9 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/simulation_summary.csv @@ -0,0 +1,19 @@ +run,corner,temperature,vdd,time,vo_diff,frequency +run_00,tt,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.111e-01, -1.870e-01, -3.563e-02, …]",4.722e+09 +run_01,ss,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.163e-01, -1.876e-01, -3.217e-02, …]",4.722e+09 +run_02,tt,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.915e-01, -1.780e-01, -3.803e-02, …]",4.722e+09 +run_03,ss,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.959e-01, -1.792e-01, -3.599e-02, …]",4.722e+09 +run_04,tt,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.689e-01, -1.692e-01, -4.423e-02, …]",4.722e+09 +run_05,ss,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.723e-01, -1.701e-01, -4.252e-02, …]",4.722e+09 +run_06,tt,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.623e-01, -1.963e-01, -5.713e-03, …]",4.722e+09 +run_07,ss,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.669e-01, -1.979e-01, -3.070e-03, …]",4.722e+09 +run_08,tt,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.388e-01, -1.852e-01, -4.985e-03, …]",4.722e+09 +run_09,ss,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.446e-01, -1.889e-01, -5.355e-03, …]",4.722e+09 +run_10,tt,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.832e-01, -1.548e-01, 2.955e-03, …]",4.722e+09 +run_11,ss,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.858e-01, -1.573e-01, 2.540e-03, …]",4.722e+09 +run_12,tt,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.214e-01, -1.558e-01, 3.477e-02, …]",4.722e+09 +run_13,ss,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.365e-01, -1.657e-01, 3.100e-02, …]",4.722e+09 +run_14,tt,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.748e-01, -1.328e-01, 3.931e-02, …]",4.722e+09 +run_15,ss,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.957e-01, -1.475e-01, 3.197e-02, …]",4.722e+09 +run_16,tt,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-1.909e-01, -9.049e-02, 3.946e-02, …]",4.722e+09 +run_17,ss,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.136e-01, -1.054e-01, 3.486e-02, …]",4.722e+09 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/simulation_summary.md b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/simulation_summary.md new file mode 100644 index 00000000..540c8d2a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/parameters/Frequency/simulation_summary.md @@ -0,0 +1,22 @@ +# Simulation Summary for Freq + +| run | corner | temperature | vdd | time | vo_diff | frequency | +| :-- | -----: | ----------: | --: | ---: | ------: | --------: | +| run_00 | tt | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.111e-01, -1.870e-01, -3.563e-02, …] | 4.722e+09 | +| run_01 | ss | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.163e-01, -1.876e-01, -3.217e-02, …] | 4.722e+09 | +| run_02 | tt | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.915e-01, -1.780e-01, -3.803e-02, …] | 4.722e+09 | +| run_03 | ss | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.959e-01, -1.792e-01, -3.599e-02, …] | 4.722e+09 | +| run_04 | tt | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.689e-01, -1.692e-01, -4.423e-02, …] | 4.722e+09 | +| run_05 | ss | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.723e-01, -1.701e-01, -4.252e-02, …] | 4.722e+09 | +| run_06 | tt | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.623e-01, -1.963e-01, -5.713e-03, …] | 4.722e+09 | +| run_07 | ss | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.669e-01, -1.979e-01, -3.070e-03, …] | 4.722e+09 | +| run_08 | tt | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.388e-01, -1.852e-01, -4.985e-03, …] | 4.722e+09 | +| run_09 | ss | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.446e-01, -1.889e-01, -5.355e-03, …] | 4.722e+09 | +| run_10 | tt | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.832e-01, -1.548e-01, 2.955e-03, …] | 4.722e+09 | +| run_11 | ss | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.858e-01, -1.573e-01, 2.540e-03, …] | 4.722e+09 | +| run_12 | tt | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.214e-01, -1.558e-01, 3.477e-02, …] | 4.722e+09 | +| run_13 | ss | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.365e-01, -1.657e-01, 3.100e-02, …] | 4.722e+09 | +| run_14 | tt | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.748e-01, -1.328e-01, 3.931e-02, …] | 4.722e+09 | +| run_15 | ss | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.957e-01, -1.475e-01, 3.197e-02, …] | 4.722e+09 | +| run_16 | tt | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-1.909e-01, -9.049e-02, 3.946e-02, …] | 4.722e+09 | +| run_17 | ss | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.136e-01, -1.054e-01, 3.486e-02, …] | 4.722e+09 | diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/summary.md b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/summary.md new file mode 100644 index 00000000..c08b3edd --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-42-24/summary.md @@ -0,0 +1,9 @@ + +# CACE Summary for CML_divider + +**netlist source**: schematic + +| Parameter | Tool | Result | Min Limit | Min Value | Typ Target | Typ Value | Max Limit | Max Value | Status | +| :------------------- | :------------------- | :-------------- | ---------: | -----------: | ---------: | -----------: | ---------: | -----------: | :------: | +| Freq | ngspice | frequency | any | 4.722 GHz | any | 4.722 GHz | any | 4.722 GHz | Pass ✅ | + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/CML_core_tb.sch new file mode 100644 index 00000000..48f6f0bb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=CACE\{vdd\} savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/frequency.png b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/frequency.png new file mode 100644 index 0000000000000000000000000000000000000000..e4b0a21a410ea45152b21e69092b27c4fd38834f GIT binary patch literal 187075 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�wTWw%38sW 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 t6~vlD*Y&45GNmD literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/CML_core_tb.sch new file mode 100644 index 00000000..1d13f3f3 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/CML_core_tb_0.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/CML_core_tb_0.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/CML_core_tb_0.data new file mode 100644 index 00000000..4cb5b399 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/CML_core_tb_0.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.110742996065e-01 + 1.728000000000e-10 -1.869505717284e-01 + 1.828000000000e-10 -3.563037101706e-02 + 1.928000000000e-10 1.056708524540e-01 + 2.028000000000e-10 2.100393804445e-01 + 2.128000000000e-10 2.784249297688e-01 + 2.228000000000e-10 3.224310579067e-01 + 2.328000000000e-10 3.548600651170e-01 + 2.428000000000e-10 3.792482005271e-01 + 2.528000000000e-10 3.740820324036e-01 + 2.628000000000e-10 3.079440308227e-01 + 2.728000000000e-10 1.813826171807e-01 + 2.828000000000e-10 2.923027813912e-02 + 2.928000000000e-10 -1.118282325615e-01 + 3.028000000000e-10 -2.157337068367e-01 + 3.128000000000e-10 -2.829033176767e-01 + 3.228000000000e-10 -3.260714502323e-01 + 3.328000000000e-10 -3.577361248183e-01 + 3.428000000000e-10 -3.819104006606e-01 + 3.528000000000e-10 -3.764730474160e-01 + 3.628000000000e-10 -3.102968359246e-01 + 3.728000000000e-10 -1.832608913655e-01 + 3.828000000000e-10 -3.084931437320e-02 + 3.928000000000e-10 1.106163095990e-01 + 4.028000000000e-10 2.145714971977e-01 + 4.128000000000e-10 2.819937231053e-01 + 4.228000000000e-10 3.251740998910e-01 + 4.328000000000e-10 3.570946969464e-01 + 4.428000000000e-10 3.813004444382e-01 + 4.528000000000e-10 3.761230596147e-01 + 4.628000000000e-10 3.099646053412e-01 + 4.728000000000e-10 1.831473345022e-01 + 4.828000000000e-10 3.069401022130e-02 + 4.928000000000e-10 -1.106258411343e-01 + 5.028000000000e-10 -2.146793601179e-01 + 5.128000000000e-10 -2.820035552799e-01 + 5.228000000000e-10 -3.252909243829e-01 + 5.328000000000e-10 -3.570986338553e-01 + 5.428000000000e-10 -3.813904658256e-01 + 5.528000000000e-10 -3.760889514061e-01 + 5.628000000000e-10 -3.100114096943e-01 + 5.728000000000e-10 -1.830827247194e-01 + 5.828000000000e-10 -3.072480545922e-02 + 5.928000000000e-10 1.106906463094e-01 + 6.028000000000e-10 2.146493837568e-01 + 6.128000000000e-10 2.820610673881e-01 + 6.228000000000e-10 3.252525482967e-01 + 6.328000000000e-10 3.571504708749e-01 + 6.428000000000e-10 3.813516648295e-01 + 6.528000000000e-10 3.761390656738e-01 + 6.628000000000e-10 3.099742259389e-01 + 6.728000000000e-10 1.831331110808e-01 + 6.828000000000e-10 3.068765829312e-02 + 6.928000000000e-10 -1.106445812930e-01 + 7.028000000000e-10 -2.146859050297e-01 + 7.128000000000e-10 -2.820172231683e-01 + 7.228000000000e-10 -3.252905125649e-01 + 7.328000000000e-10 -3.571078709926e-01 + 7.428000000000e-10 -3.813893177320e-01 + 7.528000000000e-10 -3.760986555866e-01 + 7.628000000000e-10 -3.100117776476e-01 + 7.728000000000e-10 -1.830935153198e-01 + 7.828000000000e-10 -3.072484475908e-02 + 7.928000000000e-10 1.106810594907e-01 + 8.028000000000e-10 2.146507312123e-01 + 8.128000000000e-10 2.820530370402e-01 + 8.228000000000e-10 3.252547871433e-01 + 8.328000000000e-10 3.571432636036e-01 + 8.428000000000e-10 3.813547544577e-01 + 8.528000000000e-10 3.761324372121e-01 + 8.628000000000e-10 3.099775475493e-01 + 8.728000000000e-10 1.831274535707e-01 + 8.828000000000e-10 3.069175078476e-02 + 8.928000000000e-10 -1.106491559136e-01 + 9.028000000000e-10 -2.146821655528e-01 + 9.128000000000e-10 -2.820218639330e-01 + 9.228000000000e-10 -3.252864642203e-01 + 9.328000000000e-10 -3.571122611941e-01 + 9.428000000000e-10 -3.813854215351e-01 + 9.528000000000e-10 -3.761024723822e-01 + 9.628000000000e-10 -3.100075395903e-01 + 9.728000000000e-10 -1.830975404653e-01 + 9.828000000000e-10 -3.072097080048e-02 + 9.928000000000e-10 1.106770531472e-01 + 1.000000000000e-09 1.895325033433e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/conditions.yaml new file mode 100644 index 00000000..639ef15a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_00 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/CML_core_tb.sch new file mode 100644 index 00000000..331d9825 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/CML_core_tb_1.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/CML_core_tb_1.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/CML_core_tb_1.data new file mode 100644 index 00000000..2b8492c0 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/CML_core_tb_1.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.098686002716e-01 + 1.728000000000e-10 -1.894560696460e-01 + 1.828000000000e-10 -4.059695742871e-02 + 1.928000000000e-10 9.940964501315e-02 + 2.028000000000e-10 2.033133834097e-01 + 2.128000000000e-10 2.719620830710e-01 + 2.228000000000e-10 3.163098950569e-01 + 2.328000000000e-10 3.491513279687e-01 + 2.428000000000e-10 3.741332087119e-01 + 2.528000000000e-10 3.700254590965e-01 + 2.628000000000e-10 3.062168938694e-01 + 2.728000000000e-10 1.827341653261e-01 + 2.828000000000e-10 3.280764574542e-02 + 2.928000000000e-10 -1.069769977212e-01 + 3.028000000000e-10 -2.102924295592e-01 + 3.128000000000e-10 -2.774748738503e-01 + 3.228000000000e-10 -3.207751929169e-01 + 3.328000000000e-10 -3.527202709264e-01 + 3.428000000000e-10 -3.774342269369e-01 + 3.528000000000e-10 -3.730540733905e-01 + 3.628000000000e-10 -3.091949741363e-01 + 3.728000000000e-10 -1.851642002832e-01 + 3.828000000000e-10 -3.487935842603e-02 + 3.928000000000e-10 1.053970083053e-01 + 4.028000000000e-10 2.088131472734e-01 + 4.128000000000e-10 2.762908135843e-01 + 4.228000000000e-10 3.196385089100e-01 + 4.328000000000e-10 3.518763575372e-01 + 4.428000000000e-10 3.766558038448e-01 + 4.528000000000e-10 3.725714207051e-01 + 4.628000000000e-10 3.087619830708e-01 + 4.728000000000e-10 1.849833837695e-01 + 4.828000000000e-10 3.467977975354e-02 + 4.928000000000e-10 -1.054340839288e-01 + 5.028000000000e-10 -2.089448612506e-01 + 5.128000000000e-10 -2.763231704068e-01 + 5.228000000000e-10 -3.197791718821e-01 + 5.328000000000e-10 -3.518998659973e-01 + 5.428000000000e-10 -3.767613178326e-01 + 5.528000000000e-10 -3.725445308461e-01 + 5.628000000000e-10 -3.088109693961e-01 + 5.728000000000e-10 -1.849155432321e-01 + 5.828000000000e-10 -3.470667341543e-02 + 5.928000000000e-10 1.055048847061e-01 + 6.028000000000e-10 2.089187592091e-01 + 6.128000000000e-10 2.763849186823e-01 + 6.228000000000e-10 3.197425041182e-01 + 6.328000000000e-10 3.519544114659e-01 + 6.428000000000e-10 3.767237647599e-01 + 6.528000000000e-10 3.725977061828e-01 + 6.628000000000e-10 3.087755728399e-01 + 6.728000000000e-10 1.849692271918e-01 + 6.828000000000e-10 3.467099374312e-02 + 6.928000000000e-10 -1.054562384013e-01 + 7.028000000000e-10 -2.089544093361e-01 + 7.128000000000e-10 -2.763388509076e-01 + 7.228000000000e-10 -3.197800091948e-01 + 7.328000000000e-10 -3.519101110125e-01 + 7.428000000000e-10 -3.767612419697e-01 + 7.528000000000e-10 -3.725558598664e-01 + 7.628000000000e-10 -3.088133010441e-01 + 7.728000000000e-10 -1.849285593480e-01 + 7.828000000000e-10 -3.470862903587e-02 + 7.928000000000e-10 1.054936381918e-01 + 8.028000000000e-10 2.089186129636e-01 + 8.128000000000e-10 2.763755879874e-01 + 8.228000000000e-10 3.197437164625e-01 + 8.328000000000e-10 3.519463479929e-01 + 8.428000000000e-10 3.767260853907e-01 + 8.528000000000e-10 3.725904126785e-01 + 8.628000000000e-10 3.087783440951e-01 + 8.728000000000e-10 1.849632167070e-01 + 8.828000000000e-10 3.467482549783e-02 + 8.928000000000e-10 -1.054610682584e-01 + 9.028000000000e-10 -2.089507846182e-01 + 9.128000000000e-10 -2.763436586770e-01 + 9.228000000000e-10 -3.197760754687e-01 + 9.328000000000e-10 -3.519146615050e-01 + 9.428000000000e-10 -3.767573997120e-01 + 9.528000000000e-10 -3.725597535055e-01 + 9.628000000000e-10 -3.088090609970e-01 + 9.728000000000e-10 -1.849326628321e-01 + 9.828000000000e-10 -3.470475490247e-02 + 9.928000000000e-10 1.054896146910e-01 + 1.000000000000e-09 1.838520001242e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/conditions.yaml new file mode 100644 index 00000000..130a337f --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 1 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_01 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/CML_core_tb.sch new file mode 100644 index 00000000..8024c6e1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/CML_core_tb_2.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/CML_core_tb_2.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/CML_core_tb_2.data new file mode 100644 index 00000000..b332ca2c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/CML_core_tb_2.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.162797108708e-01 + 1.728000000000e-10 -1.875883768906e-01 + 1.828000000000e-10 -3.217177564589e-02 + 1.928000000000e-10 1.118453904517e-01 + 2.028000000000e-10 2.178869753922e-01 + 2.128000000000e-10 2.869187499571e-01 + 2.228000000000e-10 3.311831063176e-01 + 2.328000000000e-10 3.637965093552e-01 + 2.428000000000e-10 3.884475585753e-01 + 2.528000000000e-10 3.831703446637e-01 + 2.628000000000e-10 3.149426000366e-01 + 2.728000000000e-10 1.840825734866e-01 + 2.828000000000e-10 2.786370536806e-02 + 2.928000000000e-10 -1.159899232258e-01 + 3.028000000000e-10 -2.217323928122e-01 + 3.128000000000e-10 -2.897841810826e-01 + 3.228000000000e-10 -3.334256487170e-01 + 3.328000000000e-10 -3.654508602495e-01 + 3.428000000000e-10 -3.900407544937e-01 + 3.528000000000e-10 -3.846189534315e-01 + 3.628000000000e-10 -3.164922452622e-01 + 3.728000000000e-10 -1.853182634851e-01 + 3.828000000000e-10 -2.898615964086e-02 + 3.928000000000e-10 1.151710782521e-01 + 4.028000000000e-10 2.209054309263e-01 + 4.128000000000e-10 2.891817322742e-01 + 4.228000000000e-10 3.328077516782e-01 + 4.328000000000e-10 3.650515838921e-01 + 4.428000000000e-10 3.896233583948e-01 + 4.528000000000e-10 3.844074302627e-01 + 4.628000000000e-10 3.162448842688e-01 + 4.728000000000e-10 1.852475068120e-01 + 4.828000000000e-10 2.884623360652e-02 + 4.928000000000e-10 -1.151788252337e-01 + 5.028000000000e-10 -2.210147130581e-01 + 5.128000000000e-10 -2.891872658193e-01 + 5.228000000000e-10 -3.329167168088e-01 + 5.328000000000e-10 -3.650471930963e-01 + 5.428000000000e-10 -3.897100874545e-01 + 5.528000000000e-10 -3.843762306477e-01 + 5.628000000000e-10 -3.163013912188e-01 + 5.728000000000e-10 -1.851950213487e-01 + 5.828000000000e-10 -2.889036873678e-02 + 5.928000000000e-10 1.152312899162e-01 + 6.028000000000e-10 2.209735588305e-01 + 6.128000000000e-10 2.892357416511e-01 + 6.228000000000e-10 3.328707955285e-01 + 6.328000000000e-10 3.650931065031e-01 + 6.428000000000e-10 3.896657987149e-01 + 6.528000000000e-10 3.844215105032e-01 + 6.628000000000e-10 3.162596917265e-01 + 6.728000000000e-10 1.852417351036e-01 + 6.828000000000e-10 2.884992827621e-02 + 6.928000000000e-10 -1.151876679011e-01 + 7.028000000000e-10 -2.210123101756e-01 + 7.128000000000e-10 -2.891938845816e-01 + 7.228000000000e-10 -3.329106389600e-01 + 7.328000000000e-10 -3.650518039465e-01 + 7.428000000000e-10 -3.897047407363e-01 + 7.528000000000e-10 -3.843819858648e-01 + 7.628000000000e-10 -3.162978744015e-01 + 7.728000000000e-10 -1.852023753321e-01 + 7.828000000000e-10 -2.888743165850e-02 + 7.928000000000e-10 1.152240030808e-01 + 8.028000000000e-10 2.209771419031e-01 + 8.128000000000e-10 2.892295361788e-01 + 8.228000000000e-10 3.328747680971e-01 + 8.328000000000e-10 3.650871456099e-01 + 8.428000000000e-10 3.896701175780e-01 + 8.528000000000e-10 3.844156912621e-01 + 8.628000000000e-10 3.162637401476e-01 + 8.728000000000e-10 1.852363586492e-01 + 8.828000000000e-10 2.885434112124e-02 + 8.928000000000e-10 -1.151920978903e-01 + 9.028000000000e-10 -2.210084087345e-01 + 9.128000000000e-10 -2.891984388712e-01 + 9.228000000000e-10 -3.329064027155e-01 + 9.328000000000e-10 -3.650560988894e-01 + 9.428000000000e-10 -3.897007143418e-01 + 9.528000000000e-10 -3.843858173814e-01 + 9.628000000000e-10 -3.162935974835e-01 + 9.728000000000e-10 -1.852064424274e-01 + 9.828000000000e-10 -2.888350905479e-02 + 9.928000000000e-10 1.152199079204e-01 + 1.000000000000e-09 1.954791142410e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/conditions.yaml new file mode 100644 index 00000000..1edc2819 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 2 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_02 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/CML_core_tb.sch new file mode 100644 index 00000000..915e81fc --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/CML_core_tb_3.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/CML_core_tb_3.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/CML_core_tb_3.data new file mode 100644 index 00000000..6dccbfd6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/CML_core_tb_3.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.914571027454e-01 + 1.728000000000e-10 -1.780117263272e-01 + 1.828000000000e-10 -3.802564096594e-02 + 1.928000000000e-10 9.479025580261e-02 + 2.028000000000e-10 1.961220444980e-01 + 2.128000000000e-10 2.643669322964e-01 + 2.228000000000e-10 3.071498875260e-01 + 2.328000000000e-10 3.351667250191e-01 + 2.428000000000e-10 3.529478733093e-01 + 2.528000000000e-10 3.439767079911e-01 + 2.628000000000e-10 2.827109934029e-01 + 2.728000000000e-10 1.683025534555e-01 + 2.828000000000e-10 2.843266655337e-02 + 2.928000000000e-10 -1.036223502576e-01 + 3.028000000000e-10 -2.042863713809e-01 + 3.128000000000e-10 -2.713818104821e-01 + 3.228000000000e-10 -3.132717880322e-01 + 3.328000000000e-10 -3.402903477971e-01 + 3.428000000000e-10 -3.574262556597e-01 + 3.528000000000e-10 -3.476240566503e-01 + 3.628000000000e-10 -2.857203755187e-01 + 3.728000000000e-10 -1.703849236420e-01 + 3.828000000000e-10 -2.994825869373e-02 + 3.928000000000e-10 1.026817167876e-01 + 4.028000000000e-10 2.034750084544e-01 + 4.128000000000e-10 2.707812081585e-01 + 4.228000000000e-10 3.126503625184e-01 + 4.328000000000e-10 3.399043734480e-01 + 4.428000000000e-10 3.571021595385e-01 + 4.528000000000e-10 3.475896983741e-01 + 4.628000000000e-10 2.857411927694e-01 + 4.728000000000e-10 1.706053611761e-01 + 4.828000000000e-10 3.010795594348e-02 + 4.928000000000e-10 -1.024135388755e-01 + 5.028000000000e-10 -2.033190471438e-01 + 5.128000000000e-10 -2.705615444577e-01 + 5.228000000000e-10 -3.125558523975e-01 + 5.328000000000e-10 -3.397330193449e-01 + 5.428000000000e-10 -3.570354300338e-01 + 5.528000000000e-10 -3.474353611027e-01 + 5.628000000000e-10 -2.856876769732e-01 + 5.728000000000e-10 -1.704760895977e-01 + 5.828000000000e-10 -3.008641427314e-02 + 5.928000000000e-10 1.025087996136e-01 + 6.028000000000e-10 2.033209986443e-01 + 6.128000000000e-10 2.706412375819e-01 + 6.228000000000e-10 3.125457575810e-01 + 6.328000000000e-10 3.398008382665e-01 + 6.428000000000e-10 3.570145583479e-01 + 6.528000000000e-10 3.474888598072e-01 + 6.628000000000e-10 2.856551852535e-01 + 6.728000000000e-10 1.705188293935e-01 + 6.828000000000e-10 3.004736925580e-02 + 6.928000000000e-10 -1.024728514478e-01 + 7.028000000000e-10 -2.033602328622e-01 + 7.128000000000e-10 -2.706061106716e-01 + 7.228000000000e-10 -3.125843283316e-01 + 7.328000000000e-10 -3.397655433228e-01 + 7.428000000000e-10 -3.570523646632e-01 + 7.528000000000e-10 -3.474554820929e-01 + 7.628000000000e-10 -2.856929985560e-01 + 7.728000000000e-10 -1.704859799650e-01 + 7.828000000000e-10 -3.008383757896e-02 + 7.928000000000e-10 1.025039608177e-01 + 8.028000000000e-10 2.033261442763e-01 + 8.128000000000e-10 2.706371082838e-01 + 8.228000000000e-10 3.125504649737e-01 + 8.328000000000e-10 3.397966066528e-01 + 8.428000000000e-10 3.570198965640e-01 + 8.528000000000e-10 3.474857187206e-01 + 8.628000000000e-10 2.856614378232e-01 + 8.728000000000e-10 1.705164607562e-01 + 8.828000000000e-10 3.005354621749e-02 + 8.928000000000e-10 -1.024749769036e-01 + 9.028000000000e-10 -2.033548454455e-01 + 9.128000000000e-10 -2.706087008930e-01 + 9.228000000000e-10 -3.125792630790e-01 + 9.328000000000e-10 -3.397683901773e-01 + 9.428000000000e-10 -3.570478314069e-01 + 9.528000000000e-10 -3.474583427153e-01 + 9.628000000000e-10 -2.856887110961e-01 + 9.728000000000e-10 -1.704892548593e-01 + 9.828000000000e-10 -3.008001356704e-02 + 9.928000000000e-10 1.025005080892e-01 + 1.000000000000e-09 1.786649040194e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/conditions.yaml new file mode 100644 index 00000000..b3b8c73a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 3 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_03 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/CML_core_tb.sch new file mode 100644 index 00000000..1855216a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/CML_core_tb_4.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/CML_core_tb_4.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/CML_core_tb_4.data new file mode 100644 index 00000000..3efc8a54 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/CML_core_tb_4.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.908886906683e-01 + 1.728000000000e-10 -1.805890382926e-01 + 1.828000000000e-10 -4.276329247682e-02 + 1.928000000000e-10 8.882407595099e-02 + 2.028000000000e-10 1.894983505466e-01 + 2.128000000000e-10 2.576242567207e-01 + 2.228000000000e-10 3.005212718886e-01 + 2.328000000000e-10 3.289546768723e-01 + 2.428000000000e-10 3.474240530436e-01 + 2.528000000000e-10 3.394794629215e-01 + 2.628000000000e-10 2.802266193594e-01 + 2.728000000000e-10 1.685520573893e-01 + 2.828000000000e-10 3.081792474830e-02 + 2.928000000000e-10 -9.985913249602e-02 + 3.028000000000e-10 -1.996535082954e-01 + 3.128000000000e-10 -2.663519845580e-01 + 3.228000000000e-10 -3.081166100610e-01 + 3.328000000000e-10 -3.353557582557e-01 + 3.428000000000e-10 -3.530339682910e-01 + 3.528000000000e-10 -3.441234226063e-01 + 3.628000000000e-10 -2.840838930007e-01 + 3.728000000000e-10 -1.712890179908e-01 + 3.828000000000e-10 -3.280692441870e-02 + 3.928000000000e-10 9.858702888345e-02 + 4.028000000000e-10 1.985844458095e-01 + 4.128000000000e-10 2.655374220709e-01 + 4.228000000000e-10 3.073092043222e-01 + 4.328000000000e-10 3.348254361967e-01 + 4.428000000000e-10 3.526065806553e-01 + 4.528000000000e-10 3.440384505411e-01 + 4.628000000000e-10 2.840943593119e-01 + 4.728000000000e-10 1.715352376725e-01 + 4.828000000000e-10 3.300625747524e-02 + 4.928000000000e-10 -9.826793525126e-02 + 5.028000000000e-10 -1.983826392696e-01 + 5.128000000000e-10 -2.652748957302e-01 + 5.228000000000e-10 -3.071819372703e-01 + 5.328000000000e-10 -3.346211766496e-01 + 5.428000000000e-10 -3.525115401756e-01 + 5.528000000000e-10 -3.438520776438e-01 + 5.628000000000e-10 -2.840132934403e-01 + 5.728000000000e-10 -1.713783534881e-01 + 5.828000000000e-10 -3.296528839742e-02 + 5.928000000000e-10 9.838210726041e-02 + 6.028000000000e-10 1.983970962128e-01 + 6.128000000000e-10 2.653685996210e-01 + 6.228000000000e-10 3.071805271474e-01 + 6.328000000000e-10 3.346994451143e-01 + 6.428000000000e-10 3.524959527178e-01 + 6.528000000000e-10 3.439124816552e-01 + 6.628000000000e-10 2.839825148385e-01 + 6.728000000000e-10 1.714247364616e-01 + 6.828000000000e-10 3.292536702304e-02 + 6.928000000000e-10 -9.834444145178e-02 + 7.028000000000e-10 -1.984381153623e-01 + 7.128000000000e-10 -2.653318964793e-01 + 7.228000000000e-10 -3.072207693265e-01 + 7.328000000000e-10 -3.346627011511e-01 + 7.428000000000e-10 -3.525355719541e-01 + 7.528000000000e-10 -3.438780517049e-01 + 7.628000000000e-10 -2.840226095914e-01 + 7.728000000000e-10 -1.713910964736e-01 + 7.828000000000e-10 -3.296406429130e-02 + 7.928000000000e-10 9.837645950128e-02 + 8.028000000000e-10 1.984019833998e-01 + 8.128000000000e-10 2.653640104122e-01 + 8.228000000000e-10 3.071850636337e-01 + 8.328000000000e-10 3.346949515146e-01 + 8.428000000000e-10 3.525014052751e-01 + 8.528000000000e-10 3.439095067618e-01 + 8.628000000000e-10 2.839893402731e-01 + 8.728000000000e-10 1.714228569780e-01 + 8.828000000000e-10 3.293222880403e-02 + 8.928000000000e-10 -9.834616516704e-02 + 9.028000000000e-10 -1.984321208293e-01 + 9.128000000000e-10 -2.653341991167e-01 + 9.228000000000e-10 -3.072152380466e-01 + 9.328000000000e-10 -3.346653803170e-01 + 9.428000000000e-10 -3.525306496503e-01 + 9.528000000000e-10 -3.438807929682e-01 + 9.628000000000e-10 -2.840179937834e-01 + 9.728000000000e-10 -1.713943425416e-01 + 9.828000000000e-10 -3.296001530074e-02 + 9.928000000000e-10 9.837298926970e-02 + 1.000000000000e-09 1.738955459088e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/conditions.yaml new file mode 100644 index 00000000..5bab1bb1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 4 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_04 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/CML_core_tb.sch new file mode 100644 index 00000000..1b011749 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/CML_core_tb_5.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/CML_core_tb_5.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/CML_core_tb_5.data new file mode 100644 index 00000000..0cc77d23 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/CML_core_tb_5.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.958574299710e-01 + 1.728000000000e-10 -1.791897212785e-01 + 1.828000000000e-10 -3.599075048614e-02 + 1.928000000000e-10 9.946703268478e-02 + 2.028000000000e-10 2.032502871016e-01 + 2.128000000000e-10 2.733994094958e-01 + 2.228000000000e-10 3.172845988123e-01 + 2.328000000000e-10 3.455609123691e-01 + 2.428000000000e-10 3.630923957132e-01 + 2.528000000000e-10 3.534419450967e-01 + 2.628000000000e-10 2.903663934708e-01 + 2.728000000000e-10 1.726743312860e-01 + 2.828000000000e-10 2.930291139472e-02 + 2.928000000000e-10 -1.057514312075e-01 + 3.028000000000e-10 -2.091913834589e-01 + 3.128000000000e-10 -2.784696434768e-01 + 3.228000000000e-10 -3.216873931074e-01 + 3.328000000000e-10 -3.491870426412e-01 + 3.428000000000e-10 -3.662894191498e-01 + 3.528000000000e-10 -3.560374131806e-01 + 3.628000000000e-10 -2.925719059469e-01 + 3.728000000000e-10 -1.742159787839e-01 + 3.828000000000e-10 -3.049391935212e-02 + 3.928000000000e-10 1.049756016137e-01 + 4.028000000000e-10 2.084672065617e-01 + 4.128000000000e-10 2.779301238417e-01 + 4.228000000000e-10 3.211180618030e-01 + 4.328000000000e-10 3.488255023686e-01 + 4.428000000000e-10 3.659572542624e-01 + 4.528000000000e-10 3.559493947967e-01 + 4.628000000000e-10 2.925058094407e-01 + 4.728000000000e-10 1.743267017008e-01 + 4.828000000000e-10 3.054314172764e-02 + 4.928000000000e-10 -1.048175245910e-01 + 5.028000000000e-10 -2.084096499031e-01 + 5.128000000000e-10 -2.777998408986e-01 + 5.228000000000e-10 -3.210985617265e-01 + 5.328000000000e-10 -3.487226120056e-01 + 5.428000000000e-10 -3.659481451181e-01 + 5.528000000000e-10 -3.558482598240e-01 + 5.628000000000e-10 -2.924942070749e-01 + 5.728000000000e-10 -1.742324941843e-01 + 5.828000000000e-10 -3.054486718364e-02 + 5.928000000000e-10 1.048934295445e-01 + 6.028000000000e-10 2.083991544976e-01 + 6.128000000000e-10 2.778660140822e-01 + 6.228000000000e-10 3.210794561497e-01 + 6.328000000000e-10 3.487805773205e-01 + 6.428000000000e-10 3.659226785140e-01 + 6.528000000000e-10 3.558970058340e-01 + 6.628000000000e-10 2.924624137185e-01 + 6.728000000000e-10 1.742748110039e-01 + 6.828000000000e-10 3.050920657876e-02 + 6.928000000000e-10 -1.048562048812e-01 + 7.028000000000e-10 -2.084343791218e-01 + 7.128000000000e-10 -2.778299623633e-01 + 7.228000000000e-10 -3.211147582115e-01 + 7.328000000000e-10 -3.487447461690e-01 + 7.428000000000e-10 -3.659575085549e-01 + 7.528000000000e-10 -3.558632428052e-01 + 7.628000000000e-10 -2.924972481137e-01 + 7.728000000000e-10 -1.742418088753e-01 + 7.828000000000e-10 -3.054328720193e-02 + 7.928000000000e-10 1.048870377838e-01 + 8.028000000000e-10 2.084024115537e-01 + 8.128000000000e-10 2.778603942564e-01 + 8.228000000000e-10 3.210827582845e-01 + 8.328000000000e-10 3.487751488045e-01 + 8.428000000000e-10 3.659266824704e-01 + 8.528000000000e-10 3.558925702991e-01 + 8.628000000000e-10 2.924671830422e-01 + 8.728000000000e-10 1.742711856894e-01 + 8.828000000000e-10 3.051417003050e-02 + 8.928000000000e-10 -1.048591994973e-01 + 9.028000000000e-10 -2.084299430076e-01 + 9.128000000000e-10 -2.778331783696e-01 + 9.228000000000e-10 -3.211104359655e-01 + 9.328000000000e-10 -3.487480244246e-01 + 9.428000000000e-10 -3.659535267111e-01 + 9.528000000000e-10 -3.558663548813e-01 + 9.628000000000e-10 -2.924933270906e-01 + 9.728000000000e-10 -1.742451324195e-01 + 9.828000000000e-10 -3.053963678018e-02 + 9.928000000000e-10 1.048836196344e-01 + 1.000000000000e-09 1.830293824662e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/conditions.yaml new file mode 100644 index 00000000..280b26f2 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 5 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_05 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/CML_core_tb.sch new file mode 100644 index 00000000..99556bb5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/CML_core_tb_6.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/CML_core_tb_6.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/CML_core_tb_6.data new file mode 100644 index 00000000..38ffd8bf --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/CML_core_tb_6.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.689355033953e-01 + 1.728000000000e-10 -1.691728954892e-01 + 1.828000000000e-10 -4.423302134033e-02 + 1.928000000000e-10 7.663444207075e-02 + 2.028000000000e-10 1.714764750752e-01 + 2.128000000000e-10 2.368219567798e-01 + 2.228000000000e-10 2.772768132445e-01 + 2.328000000000e-10 3.013675537348e-01 + 2.428000000000e-10 3.140706479520e-01 + 2.528000000000e-10 3.038549886105e-01 + 2.628000000000e-10 2.508404086347e-01 + 2.728000000000e-10 1.528360605683e-01 + 2.828000000000e-10 3.040034809293e-02 + 2.928000000000e-10 -8.785381094258e-02 + 3.028000000000e-10 -1.808734961109e-01 + 3.128000000000e-10 -2.445795528199e-01 + 3.228000000000e-10 -2.838354337528e-01 + 3.328000000000e-10 -3.065800962400e-01 + 3.428000000000e-10 -3.181767360109e-01 + 3.528000000000e-10 -3.065752663659e-01 + 3.628000000000e-10 -2.523878800401e-01 + 3.728000000000e-10 -1.531173668737e-01 + 3.828000000000e-10 -2.992055538556e-02 + 3.928000000000e-10 8.900435641641e-02 + 4.028000000000e-10 1.821756238512e-01 + 4.128000000000e-10 2.460123650690e-01 + 4.228000000000e-10 2.851182310100e-01 + 4.328000000000e-10 3.079291995556e-01 + 4.428000000000e-10 3.194129911462e-01 + 4.528000000000e-10 3.078915366323e-01 + 4.628000000000e-10 2.535144344421e-01 + 4.728000000000e-10 1.541542026196e-01 + 4.828000000000e-10 3.063651583090e-02 + 4.928000000000e-10 -8.839161491074e-02 + 5.028000000000e-10 -1.817999659778e-01 + 5.128000000000e-10 -2.456456661989e-01 + 5.228000000000e-10 -2.849195350591e-01 + 5.328000000000e-10 -3.077091828990e-01 + 5.428000000000e-10 -3.193505374448e-01 + 5.528000000000e-10 -3.078081521678e-01 + 5.628000000000e-10 -2.535787813503e-01 + 5.728000000000e-10 -1.541764927596e-01 + 5.828000000000e-10 -3.077048554081e-02 + 5.928000000000e-10 8.832790620553e-02 + 6.028000000000e-10 1.816551916875e-01 + 6.128000000000e-10 2.455879975104e-01 + 6.228000000000e-10 2.847911932982e-01 + 6.328000000000e-10 3.076677363016e-01 + 6.428000000000e-10 3.192371229053e-01 + 6.528000000000e-10 3.077778412262e-01 + 6.628000000000e-10 2.534819327505e-01 + 6.728000000000e-10 1.541683138663e-01 + 6.828000000000e-10 3.070155435378e-02 + 6.928000000000e-10 -8.831320560130e-02 + 7.028000000000e-10 -1.817038543937e-01 + 7.128000000000e-10 -2.455619958387e-01 + 7.228000000000e-10 -2.848320347671e-01 + 7.328000000000e-10 -3.076358698550e-01 + 7.428000000000e-10 -3.192710667609e-01 + 7.528000000000e-10 -3.077409972388e-01 + 7.628000000000e-10 -2.535098012890e-01 + 7.728000000000e-10 -1.541282589474e-01 + 7.828000000000e-10 -3.072672689244e-02 + 7.928000000000e-10 8.835148526653e-02 + 8.028000000000e-10 1.816795669555e-01 + 8.128000000000e-10 2.455984246601e-01 + 8.228000000000e-10 2.848062931006e-01 + 8.328000000000e-10 3.076705916890e-01 + 8.428000000000e-10 3.192450073559e-01 + 8.528000000000e-10 3.077736319697e-01 + 8.628000000000e-10 2.534831121829e-01 + 8.728000000000e-10 1.541590953584e-01 + 8.828000000000e-10 3.069946612700e-02 + 8.928000000000e-10 -8.832341199891e-02 + 9.028000000000e-10 -1.817063952021e-01 + 9.128000000000e-10 -2.455714256322e-01 + 9.228000000000e-10 -2.848333922463e-01 + 9.328000000000e-10 -3.076440936715e-01 + 9.428000000000e-10 -3.192716274515e-01 + 9.528000000000e-10 -3.077481608676e-01 + 9.628000000000e-10 -2.535093614867e-01 + 9.728000000000e-10 -1.541340765567e-01 + 9.828000000000e-10 -3.072486745089e-02 + 9.928000000000e-10 8.834711873249e-02 + 1.000000000000e-09 1.586239577417e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/conditions.yaml new file mode 100644 index 00000000..08d6dff9 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 6 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_06 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/CML_core_tb.sch new file mode 100644 index 00000000..138d869d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/CML_core_tb_7.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/CML_core_tb_7.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/CML_core_tb_7.data new file mode 100644 index 00000000..1cfe87b5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/CML_core_tb_7.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.694477874818e-01 + 1.728000000000e-10 -1.721829739194e-01 + 1.828000000000e-10 -4.906833766415e-02 + 1.928000000000e-10 7.069743134728e-02 + 2.028000000000e-10 1.648418946330e-01 + 2.128000000000e-10 2.298765389610e-01 + 2.228000000000e-10 2.702802052070e-01 + 2.328000000000e-10 2.947129455777e-01 + 2.428000000000e-10 3.081296602318e-01 + 2.528000000000e-10 2.990063012040e-01 + 2.628000000000e-10 2.478884705263e-01 + 2.728000000000e-10 1.524230846398e-01 + 2.828000000000e-10 3.216725009037e-02 + 2.928000000000e-10 -8.452884553171e-02 + 3.028000000000e-10 -1.764495371150e-01 + 3.128000000000e-10 -2.394951663999e-01 + 3.228000000000e-10 -2.784178156025e-01 + 3.328000000000e-10 -3.012580547427e-01 + 3.428000000000e-10 -3.133510931360e-01 + 3.528000000000e-10 -3.026055002423e-01 + 3.628000000000e-10 -2.500554574282e-01 + 3.728000000000e-10 -1.530444893437e-01 + 3.828000000000e-10 -3.179895766292e-02 + 3.928000000000e-10 8.573594509971e-02 + 4.028000000000e-10 1.778922744476e-01 + 4.128000000000e-10 2.411102030583e-01 + 4.228000000000e-10 2.798967112063e-01 + 4.328000000000e-10 3.028156837380e-01 + 4.428000000000e-10 3.148075876296e-01 + 4.528000000000e-10 3.041758344829e-01 + 4.628000000000e-10 2.514478797306e-01 + 4.728000000000e-10 1.543354303295e-01 + 4.828000000000e-10 3.272908827542e-02 + 4.928000000000e-10 -8.494488064942e-02 + 5.028000000000e-10 -1.773750790235e-01 + 5.128000000000e-10 -2.406241070550e-01 + 5.228000000000e-10 -2.796032327906e-01 + 5.328000000000e-10 -3.025154625175e-01 + 5.428000000000e-10 -3.146850050735e-01 + 5.528000000000e-10 -3.040456856306e-01 + 5.628000000000e-10 -2.514865398019e-01 + 5.728000000000e-10 -1.543455010081e-01 + 5.828000000000e-10 -3.286780649422e-02 + 5.928000000000e-10 8.487071769529e-02 + 6.028000000000e-10 1.772120847555e-01 + 6.128000000000e-10 2.405506532865e-01 + 6.228000000000e-10 2.794557736074e-01 + 6.328000000000e-10 3.024581955274e-01 + 6.428000000000e-10 3.145521515255e-01 + 6.528000000000e-10 3.039990633934e-01 + 6.628000000000e-10 2.513709142203e-01 + 6.728000000000e-10 1.543241408079e-01 + 6.828000000000e-10 3.278555364704e-02 + 6.928000000000e-10 -8.486327141666e-02 + 7.028000000000e-10 -1.772689800248e-01 + 7.128000000000e-10 -2.405282060865e-01 + 7.228000000000e-10 -2.795021370136e-01 + 7.328000000000e-10 -3.024278022377e-01 + 7.428000000000e-10 -3.145896170200e-01 + 7.528000000000e-10 -3.039617953787e-01 + 7.628000000000e-10 -2.514004690324e-01 + 7.728000000000e-10 -1.542820043229e-01 + 7.828000000000e-10 -3.281110337775e-02 + 7.928000000000e-10 8.490436306023e-02 + 8.028000000000e-10 1.772446330839e-01 + 8.128000000000e-10 2.405674335146e-01 + 8.228000000000e-10 2.794761963085e-01 + 8.328000000000e-10 3.024650976088e-01 + 8.428000000000e-10 3.145632644585e-01 + 8.528000000000e-10 3.039968961590e-01 + 8.628000000000e-10 2.513733111446e-01 + 8.728000000000e-10 1.543150179356e-01 + 8.828000000000e-10 3.278304586331e-02 + 8.928000000000e-10 -8.487456857602e-02 + 9.028000000000e-10 -1.772725618584e-01 + 9.128000000000e-10 -2.405389250041e-01 + 9.228000000000e-10 -2.795045102279e-01 + 9.328000000000e-10 -3.024372521320e-01 + 9.428000000000e-10 -3.145911572553e-01 + 9.528000000000e-10 -3.039701598993e-01 + 9.628000000000e-10 -2.514009218164e-01 + 9.728000000000e-10 -1.542887967264e-01 + 9.828000000000e-10 -3.280979517783e-02 + 9.928000000000e-10 8.489941508642e-02 + 1.000000000000e-09 1.544118489485e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/conditions.yaml new file mode 100644 index 00000000..41505a5d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 7 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_07 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/CML_core_tb.sch new file mode 100644 index 00000000..fcd09006 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/CML_core_tb_8.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/CML_core_tb_8.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/CML_core_tb_8.data new file mode 100644 index 00000000..b4ed17dd --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/CML_core_tb_8.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.722799425151e-01 + 1.728000000000e-10 -1.701277707773e-01 + 1.828000000000e-10 -4.252496989706e-02 + 1.928000000000e-10 8.092536896213e-02 + 2.028000000000e-10 1.785199933375e-01 + 2.128000000000e-10 2.463984181452e-01 + 2.228000000000e-10 2.885755113271e-01 + 2.328000000000e-10 3.131967480955e-01 + 2.428000000000e-10 3.255285716483e-01 + 2.528000000000e-10 3.143820454109e-01 + 2.628000000000e-10 2.595824958850e-01 + 2.728000000000e-10 1.585585813323e-01 + 2.828000000000e-10 3.254606172598e-02 + 2.928000000000e-10 -8.921916265210e-02 + 3.028000000000e-10 -1.857143058967e-01 + 3.128000000000e-10 -2.524588707093e-01 + 3.228000000000e-10 -2.937876617757e-01 + 3.328000000000e-10 -3.173655773168e-01 + 3.428000000000e-10 -3.288566343508e-01 + 3.528000000000e-10 -3.166123605828e-01 + 3.628000000000e-10 -2.609360611345e-01 + 3.728000000000e-10 -1.589355414621e-01 + 3.828000000000e-10 -3.237621747627e-02 + 3.928000000000e-10 8.990939637816e-02 + 4.028000000000e-10 1.864994737191e-01 + 4.128000000000e-10 2.533636311879e-01 + 4.228000000000e-10 2.945633129641e-01 + 4.328000000000e-10 3.182197832362e-01 + 4.428000000000e-10 3.296245618008e-01 + 4.528000000000e-10 3.174841059207e-01 + 4.628000000000e-10 2.616780558587e-01 + 4.728000000000e-10 1.596622360522e-01 + 4.828000000000e-10 3.287681921596e-02 + 4.928000000000e-10 -8.943999963453e-02 + 5.028000000000e-10 -1.862066308093e-01 + 5.128000000000e-10 -2.530527908612e-01 + 5.228000000000e-10 -2.943931136832e-01 + 5.328000000000e-10 -3.180152021024e-01 + 5.428000000000e-10 -3.295545667130e-01 + 5.528000000000e-10 -3.173812952412e-01 + 5.628000000000e-10 -2.617027726155e-01 + 5.728000000000e-10 -1.596411992093e-01 + 5.828000000000e-10 -3.295895028258e-02 + 5.928000000000e-10 8.942267434718e-02 + 6.028000000000e-10 1.861105403656e-01 + 6.128000000000e-10 2.530344325895e-01 + 6.228000000000e-10 2.943051008579e-01 + 6.328000000000e-10 3.180051485103e-01 + 6.428000000000e-10 3.294737915539e-01 + 6.528000000000e-10 3.173744791022e-01 + 6.628000000000e-10 2.616291881364e-01 + 6.728000000000e-10 1.596450333001e-01 + 6.828000000000e-10 3.290088244348e-02 + 6.928000000000e-10 -8.940659470005e-02 + 7.028000000000e-10 -1.861562133447e-01 + 7.128000000000e-10 -2.530116656482e-01 + 7.228000000000e-10 -2.943454309811e-01 + 7.328000000000e-10 -3.179780561670e-01 + 7.428000000000e-10 -3.295087969733e-01 + 7.528000000000e-10 -3.173438661274e-01 + 7.628000000000e-10 -2.616591955397e-01 + 7.728000000000e-10 -1.596115565426e-01 + 7.828000000000e-10 -3.292790237402e-02 + 7.928000000000e-10 8.943927261705e-02 + 8.028000000000e-10 1.861310420114e-01 + 8.128000000000e-10 2.530433655174e-01 + 8.228000000000e-10 2.943195630770e-01 + 8.328000000000e-10 3.180088285378e-01 + 8.428000000000e-10 3.294832118435e-01 + 8.528000000000e-10 3.173732295072e-01 + 8.628000000000e-10 2.616337486722e-01 + 8.728000000000e-10 1.596399004289e-01 + 8.828000000000e-10 3.290244884503e-02 + 8.928000000000e-10 -8.941301350766e-02 + 9.028000000000e-10 -1.861557185261e-01 + 9.128000000000e-10 -2.530180139920e-01 + 9.228000000000e-10 -2.943444772306e-01 + 9.328000000000e-10 -3.179838696148e-01 + 9.428000000000e-10 -3.295076633013e-01 + 9.528000000000e-10 -3.173492560727e-01 + 9.628000000000e-10 -2.616577755083e-01 + 9.728000000000e-10 -1.596163947717e-01 + 9.828000000000e-10 -3.292583900074e-02 + 9.928000000000e-10 8.943518431692e-02 + 1.000000000000e-09 1.621529465729e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/conditions.yaml new file mode 100644 index 00000000..19f53193 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 8 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_08 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/CML_core_tb.sch new file mode 100644 index 00000000..96bf1a1b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/CML_core_tb_9.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/CML_core_tb_9.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/CML_core_tb_9.data new file mode 100644 index 00000000..6b24d1d6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/CML_core_tb_9.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.622644182692e-01 + 1.728000000000e-10 -1.962653738736e-01 + 1.828000000000e-10 -5.712895575235e-03 + 1.928000000000e-10 1.510345047594e-01 + 2.028000000000e-10 2.432775412534e-01 + 2.128000000000e-10 2.772000132926e-01 + 2.228000000000e-10 3.161630086256e-01 + 2.328000000000e-10 3.654121904616e-01 + 2.428000000000e-10 4.070200809677e-01 + 2.528000000000e-10 4.211809118313e-01 + 2.628000000000e-10 3.552666659990e-01 + 2.728000000000e-10 1.954111420719e-01 + 2.828000000000e-10 7.499275151763e-03 + 2.928000000000e-10 -1.488912332472e-01 + 3.028000000000e-10 -2.420325529570e-01 + 3.128000000000e-10 -2.768171400503e-01 + 3.228000000000e-10 -3.164103191401e-01 + 3.328000000000e-10 -3.656815561297e-01 + 3.428000000000e-10 -4.072561733660e-01 + 3.528000000000e-10 -4.210637971044e-01 + 3.628000000000e-10 -3.548415521036e-01 + 3.728000000000e-10 -1.946286859654e-01 + 3.828000000000e-10 -6.746438981043e-03 + 3.928000000000e-10 1.496127957227e-01 + 4.028000000000e-10 2.425057762271e-01 + 4.128000000000e-10 2.772590268750e-01 + 4.228000000000e-10 3.167075169816e-01 + 4.328000000000e-10 3.660182242119e-01 + 4.428000000000e-10 4.074726111052e-01 + 4.528000000000e-10 4.212975956202e-01 + 4.628000000000e-10 3.549573822535e-01 + 4.728000000000e-10 1.947835560361e-01 + 4.828000000000e-10 6.801482567115e-03 + 4.928000000000e-10 -1.495086456760e-01 + 5.028000000000e-10 -2.424863730465e-01 + 5.128000000000e-10 -2.771744431737e-01 + 5.228000000000e-10 -3.166940000076e-01 + 5.328000000000e-10 -3.659398771497e-01 + 5.428000000000e-10 -4.074689465730e-01 + 5.528000000000e-10 -4.212394549000e-01 + 5.628000000000e-10 -3.549741510035e-01 + 5.728000000000e-10 -1.947436351784e-01 + 5.828000000000e-10 -6.830080160870e-03 + 5.928000000000e-10 1.495407150967e-01 + 6.028000000000e-10 2.424570295697e-01 + 6.128000000000e-10 2.772066160972e-01 + 6.228000000000e-10 3.166654934082e-01 + 6.328000000000e-10 3.659723864247e-01 + 6.428000000000e-10 4.074416211051e-01 + 6.528000000000e-10 4.212697301261e-01 + 6.628000000000e-10 3.549467093259e-01 + 6.728000000000e-10 1.947718238583e-01 + 6.828000000000e-10 6.800951177238e-03 + 6.928000000000e-10 -1.495148390529e-01 + 7.028000000000e-10 -2.424852043575e-01 + 7.128000000000e-10 -2.771809105751e-01 + 7.228000000000e-10 -3.166930947909e-01 + 7.328000000000e-10 -3.659459016360e-01 + 7.428000000000e-10 -4.074677461547e-01 + 7.528000000000e-10 -4.212442717757e-01 + 7.628000000000e-10 -3.549717520551e-01 + 7.728000000000e-10 -1.947463263521e-01 + 7.828000000000e-10 -6.825916545420e-03 + 7.928000000000e-10 1.495385751436e-01 + 8.028000000000e-10 2.424609931904e-01 + 8.128000000000e-10 2.772040406871e-01 + 8.228000000000e-10 3.166687905139e-01 + 8.328000000000e-10 3.659694951712e-01 + 8.428000000000e-10 4.074447010218e-01 + 8.528000000000e-10 4.212671408417e-01 + 8.628000000000e-10 3.549498827484e-01 + 8.728000000000e-10 1.947689363825e-01 + 8.828000000000e-10 6.803756635994e-03 + 8.928000000000e-10 -1.495176738691e-01 + 9.028000000000e-10 -2.424825342063e-01 + 9.128000000000e-10 -2.771836734306e-01 + 9.228000000000e-10 -3.166902103892e-01 + 9.328000000000e-10 -3.659485359213e-01 + 9.428000000000e-10 -4.074650210911e-01 + 9.528000000000e-10 -4.212469657833e-01 + 9.628000000000e-10 -3.549694058275e-01 + 9.728000000000e-10 -1.947487958951e-01 + 9.828000000000e-10 -6.823236278537e-03 + 9.928000000000e-10 1.495363177485e-01 + 1.000000000000e-09 2.250264100511e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/conditions.yaml new file mode 100644 index 00000000..561e7f4b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 9 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_09 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/CML_core_tb.sch new file mode 100644 index 00000000..f48bc806 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/CML_core_tb_10.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/CML_core_tb_10.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/CML_core_tb_10.data new file mode 100644 index 00000000..f64d27bb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/CML_core_tb_10.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.621881537650e-01 + 1.728000000000e-10 -1.984429143572e-01 + 1.828000000000e-10 -1.024381876325e-02 + 1.928000000000e-10 1.456486678579e-01 + 2.028000000000e-10 2.379497773075e-01 + 2.128000000000e-10 2.714724605336e-01 + 2.228000000000e-10 3.108042897090e-01 + 2.328000000000e-10 3.600441003378e-01 + 2.428000000000e-10 4.020596908788e-01 + 2.528000000000e-10 4.176332246346e-01 + 2.628000000000e-10 3.534480183483e-01 + 2.728000000000e-10 1.957884716864e-01 + 2.828000000000e-10 1.048070619246e-02 + 2.928000000000e-10 -1.446967472000e-01 + 3.028000000000e-10 -2.375576326508e-01 + 3.128000000000e-10 -2.717915022579e-01 + 3.228000000000e-10 -3.116603869888e-01 + 3.328000000000e-10 -3.608573425706e-01 + 3.428000000000e-10 -4.027490548925e-01 + 3.528000000000e-10 -4.178578104758e-01 + 3.628000000000e-10 -3.532507313188e-01 + 3.728000000000e-10 -1.951536666098e-01 + 3.828000000000e-10 -9.813336101525e-03 + 3.928000000000e-10 1.453604720604e-01 + 4.028000000000e-10 2.379857130154e-01 + 4.128000000000e-10 2.721818635676e-01 + 4.228000000000e-10 3.119088225778e-01 + 4.328000000000e-10 3.611475798924e-01 + 4.428000000000e-10 4.029304727738e-01 + 4.528000000000e-10 4.180700216423e-01 + 4.628000000000e-10 3.533627988360e-01 + 4.728000000000e-10 1.953149158213e-01 + 4.828000000000e-10 9.881134950277e-03 + 4.928000000000e-10 -1.452466419838e-01 + 5.028000000000e-10 -2.379576224969e-01 + 5.128000000000e-10 -2.720935242692e-01 + 5.228000000000e-10 -3.118909714313e-01 + 5.328000000000e-10 -3.610674239906e-01 + 5.428000000000e-10 -4.029229661263e-01 + 5.528000000000e-10 -4.180098057029e-01 + 5.628000000000e-10 -3.533753449283e-01 + 5.728000000000e-10 -1.952727841385e-01 + 5.828000000000e-10 -9.906008920915e-03 + 5.928000000000e-10 1.452800172029e-01 + 6.028000000000e-10 2.379306740359e-01 + 6.128000000000e-10 2.721261300904e-01 + 6.228000000000e-10 3.118646486801e-01 + 6.328000000000e-10 3.611003417151e-01 + 6.428000000000e-10 4.028972890619e-01 + 6.528000000000e-10 4.180401129989e-01 + 6.628000000000e-10 3.533488930459e-01 + 6.728000000000e-10 1.953007885397e-01 + 6.828000000000e-10 9.878072761317e-03 + 6.928000000000e-10 -1.452545395230e-01 + 7.028000000000e-10 -2.379578117562e-01 + 7.128000000000e-10 -2.721008877684e-01 + 7.228000000000e-10 -3.118914026492e-01 + 7.328000000000e-10 -3.610744602697e-01 + 7.428000000000e-10 -4.029226014194e-01 + 7.528000000000e-10 -4.180151483436e-01 + 7.628000000000e-10 -3.533732531474e-01 + 7.728000000000e-10 -1.952759500525e-01 + 7.828000000000e-10 -9.902411226855e-03 + 7.928000000000e-10 1.452776462046e-01 + 8.028000000000e-10 2.379341379884e-01 + 8.128000000000e-10 2.721234101956e-01 + 8.228000000000e-10 3.118677116052e-01 + 8.328000000000e-10 3.610975209728e-01 + 8.428000000000e-10 4.029000595077e-01 + 8.528000000000e-10 4.180375331400e-01 + 8.628000000000e-10 3.533517750284e-01 + 8.728000000000e-10 1.952981248182e-01 + 8.828000000000e-10 9.880873061622e-03 + 8.928000000000e-10 -1.452571579233e-01 + 9.028000000000e-10 -2.379551078725e-01 + 9.128000000000e-10 -2.721034614056e-01 + 9.228000000000e-10 -3.118886463518e-01 + 9.328000000000e-10 -3.610770519544e-01 + 9.428000000000e-10 -4.029199107687e-01 + 9.528000000000e-10 -4.180177452829e-01 + 9.628000000000e-10 -3.533708821878e-01 + 9.728000000000e-10 -1.952784134813e-01 + 9.828000000000e-10 -9.899898542678e-03 + 9.928000000000e-10 1.452754037376e-01 + 1.000000000000e-09 2.207322871295e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/conditions.yaml new file mode 100644 index 00000000..7768d786 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 10 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_10 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/CML_core_tb.sch new file mode 100644 index 00000000..5cba2556 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/CML_core_tb_11.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/CML_core_tb_11.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/CML_core_tb_11.data new file mode 100644 index 00000000..1453012b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/CML_core_tb_11.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.668500025046e-01 + 1.728000000000e-10 -1.978704758130e-01 + 1.828000000000e-10 -3.069550951996e-03 + 1.928000000000e-10 1.561389387989e-01 + 2.028000000000e-10 2.488697408913e-01 + 2.128000000000e-10 2.833379270136e-01 + 2.228000000000e-10 3.221467647695e-01 + 2.328000000000e-10 3.723176028273e-01 + 2.428000000000e-10 4.147931582649e-01 + 2.528000000000e-10 4.286646301121e-01 + 2.628000000000e-10 3.614677855799e-01 + 2.728000000000e-10 1.982726052647e-01 + 2.828000000000e-10 5.580533140739e-03 + 2.928000000000e-10 -1.536551403474e-01 + 3.028000000000e-10 -2.474729097395e-01 + 3.128000000000e-10 -2.827981749211e-01 + 3.228000000000e-10 -3.222400643179e-01 + 3.328000000000e-10 -3.724510578191e-01 + 3.428000000000e-10 -4.149487937489e-01 + 3.528000000000e-10 -4.285094572794e-01 + 3.628000000000e-10 -3.610716711123e-01 + 3.728000000000e-10 -1.975613483211e-01 + 3.828000000000e-10 -4.936396792217e-03 + 3.928000000000e-10 1.542720670721e-01 + 4.028000000000e-10 2.478554934965e-01 + 4.128000000000e-10 2.831768205427e-01 + 4.228000000000e-10 3.224764565266e-01 + 4.328000000000e-10 3.727376628527e-01 + 4.428000000000e-10 4.151128450004e-01 + 4.528000000000e-10 4.287030398326e-01 + 4.628000000000e-10 3.611465460996e-01 + 4.728000000000e-10 1.976871290976e-01 + 4.828000000000e-10 4.962067120498e-03 + 4.928000000000e-10 -1.541857483448e-01 + 5.028000000000e-10 -2.478549856990e-01 + 5.128000000000e-10 -2.831031432303e-01 + 5.228000000000e-10 -3.224786212940e-01 + 5.328000000000e-10 -3.726675199031e-01 + 5.428000000000e-10 -4.151222726988e-01 + 5.528000000000e-10 -4.286496175832e-01 + 5.628000000000e-10 -3.611719348809e-01 + 5.728000000000e-10 -1.976471175954e-01 + 5.828000000000e-10 -4.995016715658e-03 + 5.928000000000e-10 1.542195273485e-01 + 6.028000000000e-10 2.478226151197e-01 + 6.128000000000e-10 2.831371441394e-01 + 6.228000000000e-10 3.224465270882e-01 + 6.328000000000e-10 3.727020829784e-01 + 6.428000000000e-10 4.150919188021e-01 + 6.528000000000e-10 4.286821395136e-01 + 6.628000000000e-10 3.611419365066e-01 + 6.728000000000e-10 1.976777927703e-01 + 6.828000000000e-10 4.963507878799e-03 + 6.928000000000e-10 -1.541913949207e-01 + 7.028000000000e-10 -2.478529800499e-01 + 7.128000000000e-10 -2.831092109235e-01 + 7.228000000000e-10 -3.224762894768e-01 + 7.328000000000e-10 -3.726728668334e-01 + 7.428000000000e-10 -4.151201370880e-01 + 7.528000000000e-10 -4.286543531433e-01 + 7.628000000000e-10 -3.611692599178e-01 + 7.728000000000e-10 -1.976499135935e-01 + 7.828000000000e-10 -4.990471824028e-03 + 7.928000000000e-10 1.542171227717e-01 + 8.028000000000e-10 2.478269854332e-01 + 8.128000000000e-10 2.831343470853e-01 + 8.228000000000e-10 3.224500362551e-01 + 8.328000000000e-10 3.726987138014e-01 + 8.428000000000e-10 4.150953468135e-01 + 8.528000000000e-10 4.286792233560e-01 + 8.628000000000e-10 3.611455588852e-01 + 8.728000000000e-10 1.976743961081e-01 + 8.828000000000e-10 4.966432661841e-03 + 8.928000000000e-10 -1.541946484524e-01 + 9.028000000000e-10 -2.478502288236e-01 + 9.128000000000e-10 -2.831123474050e-01 + 9.228000000000e-10 -3.224731331421e-01 + 9.328000000000e-10 -3.726757720747e-01 + 9.428000000000e-10 -4.151172388981e-01 + 9.528000000000e-10 -4.286573581279e-01 + 9.628000000000e-10 -3.611667698498e-01 + 9.728000000000e-10 -1.976525646923e-01 + 9.828000000000e-10 -4.987471597641e-03 + 9.928000000000e-10 1.542147143463e-01 + 1.000000000000e-09 2.301006397866e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/conditions.yaml new file mode 100644 index 00000000..b38c5caf --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 11 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_11 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/CML_core_tb.sch new file mode 100644 index 00000000..db264c8b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/CML_core_tb_12.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/CML_core_tb_12.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/CML_core_tb_12.data new file mode 100644 index 00000000..3b0782c6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/CML_core_tb_12.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.388323931118e-01 + 1.728000000000e-10 -1.851651732117e-01 + 1.828000000000e-10 -4.985209728467e-03 + 1.928000000000e-10 1.464303664236e-01 + 2.028000000000e-10 2.390890865534e-01 + 2.128000000000e-10 2.778147857521e-01 + 2.228000000000e-10 3.140298283994e-01 + 2.328000000000e-10 3.564486269316e-01 + 2.428000000000e-10 3.920777300126e-01 + 2.528000000000e-10 4.026431485981e-01 + 2.628000000000e-10 3.407818057760e-01 + 2.728000000000e-10 1.919413521399e-01 + 2.828000000000e-10 1.380608162301e-02 + 2.928000000000e-10 -1.377275777470e-01 + 3.028000000000e-10 -2.320727525709e-01 + 3.128000000000e-10 -2.723718882130e-01 + 3.228000000000e-10 -3.097195919600e-01 + 3.328000000000e-10 -3.525356430610e-01 + 3.428000000000e-10 -3.885938438581e-01 + 3.528000000000e-10 -3.995683250409e-01 + 3.628000000000e-10 -3.382392747069e-01 + 3.728000000000e-10 -1.897685835172e-01 + 3.828000000000e-10 -1.211190537496e-02 + 3.928000000000e-10 1.391365825109e-01 + 4.028000000000e-10 2.331433172305e-01 + 4.128000000000e-10 2.733678679410e-01 + 4.228000000000e-10 3.105714733021e-01 + 4.328000000000e-10 3.533708758772e-01 + 4.428000000000e-10 3.892622592719e-01 + 4.528000000000e-10 4.001272859757e-01 + 4.628000000000e-10 3.385642563623e-01 + 4.728000000000e-10 1.899916781684e-01 + 4.828000000000e-10 1.218033620775e-02 + 4.928000000000e-10 -1.390656421002e-01 + 5.028000000000e-10 -2.331398693887e-01 + 5.128000000000e-10 -2.733037181082e-01 + 5.228000000000e-10 -3.105518491305e-01 + 5.328000000000e-10 -3.533032068815e-01 + 5.428000000000e-10 -3.892531494066e-01 + 5.528000000000e-10 -4.000849100741e-01 + 5.628000000000e-10 -3.385845178207e-01 + 5.728000000000e-10 -1.899774211598e-01 + 5.828000000000e-10 -1.221996984529e-02 + 5.928000000000e-10 1.390720456320e-01 + 6.028000000000e-10 2.331027694491e-01 + 6.128000000000e-10 2.733156842718e-01 + 6.228000000000e-10 3.105197170718e-01 + 6.328000000000e-10 3.533171034352e-01 + 6.428000000000e-10 3.892243222051e-01 + 6.528000000000e-10 4.000997182403e-01 + 6.628000000000e-10 3.385594083538e-01 + 6.728000000000e-10 1.899934277570e-01 + 6.828000000000e-10 1.219466050150e-02 + 6.928000000000e-10 -1.390553921853e-01 + 7.028000000000e-10 -2.331263672195e-01 + 7.128000000000e-10 -2.732987102222e-01 + 7.228000000000e-10 -3.105421090081e-01 + 7.328000000000e-10 -3.532994962925e-01 + 7.428000000000e-10 -3.892451651423e-01 + 7.528000000000e-10 -4.000824543639e-01 + 7.628000000000e-10 -3.385783830881e-01 + 7.728000000000e-10 -1.899748483052e-01 + 7.828000000000e-10 -1.221334688082e-02 + 7.928000000000e-10 1.390733351530e-01 + 8.028000000000e-10 2.331082732353e-01 + 8.128000000000e-10 2.733160005972e-01 + 8.228000000000e-10 3.105237742784e-01 + 8.328000000000e-10 3.533165556732e-01 + 8.428000000000e-10 3.892279285214e-01 + 8.528000000000e-10 4.000991009611e-01 + 8.628000000000e-10 3.385625511294e-01 + 8.728000000000e-10 1.899914169425e-01 + 8.828000000000e-10 1.219669858142e-02 + 8.928000000000e-10 -1.390576717936e-01 + 9.028000000000e-10 -2.331245304799e-01 + 9.128000000000e-10 -2.733009677599e-01 + 9.228000000000e-10 -3.105397739050e-01 + 9.328000000000e-10 -3.533012749995e-01 + 9.428000000000e-10 -3.892430673555e-01 + 9.528000000000e-10 -4.000844420176e-01 + 9.628000000000e-10 -3.385768441038e-01 + 9.728000000000e-10 -1.899764612955e-01 + 9.828000000000e-10 -1.221122328152e-02 + 9.928000000000e-10 1.390717643268e-01 + 1.000000000000e-09 2.142511381663e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/conditions.yaml new file mode 100644 index 00000000..4928cb28 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 12 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_12 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/CML_core_tb.sch new file mode 100644 index 00000000..c09405b7 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/CML_core_tb_13.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/CML_core_tb_13.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/CML_core_tb_13.data new file mode 100644 index 00000000..36de6040 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/CML_core_tb_13.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.406999838743e-01 + 1.728000000000e-10 -1.879936990253e-01 + 1.828000000000e-10 -9.262901303246e-03 + 1.928000000000e-10 1.413611635485e-01 + 2.028000000000e-10 2.336775345801e-01 + 2.128000000000e-10 2.717294842894e-01 + 2.228000000000e-10 3.082620487639e-01 + 2.328000000000e-10 3.509422339502e-01 + 2.428000000000e-10 3.871053596645e-01 + 2.528000000000e-10 3.988940820744e-01 + 2.628000000000e-10 3.384312270542e-01 + 2.728000000000e-10 1.913281233779e-01 + 2.828000000000e-10 1.537343295661e-02 + 2.928000000000e-10 -1.347916275204e-01 + 3.028000000000e-10 -2.283419665374e-01 + 3.128000000000e-10 -2.677291408127e-01 + 3.228000000000e-10 -3.052231075401e-01 + 3.328000000000e-10 -3.481601477547e-01 + 3.428000000000e-10 -3.845854123080e-01 + 3.528000000000e-10 -3.965379624605e-01 + 3.628000000000e-10 -3.363314255870e-01 + 3.728000000000e-10 -1.893723794407e-01 + 3.828000000000e-10 -1.375643865463e-02 + 3.928000000000e-10 1.361849816757e-01 + 4.028000000000e-10 2.294005939140e-01 + 4.128000000000e-10 2.686949729273e-01 + 4.228000000000e-10 3.060328157788e-01 + 4.328000000000e-10 3.489590274886e-01 + 4.428000000000e-10 3.852266672724e-01 + 4.528000000000e-10 3.970921187630e-01 + 4.628000000000e-10 3.366736237881e-01 + 4.728000000000e-10 1.896320772426e-01 + 4.828000000000e-10 1.386475371506e-02 + 4.928000000000e-10 -1.360753156283e-01 + 5.028000000000e-10 -2.293675908871e-01 + 5.128000000000e-10 -2.686062530832e-01 + 5.228000000000e-10 -3.059945800423e-01 + 5.328000000000e-10 -3.488729675224e-01 + 5.428000000000e-10 -3.852026785029e-01 + 5.528000000000e-10 -3.970350594993e-01 + 5.628000000000e-10 -3.366834486256e-01 + 5.728000000000e-10 -1.896077423819e-01 + 5.828000000000e-10 -1.389840122586e-02 + 5.928000000000e-10 1.360876217327e-01 + 6.028000000000e-10 2.293336021557e-01 + 6.128000000000e-10 2.686225622920e-01 + 6.228000000000e-10 3.059648098566e-01 + 6.328000000000e-10 3.488907093130e-01 + 6.428000000000e-10 3.851753633828e-01 + 6.528000000000e-10 3.970526526302e-01 + 6.628000000000e-10 3.366583891048e-01 + 6.728000000000e-10 1.896251667832e-01 + 6.828000000000e-10 1.387242911077e-02 + 6.928000000000e-10 -1.360702314024e-01 + 7.028000000000e-10 -2.293580006158e-01 + 7.128000000000e-10 -2.686047945045e-01 + 7.228000000000e-10 -3.059879182353e-01 + 7.328000000000e-10 -3.488722408399e-01 + 7.428000000000e-10 -3.851969589401e-01 + 7.528000000000e-10 -3.970345404264e-01 + 7.628000000000e-10 -3.366782708831e-01 + 7.728000000000e-10 -1.896058621860e-01 + 7.828000000000e-10 -1.389192450355e-02 + 7.928000000000e-10 1.360888260036e-01 + 8.028000000000e-10 2.293391038565e-01 + 8.128000000000e-10 2.686227634282e-01 + 8.228000000000e-10 3.059688096850e-01 + 8.328000000000e-10 3.488900661997e-01 + 8.428000000000e-10 3.851789257250e-01 + 8.528000000000e-10 3.970519764807e-01 + 8.628000000000e-10 3.366616134215e-01 + 8.728000000000e-10 1.896231972496e-01 + 8.828000000000e-10 1.387461571983e-02 + 8.928000000000e-10 -1.360724758723e-01 + 9.028000000000e-10 -2.293560182270e-01 + 9.128000000000e-10 -2.686070528237e-01 + 9.228000000000e-10 -3.059854790954e-01 + 9.328000000000e-10 -3.488740842624e-01 + 9.428000000000e-10 -3.851947329758e-01 + 9.528000000000e-10 -3.970365843841e-01 + 9.628000000000e-10 -3.366766115599e-01 + 9.728000000000e-10 -1.896075309897e-01 + 9.828000000000e-10 -1.388973786858e-02 + 9.928000000000e-10 1.360872156510e-01 + 1.000000000000e-09 2.108297225004e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/conditions.yaml new file mode 100644 index 00000000..24d6b9db --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 13 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_13 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/CML_core_tb.sch new file mode 100644 index 00000000..83f5a899 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/CML_core_tb_14.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/CML_core_tb_14.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/CML_core_tb_14.data new file mode 100644 index 00000000..73c31d13 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/CML_core_tb_14.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.445927026449e-01 + 1.728000000000e-10 -1.889320969581e-01 + 1.828000000000e-10 -5.355234564888e-03 + 1.928000000000e-10 1.489911128277e-01 + 2.028000000000e-10 2.434822449071e-01 + 2.128000000000e-10 2.838702060450e-01 + 2.228000000000e-10 3.202156401988e-01 + 2.328000000000e-10 3.629401474789e-01 + 2.428000000000e-10 3.990998051164e-01 + 2.528000000000e-10 4.099063275401e-01 + 2.628000000000e-10 3.477923521709e-01 + 2.728000000000e-10 1.968519788675e-01 + 2.828000000000e-10 1.493750763318e-02 + 2.928000000000e-10 -1.398437743336e-01 + 3.028000000000e-10 -2.362338093992e-01 + 3.128000000000e-10 -2.782887085314e-01 + 3.228000000000e-10 -3.158910292643e-01 + 3.328000000000e-10 -3.590893499920e-01 + 3.428000000000e-10 -3.957248346768e-01 + 3.528000000000e-10 -4.069627998073e-01 + 3.628000000000e-10 -3.454070734708e-01 + 3.728000000000e-10 -1.948243362004e-01 + 3.828000000000e-10 -1.337926088934e-02 + 3.928000000000e-10 1.411472162204e-01 + 4.028000000000e-10 2.372231231196e-01 + 4.128000000000e-10 2.792284454069e-01 + 4.228000000000e-10 3.166817589057e-01 + 4.328000000000e-10 3.598702175634e-01 + 4.428000000000e-10 3.963375250752e-01 + 4.528000000000e-10 4.074753309124e-01 + 4.628000000000e-10 3.456854225481e-01 + 4.728000000000e-10 1.950177434222e-01 + 4.828000000000e-10 1.342430394201e-02 + 4.928000000000e-10 -1.410850608466e-01 + 5.028000000000e-10 -2.372286880899e-01 + 5.128000000000e-10 -2.791659662153e-01 + 5.228000000000e-10 -3.166689293508e-01 + 5.328000000000e-10 -3.598026374101e-01 + 5.428000000000e-10 -3.963331138013e-01 + 5.528000000000e-10 -4.074316676804e-01 + 5.628000000000e-10 -3.457088001737e-01 + 5.728000000000e-10 -1.950000158899e-01 + 5.828000000000e-10 -1.346504722293e-02 + 5.928000000000e-10 1.410957635246e-01 + 6.028000000000e-10 2.371909425038e-01 + 6.128000000000e-10 2.791817404178e-01 + 6.228000000000e-10 3.166356138828e-01 + 6.328000000000e-10 3.598203377806e-01 + 6.428000000000e-10 3.963033609435e-01 + 6.528000000000e-10 4.074499160221e-01 + 6.628000000000e-10 3.456826167292e-01 + 6.728000000000e-10 1.950190841630e-01 + 6.828000000000e-10 1.343803454206e-02 + 6.928000000000e-10 -1.410764950259e-01 + 7.028000000000e-10 -2.372163265848e-01 + 7.128000000000e-10 -2.791624229651e-01 + 7.228000000000e-10 -3.166599225368e-01 + 7.328000000000e-10 -3.598002455584e-01 + 7.428000000000e-10 -3.963259615583e-01 + 7.528000000000e-10 -4.074304662079e-01 + 7.628000000000e-10 -3.457033629648e-01 + 7.728000000000e-10 -1.949983704767e-01 + 7.828000000000e-10 -1.345872104163e-02 + 7.928000000000e-10 1.410962716693e-01 + 8.028000000000e-10 2.371963808526e-01 + 8.128000000000e-10 2.791814500218e-01 + 8.228000000000e-10 3.166396456569e-01 + 8.328000000000e-10 3.598191409746e-01 + 8.428000000000e-10 3.963069790813e-01 + 8.528000000000e-10 4.074488078929e-01 + 8.628000000000e-10 3.456858987705e-01 + 8.728000000000e-10 1.950166421641e-01 + 8.828000000000e-10 1.344025602045e-02 + 8.928000000000e-10 -1.410790665154e-01 + 9.028000000000e-10 -2.372142995262e-01 + 9.128000000000e-10 -2.791649325552e-01 + 9.228000000000e-10 -3.166573514474e-01 + 9.328000000000e-10 -3.598022359716e-01 + 9.428000000000e-10 -3.963236588924e-01 + 9.528000000000e-10 -4.074326778223e-01 + 9.628000000000e-10 -3.457016440453e-01 + 9.728000000000e-10 -1.950001702792e-01 + 9.828000000000e-10 -1.345633761364e-02 + 9.928000000000e-10 1.410945129066e-01 + 1.000000000000e-09 2.176807579100e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/conditions.yaml new file mode 100644 index 00000000..42b6b28f --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 14 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_14 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/CML_core_tb.sch new file mode 100644 index 00000000..05004060 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/CML_core_tb_15.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/CML_core_tb_15.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/CML_core_tb_15.data new file mode 100644 index 00000000..6f87c434 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/CML_core_tb_15.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.831577979118e-01 + 1.728000000000e-10 -1.548331321524e-01 + 1.828000000000e-10 2.954507991941e-03 + 1.928000000000e-10 1.412083661187e-01 + 2.028000000000e-10 2.303947789211e-01 + 2.128000000000e-10 2.725788032239e-01 + 2.228000000000e-10 3.064646814943e-01 + 2.328000000000e-10 3.412898568956e-01 + 2.428000000000e-10 3.692979025942e-01 + 2.528000000000e-10 3.751979264520e-01 + 2.628000000000e-10 3.186495551608e-01 + 2.728000000000e-10 1.849115684226e-01 + 2.828000000000e-10 2.146912258403e-02 + 2.928000000000e-10 -1.215319416200e-01 + 3.028000000000e-10 -2.147336364713e-01 + 3.128000000000e-10 -2.593628319189e-01 + 3.228000000000e-10 -2.947919001104e-01 + 3.328000000000e-10 -3.306034656465e-01 + 3.428000000000e-10 -3.598903423599e-01 + 3.528000000000e-10 -3.674806029527e-01 + 3.628000000000e-10 -3.131864519443e-01 + 3.728000000000e-10 -1.816607205648e-01 + 3.828000000000e-10 -2.002885045896e-02 + 3.928000000000e-10 1.219326732879e-01 + 4.028000000000e-10 2.146583452252e-01 + 4.128000000000e-10 2.593288859790e-01 + 4.228000000000e-10 2.947836961551e-01 + 4.328000000000e-10 3.305873089453e-01 + 4.428000000000e-10 3.597520160348e-01 + 4.528000000000e-10 3.672634041173e-01 + 4.628000000000e-10 3.128292575731e-01 + 4.728000000000e-10 1.812525079401e-01 + 4.828000000000e-10 1.956255085056e-02 + 4.928000000000e-10 -1.223539241893e-01 + 5.028000000000e-10 -2.150587893921e-01 + 5.128000000000e-10 -2.596440912838e-01 + 5.228000000000e-10 -2.950896959018e-01 + 5.328000000000e-10 -3.308452440946e-01 + 5.428000000000e-10 -3.600168265621e-01 + 5.528000000000e-10 -3.674687038170e-01 + 5.628000000000e-10 -3.130140501398e-01 + 5.728000000000e-10 -1.813584327872e-01 + 5.828000000000e-10 -1.965159115909e-02 + 5.928000000000e-10 1.223212864923e-01 + 6.028000000000e-10 2.150157103205e-01 + 6.128000000000e-10 2.596318060931e-01 + 6.228000000000e-10 2.950524078153e-01 + 6.328000000000e-10 3.308363963911e-01 + 6.428000000000e-10 3.599874022300e-01 + 6.528000000000e-10 3.674690181116e-01 + 6.628000000000e-10 3.129980588961e-01 + 6.728000000000e-10 1.813712653368e-01 + 6.828000000000e-10 1.964491680526e-02 + 6.928000000000e-10 -1.223023112353e-01 + 7.028000000000e-10 -2.150202483004e-01 + 7.128000000000e-10 -2.596144309164e-01 + 7.228000000000e-10 -2.950582886643e-01 + 7.328000000000e-10 -3.308199600200e-01 + 7.428000000000e-10 -3.599931640339e-01 + 7.528000000000e-10 -3.674538095645e-01 + 7.628000000000e-10 -3.130042913922e-01 + 7.728000000000e-10 -1.813570925598e-01 + 7.828000000000e-10 -1.965290666609e-02 + 7.928000000000e-10 1.223145971689e-01 + 8.028000000000e-10 2.150114430495e-01 + 8.128000000000e-10 2.596256780136e-01 + 8.228000000000e-10 2.950490452158e-01 + 8.328000000000e-10 3.308307530718e-01 + 8.428000000000e-10 3.599842799802e-01 + 8.528000000000e-10 3.674639698479e-01 + 8.628000000000e-10 3.129957925611e-01 + 8.728000000000e-10 1.813666711568e-01 + 8.828000000000e-10 1.964348030724e-02 + 8.928000000000e-10 -1.223056361887e-01 + 9.028000000000e-10 -2.150207890100e-01 + 9.128000000000e-10 -2.596171721225e-01 + 9.228000000000e-10 -2.950581404305e-01 + 9.328000000000e-10 -3.308221104591e-01 + 9.428000000000e-10 -3.599929167296e-01 + 9.528000000000e-10 -3.674557320782e-01 + 9.628000000000e-10 -3.130039671541e-01 + 9.728000000000e-10 -1.813582011282e-01 + 9.828000000000e-10 -1.965175786777e-02 + 9.928000000000e-10 1.223137237372e-01 + 1.000000000000e-09 1.953703252853e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/conditions.yaml new file mode 100644 index 00000000..f60efffa --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 15 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_15 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/CML_core_tb.sch new file mode 100644 index 00000000..e55a8b0d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/CML_core_tb_16.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/CML_core_tb_16.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/CML_core_tb_16.data new file mode 100644 index 00000000..c0c44c66 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/CML_core_tb_16.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.908214410229e-01 + 1.728000000000e-10 -1.609006026552e-01 + 1.828000000000e-10 -2.321243117629e-03 + 1.928000000000e-10 1.363185315112e-01 + 2.028000000000e-10 2.253864999197e-01 + 2.128000000000e-10 2.667546328680e-01 + 2.228000000000e-10 3.007016001191e-01 + 2.328000000000e-10 3.359037685855e-01 + 2.428000000000e-10 3.646369081917e-01 + 2.528000000000e-10 3.717564842409e-01 + 2.628000000000e-10 3.164681086559e-01 + 2.728000000000e-10 1.842122200319e-01 + 2.828000000000e-10 2.261788955655e-02 + 2.928000000000e-10 -1.190364341005e-01 + 3.028000000000e-10 -2.112326750882e-01 + 3.128000000000e-10 -2.547832728498e-01 + 3.228000000000e-10 -2.901354995194e-01 + 3.328000000000e-10 -3.261256516764e-01 + 3.428000000000e-10 -3.558916364396e-01 + 3.528000000000e-10 -3.643768878587e-01 + 3.628000000000e-10 -3.109660871267e-01 + 3.728000000000e-10 -1.806005122430e-01 + 3.828000000000e-10 -2.063463882859e-02 + 3.928000000000e-10 1.200417121301e-01 + 4.028000000000e-10 2.117115066678e-01 + 4.128000000000e-10 2.552245954862e-01 + 4.228000000000e-10 2.905358174314e-01 + 4.328000000000e-10 3.264964127076e-01 + 4.428000000000e-10 3.561164409890e-01 + 4.528000000000e-10 3.644937527082e-01 + 4.628000000000e-10 3.108863598347e-01 + 4.728000000000e-10 1.804066968471e-01 + 4.828000000000e-10 2.031749353463e-02 + 4.928000000000e-10 -1.203543467152e-01 + 5.028000000000e-10 -2.120338656010e-01 + 5.128000000000e-10 -2.554694201182e-01 + 5.228000000000e-10 -2.907816217466e-01 + 5.328000000000e-10 -3.266973931907e-01 + 5.428000000000e-10 -3.563354715244e-01 + 5.528000000000e-10 -3.646612654323e-01 + 5.628000000000e-10 -3.110514282819e-01 + 5.728000000000e-10 -1.805042989376e-01 + 5.828000000000e-10 -2.041198102925e-02 + 5.928000000000e-10 1.203139122453e-01 + 6.028000000000e-10 2.119789678115e-01 + 6.128000000000e-10 2.554499136191e-01 + 6.228000000000e-10 2.907352766216e-01 + 6.328000000000e-10 3.266827936599e-01 + 6.428000000000e-10 3.562972261563e-01 + 6.528000000000e-10 3.646559193667e-01 + 6.628000000000e-10 3.110272539685e-01 + 6.728000000000e-10 1.805126920434e-01 + 6.828000000000e-10 2.039901072518e-02 + 6.928000000000e-10 -1.202975671206e-01 + 7.028000000000e-10 -2.119881389434e-01 + 7.128000000000e-10 -2.554339974826e-01 + 7.228000000000e-10 -2.907449786827e-01 + 7.328000000000e-10 -3.266672756474e-01 + 7.428000000000e-10 -3.563063206496e-01 + 7.528000000000e-10 -3.646410588059e-01 + 7.628000000000e-10 -3.110359790738e-01 + 7.728000000000e-10 -1.804978632753e-01 + 7.828000000000e-10 -2.040852410596e-02 + 7.928000000000e-10 1.203110667878e-01 + 8.028000000000e-10 2.119781439274e-01 + 8.128000000000e-10 2.554465105638e-01 + 8.228000000000e-10 2.907345088651e-01 + 8.328000000000e-10 3.266793442083e-01 + 8.428000000000e-10 3.562962712815e-01 + 8.528000000000e-10 3.646525269207e-01 + 8.628000000000e-10 3.110264147595e-01 + 8.728000000000e-10 1.805087495738e-01 + 8.828000000000e-10 2.039807927138e-02 + 8.928000000000e-10 -1.203008828088e-01 + 9.028000000000e-10 -2.119885143169e-01 + 9.128000000000e-10 -2.554368509477e-01 + 9.228000000000e-10 -2.907446372900e-01 + 9.328000000000e-10 -3.266695427412e-01 + 9.428000000000e-10 -3.563059183968e-01 + 9.528000000000e-10 -3.646431522847e-01 + 9.628000000000e-10 -3.110356032735e-01 + 9.728000000000e-10 -1.804991631480e-01 + 9.828000000000e-10 -2.040735001275e-02 + 9.928000000000e-10 1.203099974113e-01 + 1.000000000000e-09 1.927324868168e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/conditions.yaml new file mode 100644 index 00000000..560a31d3 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 16 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_16 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/CML_core_tb.sch new file mode 100644 index 00000000..15eda3fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/CML_core_tb_17.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/CML_core_tb_17.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/CML_core_tb_17.data new file mode 100644 index 00000000..1e62d263 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/CML_core_tb_17.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.857852225245e-01 + 1.728000000000e-10 -1.572533595452e-01 + 1.828000000000e-10 2.540381659783e-03 + 1.928000000000e-10 1.434374080790e-01 + 2.028000000000e-10 2.351272809546e-01 + 2.128000000000e-10 2.797956268783e-01 + 2.228000000000e-10 3.144243918962e-01 + 2.328000000000e-10 3.493618787392e-01 + 2.428000000000e-10 3.773715695689e-01 + 2.528000000000e-10 3.831823569325e-01 + 2.628000000000e-10 3.264482498061e-01 + 2.728000000000e-10 1.910530045686e-01 + 2.828000000000e-10 2.436059711742e-02 + 2.928000000000e-10 -1.220220612332e-01 + 3.028000000000e-10 -2.180809390746e-01 + 3.128000000000e-10 -2.653775774444e-01 + 3.228000000000e-10 -3.017848824321e-01 + 3.328000000000e-10 -3.379021858146e-01 + 3.428000000000e-10 -3.673696540777e-01 + 3.528000000000e-10 -3.751149757425e-01 + 3.628000000000e-10 -3.209083740174e-01 + 3.728000000000e-10 -1.878979131572e-01 + 3.828000000000e-10 -2.307531260616e-02 + 3.928000000000e-10 1.222703025101e-01 + 4.028000000000e-10 2.179003509445e-01 + 4.128000000000e-10 2.652908784701e-01 + 4.228000000000e-10 3.017672646237e-01 + 4.328000000000e-10 3.378931599738e-01 + 4.428000000000e-10 3.672390198172e-01 + 4.528000000000e-10 3.748903812400e-01 + 4.628000000000e-10 3.205316331029e-01 + 4.728000000000e-10 1.874647700937e-01 + 4.828000000000e-10 2.258819957166e-02 + 4.928000000000e-10 -1.227112688171e-01 + 5.028000000000e-10 -2.183172764214e-01 + 5.128000000000e-10 -2.656203742551e-01 + 5.228000000000e-10 -3.020800906145e-01 + 5.328000000000e-10 -3.381553362553e-01 + 5.428000000000e-10 -3.675051891202e-01 + 5.528000000000e-10 -3.750972240389e-01 + 5.628000000000e-10 -3.207148935088e-01 + 5.728000000000e-10 -1.875700292984e-01 + 5.828000000000e-10 -2.267596999196e-02 + 5.928000000000e-10 1.226776663562e-01 + 6.028000000000e-10 2.182733434309e-01 + 6.128000000000e-10 2.656053081095e-01 + 6.228000000000e-10 3.020411985396e-01 + 6.328000000000e-10 3.381435634392e-01 + 6.428000000000e-10 3.674743818406e-01 + 6.528000000000e-10 3.750952532513e-01 + 6.628000000000e-10 3.206986438750e-01 + 6.728000000000e-10 1.875816736609e-01 + 6.828000000000e-10 2.266940437016e-02 + 6.928000000000e-10 -1.226596158426e-01 + 7.028000000000e-10 -2.182776851932e-01 + 7.128000000000e-10 -2.655888997029e-01 + 7.228000000000e-10 -3.020470638059e-01 + 7.328000000000e-10 -3.381282771084e-01 + 7.428000000000e-10 -3.674800981492e-01 + 7.528000000000e-10 -3.750811166601e-01 + 7.628000000000e-10 -3.207046174850e-01 + 7.728000000000e-10 -1.875682790354e-01 + 7.828000000000e-10 -2.267703281628e-02 + 7.928000000000e-10 1.226713327530e-01 + 8.028000000000e-10 2.182693863135e-01 + 8.128000000000e-10 2.655996099454e-01 + 8.228000000000e-10 3.020383466326e-01 + 8.328000000000e-10 3.381385294735e-01 + 8.428000000000e-10 3.674717742910e-01 + 8.528000000000e-10 3.750907045119e-01 + 8.628000000000e-10 3.206966644115e-01 + 8.728000000000e-10 1.875773616331e-01 + 8.828000000000e-10 2.266807684955e-02 + 8.928000000000e-10 -1.226628120211e-01 + 9.028000000000e-10 -2.182782381400e-01 + 9.128000000000e-10 -2.655915506047e-01 + 9.228000000000e-10 -3.020469590318e-01 + 9.328000000000e-10 -3.381303351991e-01 + 9.428000000000e-10 -3.674798958779e-01 + 9.528000000000e-10 -3.750829516380e-01 + 9.628000000000e-10 -3.207043265993e-01 + 9.728000000000e-10 -1.875693454762e-01 + 9.828000000000e-10 -2.267594148777e-02 + 9.928000000000e-10 1.226704651969e-01 + 1.000000000000e-09 1.977257563344e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/conditions.yaml new file mode 100644 index 00000000..e78f9667 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 17 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_17 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/CML_core_tb.sch new file mode 100644 index 00000000..747c1e7c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/CML_core_tb_18.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/CML_core_tb_18.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/CML_core_tb_18.data new file mode 100644 index 00000000..16422ca1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/CML_core_tb_18.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.213526702696e-01 + 1.728000000000e-10 -1.557909441213e-01 + 1.828000000000e-10 3.476956205809e-02 + 1.928000000000e-10 1.811250151598e-01 + 2.028000000000e-10 2.596166993269e-01 + 2.128000000000e-10 2.853727091731e-01 + 2.228000000000e-10 3.254453264627e-01 + 2.328000000000e-10 3.792799604087e-01 + 2.428000000000e-10 4.176388066249e-01 + 2.528000000000e-10 4.205544301124e-01 + 2.628000000000e-10 3.463528198985e-01 + 2.728000000000e-10 1.792096076204e-01 + 2.828000000000e-10 -1.442396833933e-02 + 2.928000000000e-10 -1.649237711275e-01 + 3.028000000000e-10 -2.471596975948e-01 + 3.128000000000e-10 -2.748735614517e-01 + 3.228000000000e-10 -3.160128767795e-01 + 3.328000000000e-10 -3.707930594343e-01 + 3.428000000000e-10 -4.104823651943e-01 + 3.528000000000e-10 -4.153692056047e-01 + 3.628000000000e-10 -3.427931169871e-01 + 3.728000000000e-10 -1.769552164151e-01 + 3.828000000000e-10 1.590673093360e-02 + 3.928000000000e-10 1.658834812043e-01 + 4.028000000000e-10 2.479775600913e-01 + 4.128000000000e-10 2.756409688001e-01 + 4.228000000000e-10 3.168596600790e-01 + 4.328000000000e-10 3.715133147191e-01 + 4.428000000000e-10 4.111218222953e-01 + 4.528000000000e-10 4.157229971644e-01 + 4.628000000000e-10 3.430019798682e-01 + 4.728000000000e-10 1.769456026445e-01 + 4.828000000000e-10 -1.592886494610e-02 + 4.928000000000e-10 -1.659782283296e-01 + 5.028000000000e-10 -2.479947853664e-01 + 5.128000000000e-10 -2.756931315881e-01 + 5.228000000000e-10 -3.168416717549e-01 + 5.328000000000e-10 -3.715547211919e-01 + 5.428000000000e-10 -4.111034138799e-01 + 5.528000000000e-10 -4.157691346087e-01 + 5.628000000000e-10 -3.429925568898e-01 + 5.728000000000e-10 -1.770024985869e-01 + 5.828000000000e-10 1.592938202906e-02 + 5.928000000000e-10 1.659292038608e-01 + 6.028000000000e-10 2.480043512000e-01 + 6.128000000000e-10 2.756533285421e-01 + 6.228000000000e-10 3.168576585763e-01 + 6.328000000000e-10 3.715156583068e-01 + 6.428000000000e-10 4.111207690964e-01 + 6.528000000000e-10 4.157343976531e-01 + 6.628000000000e-10 3.430135347581e-01 + 6.728000000000e-10 1.769734665185e-01 + 6.828000000000e-10 -1.590652763180e-02 + 6.928000000000e-10 -1.659537152419e-01 + 7.028000000000e-10 -2.479812550746e-01 + 7.128000000000e-10 -2.756768834918e-01 + 7.228000000000e-10 -3.168350969677e-01 + 7.328000000000e-10 -3.715419152243e-01 + 7.428000000000e-10 -4.110983779981e-01 + 7.528000000000e-10 -4.157587194411e-01 + 7.628000000000e-10 -3.429901444601e-01 + 7.728000000000e-10 -1.769973775521e-01 + 7.828000000000e-10 1.592723735432e-02 + 7.928000000000e-10 1.659318535084e-01 + 8.028000000000e-10 2.480017799848e-01 + 8.128000000000e-10 2.756559811492e-01 + 8.228000000000e-10 3.168566227283e-01 + 8.328000000000e-10 3.715195500188e-01 + 8.428000000000e-10 4.111190536097e-01 + 8.528000000000e-10 4.157370668569e-01 + 8.628000000000e-10 3.430103710665e-01 + 8.728000000000e-10 1.769771675859e-01 + 8.828000000000e-10 -1.590770493918e-02 + 8.928000000000e-10 -1.659501582149e-01 + 9.028000000000e-10 -2.479827571068e-01 + 9.128000000000e-10 -2.756738772283e-01 + 9.228000000000e-10 -3.168377001445e-01 + 9.328000000000e-10 -3.715391180409e-01 + 9.428000000000e-10 -4.111007797151e-01 + 9.528000000000e-10 -4.157556639381e-01 + 9.628000000000e-10 -3.429919881202e-01 + 9.728000000000e-10 -1.769955652012e-01 + 9.828000000000e-10 1.592430721908e-02 + 9.928000000000e-10 1.659331850974e-01 + 1.000000000000e-09 2.332140069758e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/conditions.yaml new file mode 100644 index 00000000..ed935822 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 18 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_18 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/CML_core_tb.sch new file mode 100644 index 00000000..bd39eaa5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/CML_core_tb_19.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/CML_core_tb_19.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/CML_core_tb_19.data new file mode 100644 index 00000000..6e384890 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/CML_core_tb_19.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.162777317791e-01 + 1.728000000000e-10 -1.528661974147e-01 + 1.828000000000e-10 3.474832458294e-02 + 1.928000000000e-10 1.787124308466e-01 + 2.028000000000e-10 2.559986610902e-01 + 2.128000000000e-10 2.810767408313e-01 + 2.228000000000e-10 3.219404824571e-01 + 2.328000000000e-10 3.760375868322e-01 + 2.428000000000e-10 4.141294975409e-01 + 2.528000000000e-10 4.175370858756e-01 + 2.628000000000e-10 3.443891646085e-01 + 2.728000000000e-10 1.786024667409e-01 + 2.828000000000e-10 -1.272368439666e-02 + 2.928000000000e-10 -1.612661145276e-01 + 3.028000000000e-10 -2.425558656005e-01 + 3.128000000000e-10 -2.696709375544e-01 + 3.228000000000e-10 -3.115976016931e-01 + 3.328000000000e-10 -3.666762080522e-01 + 3.428000000000e-10 -4.062269757432e-01 + 3.528000000000e-10 -4.117682170104e-01 + 3.628000000000e-10 -3.403932990270e-01 + 3.728000000000e-10 -1.760595961534e-01 + 3.828000000000e-10 1.438676142530e-02 + 3.928000000000e-10 1.623380571180e-01 + 4.028000000000e-10 2.434588647096e-01 + 4.128000000000e-10 2.705169080514e-01 + 4.228000000000e-10 3.125303134845e-01 + 4.328000000000e-10 3.674735521527e-01 + 4.428000000000e-10 4.069324770669e-01 + 4.528000000000e-10 4.121668816011e-01 + 4.628000000000e-10 3.406314536055e-01 + 4.728000000000e-10 1.760592839129e-01 + 4.828000000000e-10 -1.440702618479e-02 + 4.928000000000e-10 -1.624387020945e-01 + 5.028000000000e-10 -2.434775787799e-01 + 5.128000000000e-10 -2.705727170369e-01 + 5.228000000000e-10 -3.125119373252e-01 + 5.328000000000e-10 -3.675184828947e-01 + 5.428000000000e-10 -4.069140356329e-01 + 5.528000000000e-10 -4.122173977207e-01 + 5.628000000000e-10 -3.406230488723e-01 + 5.728000000000e-10 -1.761225643375e-01 + 5.828000000000e-10 1.440482600394e-02 + 5.928000000000e-10 1.623840500109e-01 + 6.028000000000e-10 2.434858819416e-01 + 6.128000000000e-10 2.705285901327e-01 + 6.228000000000e-10 3.125279242462e-01 + 6.328000000000e-10 3.674758375852e-01 + 6.428000000000e-10 4.069313048189e-01 + 6.528000000000e-10 4.121794941223e-01 + 6.628000000000e-10 3.406442721772e-01 + 6.728000000000e-10 1.760913923029e-01 + 6.828000000000e-10 -1.438048626859e-02 + 6.928000000000e-10 -1.624102913298e-01 + 7.028000000000e-10 -2.434611919520e-01 + 7.128000000000e-10 -2.705537859875e-01 + 7.228000000000e-10 -3.125040211699e-01 + 7.328000000000e-10 -3.675038904367e-01 + 7.428000000000e-10 -4.069074652851e-01 + 7.528000000000e-10 -4.122054838885e-01 + 7.628000000000e-10 -3.406192567768e-01 + 7.728000000000e-10 -1.761170868219e-01 + 7.828000000000e-10 1.440247036537e-02 + 7.928000000000e-10 1.623867436405e-01 + 8.028000000000e-10 2.434830143217e-01 + 8.128000000000e-10 2.705312548291e-01 + 8.228000000000e-10 3.125271394700e-01 + 8.328000000000e-10 3.674800931307e-01 + 8.428000000000e-10 4.069295144266e-01 + 8.528000000000e-10 4.121823557439e-01 + 8.628000000000e-10 3.406407407456e-01 + 8.728000000000e-10 1.760956573916e-01 + 8.828000000000e-10 -1.438135361500e-02 + 8.928000000000e-10 -1.624062315135e-01 + 9.028000000000e-10 -2.434625084707e-01 + 9.128000000000e-10 -2.705503455528e-01 + 9.228000000000e-10 -3.125068466958e-01 + 9.328000000000e-10 -3.675009271833e-01 + 9.428000000000e-10 -4.069098943042e-01 + 9.528000000000e-10 -4.122022218921e-01 + 9.628000000000e-10 -3.406210058100e-01 + 9.728000000000e-10 -1.761154015725e-01 + 9.828000000000e-10 1.439913133121e-02 + 9.928000000000e-10 1.623879640093e-01 + 1.000000000000e-09 2.290402036537e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/conditions.yaml new file mode 100644 index 00000000..ded425b2 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 19 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_19 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/CML_core_tb.sch new file mode 100644 index 00000000..d8d0b2b6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/CML_core_tb_20.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/CML_core_tb_20.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/CML_core_tb_20.data new file mode 100644 index 00000000..3dfcf241 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/CML_core_tb_20.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.365386572536e-01 + 1.728000000000e-10 -1.657072094068e-01 + 1.828000000000e-10 3.099865584261e-02 + 1.928000000000e-10 1.820426436768e-01 + 2.028000000000e-10 2.627018214462e-01 + 2.128000000000e-10 2.893736945719e-01 + 2.228000000000e-10 3.287984169352e-01 + 2.328000000000e-10 3.833334317825e-01 + 2.428000000000e-10 4.238785365972e-01 + 2.528000000000e-10 4.280322768716e-01 + 2.628000000000e-10 3.532409470363e-01 + 2.728000000000e-10 1.834641899168e-01 + 2.828000000000e-10 -1.474496205711e-02 + 2.928000000000e-10 -1.691349612478e-01 + 3.028000000000e-10 -2.530204867896e-01 + 3.128000000000e-10 -2.814070764654e-01 + 3.228000000000e-10 -3.218416847899e-01 + 3.328000000000e-10 -3.771799136100e-01 + 3.428000000000e-10 -4.187055626636e-01 + 3.528000000000e-10 -4.243036771430e-01 + 3.628000000000e-10 -3.506062035467e-01 + 3.728000000000e-10 -1.816763297909e-01 + 3.828000000000e-10 1.601938741723e-02 + 3.928000000000e-10 1.700087907901e-01 + 4.028000000000e-10 2.537596951165e-01 + 4.128000000000e-10 2.820887501770e-01 + 4.228000000000e-10 3.225625541805e-01 + 4.328000000000e-10 3.777928583784e-01 + 4.428000000000e-10 4.192485534625e-01 + 4.528000000000e-10 4.246080285894e-01 + 4.628000000000e-10 3.507916132015e-01 + 4.728000000000e-10 1.816929452641e-01 + 4.828000000000e-10 -1.601075067965e-02 + 4.928000000000e-10 -1.700562644838e-01 + 5.028000000000e-10 -2.537513990380e-01 + 5.128000000000e-10 -2.821086741965e-01 + 5.228000000000e-10 -3.225309737549e-01 + 5.328000000000e-10 -3.778081660132e-01 + 5.428000000000e-10 -4.192196231589e-01 + 5.528000000000e-10 -4.246325132019e-01 + 5.628000000000e-10 -3.507765562578e-01 + 5.728000000000e-10 -1.817315603141e-01 + 5.828000000000e-10 1.601468821266e-02 + 5.928000000000e-10 1.700220210141e-01 + 6.028000000000e-10 2.537612841477e-01 + 6.128000000000e-10 2.820810469197e-01 + 6.228000000000e-10 3.225454957468e-01 + 6.328000000000e-10 3.777800822765e-01 + 6.428000000000e-10 4.192350742948e-01 + 6.528000000000e-10 4.246071005326e-01 + 6.628000000000e-10 3.507940665347e-01 + 6.728000000000e-10 1.817094337521e-01 + 6.828000000000e-10 -1.599736953115e-02 + 6.928000000000e-10 -1.700405869499e-01 + 7.028000000000e-10 -2.537437685408e-01 + 7.128000000000e-10 -2.820988428465e-01 + 7.228000000000e-10 -3.225283133162e-01 + 7.328000000000e-10 -3.778004844844e-01 + 7.428000000000e-10 -4.192180216890e-01 + 7.528000000000e-10 -4.246257635725e-01 + 7.628000000000e-10 -3.507760422929e-01 + 7.728000000000e-10 -1.817278922025e-01 + 7.828000000000e-10 1.601285231965e-02 + 7.928000000000e-10 1.700238629540e-01 + 8.028000000000e-10 2.537592487741e-01 + 8.128000000000e-10 2.820829438407e-01 + 8.228000000000e-10 3.225445511573e-01 + 8.328000000000e-10 3.777829985044e-01 + 8.428000000000e-10 4.192337708379e-01 + 8.528000000000e-10 4.246090234999e-01 + 8.628000000000e-10 3.507916632731e-01 + 8.728000000000e-10 1.817122417436e-01 + 8.828000000000e-10 -1.599824136343e-02 + 8.928000000000e-10 -1.700377849177e-01 + 9.028000000000e-10 -2.537449127629e-01 + 9.128000000000e-10 -2.820965585668e-01 + 9.228000000000e-10 -3.225302446360e-01 + 9.328000000000e-10 -3.777982010874e-01 + 9.428000000000e-10 -4.192199753705e-01 + 9.528000000000e-10 -4.246232587341e-01 + 9.628000000000e-10 -3.507775800865e-01 + 9.728000000000e-10 -1.817263367247e-01 + 9.828000000000e-10 1.601066647660e-02 + 9.928000000000e-10 1.700248857455e-01 + 1.000000000000e-09 2.385375784000e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/conditions.yaml new file mode 100644 index 00000000..3304573d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 20 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_20 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/CML_core_tb.sch new file mode 100644 index 00000000..e693f6be --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/CML_core_tb_21.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/CML_core_tb_21.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/CML_core_tb_21.data new file mode 100644 index 00000000..86f9b023 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/CML_core_tb_21.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.747912795524e-01 + 1.728000000000e-10 -1.327955908449e-01 + 1.828000000000e-10 3.931332790349e-02 + 1.928000000000e-10 1.782957289495e-01 + 2.028000000000e-10 2.573194188668e-01 + 2.128000000000e-10 2.870254911902e-01 + 2.228000000000e-10 3.228650321442e-01 + 2.328000000000e-10 3.690575149088e-01 + 2.428000000000e-10 4.023791308175e-01 + 2.528000000000e-10 4.034409994944e-01 + 2.628000000000e-10 3.332295993533e-01 + 2.728000000000e-10 1.767123870243e-01 + 2.828000000000e-10 -7.574880255958e-03 + 2.928000000000e-10 -1.550892096227e-01 + 3.028000000000e-10 -2.394679486139e-01 + 3.128000000000e-10 -2.715465054757e-01 + 3.228000000000e-10 -3.085580168164e-01 + 3.328000000000e-10 -3.560821219044e-01 + 3.428000000000e-10 -3.914831036325e-01 + 3.528000000000e-10 -3.956717314322e-01 + 3.628000000000e-10 -3.285929470428e-01 + 3.728000000000e-10 -1.747908753666e-01 + 3.828000000000e-10 7.882784627431e-03 + 3.928000000000e-10 1.545893087045e-01 + 4.028000000000e-10 2.389887597051e-01 + 4.128000000000e-10 2.712307710628e-01 + 4.228000000000e-10 3.085047043395e-01 + 4.328000000000e-10 3.559448484744e-01 + 4.428000000000e-10 3.913507819782e-01 + 4.528000000000e-10 3.953547803018e-01 + 4.628000000000e-10 3.282585464854e-01 + 4.728000000000e-10 1.743078825018e-01 + 4.828000000000e-10 -8.291328068348e-03 + 4.928000000000e-10 -1.550293895867e-01 + 5.028000000000e-10 -2.392804293874e-01 + 5.128000000000e-10 -2.715405217782e-01 + 5.228000000000e-10 -3.087067361985e-01 + 5.328000000000e-10 -3.562070457914e-01 + 5.428000000000e-10 -3.915132320474e-01 + 5.528000000000e-10 -3.955548280332e-01 + 5.628000000000e-10 -3.283427048941e-01 + 5.728000000000e-10 -1.744282326244e-01 + 5.828000000000e-10 8.270645751064e-03 + 5.928000000000e-10 1.549582711486e-01 + 6.028000000000e-10 2.392860039329e-01 + 6.128000000000e-10 2.714820836214e-01 + 6.228000000000e-10 3.087161022039e-01 + 6.328000000000e-10 3.561494137047e-01 + 6.428000000000e-10 3.915273490759e-01 + 6.528000000000e-10 3.955079501007e-01 + 6.628000000000e-10 3.283677191723e-01 + 6.728000000000e-10 1.743944727908e-01 + 6.828000000000e-10 -8.238033211244e-03 + 6.928000000000e-10 -1.549849820320e-01 + 7.028000000000e-10 -2.392533741503e-01 + 7.128000000000e-10 -2.715088112944e-01 + 7.228000000000e-10 -3.086845279612e-01 + 7.328000000000e-10 -3.561786907982e-01 + 7.428000000000e-10 -3.914967682891e-01 + 7.528000000000e-10 -3.955360247734e-01 + 7.628000000000e-10 -3.283379458960e-01 + 7.728000000000e-10 -1.744219452106e-01 + 7.828000000000e-10 8.266285029230e-03 + 7.928000000000e-10 1.549592969714e-01 + 8.028000000000e-10 2.392805186707e-01 + 8.128000000000e-10 2.714837558368e-01 + 8.228000000000e-10 3.087120651005e-01 + 8.328000000000e-10 3.561520690508e-01 + 8.428000000000e-10 3.915233230940e-01 + 8.528000000000e-10 3.955100606400e-01 + 8.628000000000e-10 3.283632493206e-01 + 8.728000000000e-10 1.743968536756e-01 + 8.828000000000e-10 -8.241845610385e-03 + 8.928000000000e-10 -1.549825747228e-01 + 9.028000000000e-10 -2.392568734068e-01 + 9.128000000000e-10 -2.715063119250e-01 + 9.228000000000e-10 -3.086881712182e-01 + 9.328000000000e-10 -3.561760305782e-01 + 9.428000000000e-10 -3.915002731039e-01 + 9.528000000000e-10 -3.955331724158e-01 + 9.628000000000e-10 -3.283409163093e-01 + 9.728000000000e-10 -1.744193777973e-01 + 9.828000000000e-10 8.263272108901e-03 + 9.928000000000e-10 1.549616575981e-01 + 1.000000000000e-09 2.229820050464e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/conditions.yaml new file mode 100644 index 00000000..0f905c49 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 21 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_21 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/CML_core_tb.sch new file mode 100644 index 00000000..145b2a64 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/CML_core_tb_22.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/CML_core_tb_22.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/CML_core_tb_22.data new file mode 100644 index 00000000..ef0e6c8e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/CML_core_tb_22.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.701426652476e-01 + 1.728000000000e-10 -1.295079168872e-01 + 1.828000000000e-10 4.028305902420e-02 + 1.928000000000e-10 1.769160181627e-01 + 2.028000000000e-10 2.543038782058e-01 + 2.128000000000e-10 2.828787064062e-01 + 2.228000000000e-10 3.193333275112e-01 + 2.328000000000e-10 3.660596632426e-01 + 2.428000000000e-10 3.993599084345e-01 + 2.528000000000e-10 4.007883413226e-01 + 2.628000000000e-10 3.312419521143e-01 + 2.728000000000e-10 1.754810620333e-01 + 2.828000000000e-10 -7.142746942805e-03 + 2.928000000000e-10 -1.527779354444e-01 + 3.028000000000e-10 -2.358001938178e-01 + 3.128000000000e-10 -2.668485168237e-01 + 3.228000000000e-10 -3.044746718514e-01 + 3.328000000000e-10 -3.525545062341e-01 + 3.428000000000e-10 -3.880254364838e-01 + 3.528000000000e-10 -3.926522183008e-01 + 3.628000000000e-10 -3.262954780243e-01 + 3.728000000000e-10 -1.733443838482e-01 + 3.828000000000e-10 7.573790689709e-03 + 3.928000000000e-10 1.523487073311e-01 + 4.028000000000e-10 2.353677758316e-01 + 4.128000000000e-10 2.665695097895e-01 + 4.228000000000e-10 3.044490522149e-01 + 4.328000000000e-10 3.524353166192e-01 + 4.428000000000e-10 3.879041587545e-01 + 4.528000000000e-10 3.923389296672e-01 + 4.628000000000e-10 3.259554596391e-01 + 4.728000000000e-10 1.728458619818e-01 + 4.828000000000e-10 -8.002573892585e-03 + 4.928000000000e-10 -1.528088090159e-01 + 5.028000000000e-10 -2.356747724378e-01 + 5.128000000000e-10 -2.668925685814e-01 + 5.228000000000e-10 -3.046638401901e-01 + 5.328000000000e-10 -3.527112223433e-01 + 5.428000000000e-10 -3.880786380631e-01 + 5.528000000000e-10 -3.925506229445e-01 + 5.628000000000e-10 -3.260495799326e-01 + 5.728000000000e-10 -1.729761662154e-01 + 5.828000000000e-10 7.974498187451e-03 + 5.928000000000e-10 1.527311696558e-01 + 6.028000000000e-10 2.356760074325e-01 + 6.128000000000e-10 2.668297167568e-01 + 6.228000000000e-10 3.046702367069e-01 + 6.328000000000e-10 3.526500635637e-01 + 6.428000000000e-10 3.880902250634e-01 + 6.528000000000e-10 3.925010528185e-01 + 6.628000000000e-10 3.260730653917e-01 + 6.728000000000e-10 1.729410953112e-01 + 6.828000000000e-10 -7.941970684065e-03 + 6.928000000000e-10 -1.527585341072e-01 + 7.028000000000e-10 -2.356430884825e-01 + 7.128000000000e-10 -2.668569558480e-01 + 7.228000000000e-10 -3.046384985761e-01 + 7.328000000000e-10 -3.526798341051e-01 + 7.428000000000e-10 -3.880593641809e-01 + 7.528000000000e-10 -3.925295324367e-01 + 7.628000000000e-10 -3.260427874257e-01 + 7.728000000000e-10 -1.729689796013e-01 + 7.828000000000e-10 7.970639231343e-03 + 7.928000000000e-10 1.527324506408e-01 + 8.028000000000e-10 2.356706370408e-01 + 8.128000000000e-10 2.668314718812e-01 + 8.228000000000e-10 3.046665550415e-01 + 8.328000000000e-10 3.526529348742e-01 + 8.428000000000e-10 3.880863283995e-01 + 8.528000000000e-10 3.925032166540e-01 + 8.628000000000e-10 3.260684590033e-01 + 8.728000000000e-10 1.729436324779e-01 + 8.828000000000e-10 -7.945691115533e-03 + 8.928000000000e-10 -1.527560420249e-01 + 9.028000000000e-10 -2.356465048672e-01 + 9.128000000000e-10 -2.668543449819e-01 + 9.228000000000e-10 -3.046422495200e-01 + 9.328000000000e-10 -3.526772110923e-01 + 9.428000000000e-10 -3.880628732866e-01 + 9.528000000000e-10 -3.925266759429e-01 + 9.628000000000e-10 -3.260456785141e-01 + 9.728000000000e-10 -1.729665660062e-01 + 9.828000000000e-10 7.967487161613e-03 + 9.928000000000e-10 1.527347010769e-01 + 1.000000000000e-09 2.198236907112e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/conditions.yaml new file mode 100644 index 00000000..be2ca052 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 22 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_22 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/CML_core_tb.sch new file mode 100644 index 00000000..3b38e8ea --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/CML_core_tb_23.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/CML_core_tb_23.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/CML_core_tb_23.data new file mode 100644 index 00000000..7b2e7ab2 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/CML_core_tb_23.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.957054612407e-01 + 1.728000000000e-10 -1.475216919691e-01 + 1.828000000000e-10 3.196996632833e-02 + 1.928000000000e-10 1.773696584526e-01 + 2.028000000000e-10 2.602670445343e-01 + 2.128000000000e-10 2.919684489720e-01 + 2.228000000000e-10 3.273690981683e-01 + 2.328000000000e-10 3.736661732429e-01 + 2.428000000000e-10 4.086769482098e-01 + 2.528000000000e-10 4.113258498473e-01 + 2.628000000000e-10 3.414272197123e-01 + 2.728000000000e-10 1.833836328070e-01 + 2.828000000000e-10 -4.501363849837e-03 + 2.928000000000e-10 -1.562318489881e-01 + 3.028000000000e-10 -2.435570784568e-01 + 3.128000000000e-10 -2.775386220390e-01 + 3.228000000000e-10 -3.142878056355e-01 + 3.328000000000e-10 -3.618442790176e-01 + 3.428000000000e-10 -3.986028140213e-01 + 3.528000000000e-10 -4.040381865127e-01 + 3.628000000000e-10 -3.369104214062e-01 + 3.728000000000e-10 -1.811830752063e-01 + 3.828000000000e-10 5.355128083595e-03 + 3.928000000000e-10 1.563630270676e-01 + 4.028000000000e-10 2.436522664355e-01 + 4.128000000000e-10 2.777202130414e-01 + 4.228000000000e-10 3.146716935396e-01 + 4.328000000000e-10 3.621309165835e-01 + 4.428000000000e-10 3.988648293319e-01 + 4.528000000000e-10 4.040567761896e-01 + 4.628000000000e-10 3.368362274946e-01 + 4.728000000000e-10 1.809052635954e-01 + 4.828000000000e-10 -5.606347307292e-03 + 4.928000000000e-10 -1.566747533637e-01 + 5.028000000000e-10 -2.438438929936e-01 + 5.128000000000e-10 -2.779365198916e-01 + 5.228000000000e-10 -3.147868656031e-01 + 5.328000000000e-10 -3.623069078218e-01 + 5.428000000000e-10 -3.989546307961e-01 + 5.528000000000e-10 -4.041975741324e-01 + 5.628000000000e-10 -3.368831845243e-01 + 5.728000000000e-10 -1.810020824460e-01 + 5.828000000000e-10 5.593858826262e-03 + 5.928000000000e-10 1.566090374935e-01 + 6.028000000000e-10 2.438493522755e-01 + 6.128000000000e-10 2.778818285943e-01 + 6.228000000000e-10 3.147972496077e-01 + 6.328000000000e-10 3.622530927659e-01 + 6.428000000000e-10 3.989689895438e-01 + 6.528000000000e-10 4.041528360847e-01 + 6.628000000000e-10 3.369065350765e-01 + 6.728000000000e-10 1.809679655825e-01 + 6.828000000000e-10 -5.565139497590e-03 + 6.928000000000e-10 -1.566366178225e-01 + 7.028000000000e-10 -2.438204188033e-01 + 7.128000000000e-10 -2.779089356335e-01 + 7.228000000000e-10 -3.147686522157e-01 + 7.328000000000e-10 -3.622826637804e-01 + 7.428000000000e-10 -3.989411843085e-01 + 7.528000000000e-10 -4.041807678845e-01 + 7.628000000000e-10 -3.368790616195e-01 + 7.728000000000e-10 -1.809947630224e-01 + 7.828000000000e-10 5.591512634984e-03 + 7.928000000000e-10 1.566120178189e-01 + 8.028000000000e-10 2.438458933358e-01 + 8.128000000000e-10 2.778849719194e-01 + 8.228000000000e-10 3.147945034671e-01 + 8.328000000000e-10 3.622568751046e-01 + 8.428000000000e-10 3.989662140554e-01 + 8.528000000000e-10 4.041558823701e-01 + 8.628000000000e-10 3.369030769235e-01 + 8.728000000000e-10 1.809706945647e-01 + 8.828000000000e-10 -5.568483515763e-03 + 8.928000000000e-10 -1.566340912711e-01 + 9.028000000000e-10 -2.438236181184e-01 + 9.128000000000e-10 -2.779064153414e-01 + 9.228000000000e-10 -3.147718720666e-01 + 9.328000000000e-10 -3.622798572716e-01 + 9.428000000000e-10 -3.989444036153e-01 + 9.528000000000e-10 -4.041778978449e-01 + 9.628000000000e-10 -3.368819513246e-01 + 9.728000000000e-10 -1.809921012276e-01 + 9.828000000000e-10 5.588724287086e-03 + 9.928000000000e-10 1.566143682128e-01 + 1.000000000000e-09 2.267750497136e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/conditions.yaml new file mode 100644 index 00000000..0f176bd5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 23 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_23 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/CML_core_tb.sch new file mode 100644 index 00000000..1f05f444 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/CML_core_tb_24.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/CML_core_tb_24.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/CML_core_tb_24.data new file mode 100644 index 00000000..a01deb89 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/CML_core_tb_24.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -1.908985659112e-01 + 1.728000000000e-10 -9.049079150817e-02 + 1.828000000000e-10 3.945873683219e-02 + 1.928000000000e-10 1.521437177417e-01 + 2.028000000000e-10 2.220068772324e-01 + 2.128000000000e-10 2.535092334052e-01 + 2.228000000000e-10 2.861973397174e-01 + 2.328000000000e-10 3.239843013312e-01 + 2.428000000000e-10 3.520113017607e-01 + 2.528000000000e-10 3.540468115658e-01 + 2.628000000000e-10 2.949447709683e-01 + 2.728000000000e-10 1.587983397866e-01 + 2.828000000000e-10 -6.865354773069e-03 + 2.928000000000e-10 -1.448078480843e-01 + 3.028000000000e-10 -2.275605338030e-01 + 3.128000000000e-10 -2.625604064747e-01 + 3.228000000000e-10 -2.958552078644e-01 + 3.328000000000e-10 -3.351711406638e-01 + 3.428000000000e-10 -3.644984224381e-01 + 3.528000000000e-10 -3.669950471097e-01 + 3.628000000000e-10 -3.072796408874e-01 + 3.728000000000e-10 -1.699866077827e-01 + 3.828000000000e-10 -2.842045316933e-03 + 3.928000000000e-10 1.365086891956e-01 + 4.028000000000e-10 2.207869920157e-01 + 4.128000000000e-10 2.567713461579e-01 + 4.228000000000e-10 2.907030026757e-01 + 4.328000000000e-10 3.302687598301e-01 + 4.428000000000e-10 3.600803190405e-01 + 4.528000000000e-10 3.632331450943e-01 + 4.628000000000e-10 3.045482678871e-01 + 4.728000000000e-10 1.682698274629e-01 + 4.828000000000e-10 2.058504292284e-03 + 4.928000000000e-10 -1.367871396964e-01 + 5.028000000000e-10 -2.207717990252e-01 + 5.128000000000e-10 -2.567684885934e-01 + 5.228000000000e-10 -2.906651825463e-01 + 5.328000000000e-10 -3.302494358660e-01 + 5.428000000000e-10 -3.599712284157e-01 + 5.528000000000e-10 -3.631239508150e-01 + 5.628000000000e-10 -3.043584109358e-01 + 5.728000000000e-10 -1.680958385636e-01 + 5.828000000000e-10 -1.834034512727e-03 + 5.928000000000e-10 1.369613450439e-01 + 6.028000000000e-10 2.209618957221e-01 + 6.128000000000e-10 2.568952536478e-01 + 6.228000000000e-10 2.908171185353e-01 + 6.328000000000e-10 3.303549214919e-01 + 6.428000000000e-10 3.601082390759e-01 + 6.528000000000e-10 3.632059905221e-01 + 6.628000000000e-10 3.044557238628e-01 + 6.728000000000e-10 1.681292777859e-01 + 6.828000000000e-10 1.882442241730e-03 + 6.928000000000e-10 -1.369637862409e-01 + 7.028000000000e-10 -2.209363992802e-01 + 7.128000000000e-10 -2.569065829626e-01 + 7.228000000000e-10 -2.907936706940e-01 + 7.328000000000e-10 -3.303682701482e-01 + 7.428000000000e-10 -3.600879594395e-01 + 7.528000000000e-10 -3.632220959958e-01 + 7.628000000000e-10 -3.044401007882e-01 + 7.728000000000e-10 -1.681486407544e-01 + 7.828000000000e-10 -1.870004957548e-03 + 7.928000000000e-10 1.369437070838e-01 + 8.028000000000e-10 2.209481957039e-01 + 8.128000000000e-10 2.568879030180e-01 + 8.228000000000e-10 2.908064848389e-01 + 8.328000000000e-10 3.303493303219e-01 + 8.428000000000e-10 3.601006147126e-01 + 8.528000000000e-10 3.632041339109e-01 + 8.628000000000e-10 3.044528281549e-01 + 8.728000000000e-10 1.681322760827e-01 + 8.828000000000e-10 1.883536763259e-03 + 8.928000000000e-10 -1.369582535540e-01 + 9.028000000000e-10 -2.209346296842e-01 + 9.128000000000e-10 -2.569016830366e-01 + 9.228000000000e-10 -2.907925936742e-01 + 9.328000000000e-10 -3.303636164667e-01 + 9.428000000000e-10 -3.600871302257e-01 + 9.528000000000e-10 -3.632178492939e-01 + 9.628000000000e-10 -3.044398392752e-01 + 9.728000000000e-10 -1.681454261603e-01 + 9.828000000000e-10 -1.870628705438e-03 + 9.928000000000e-10 1.369459433541e-01 + 1.000000000000e-09 2.037746084522e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/conditions.yaml new file mode 100644 index 00000000..0e0ae605 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 24 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_24 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/CML_core_tb.sch new file mode 100644 index 00000000..4d823c30 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/CML_core_tb_25.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/CML_core_tb_25.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/CML_core_tb_25.data new file mode 100644 index 00000000..182746dc --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/CML_core_tb_25.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -1.878715792581e-01 + 1.728000000000e-10 -8.812036120597e-02 + 1.828000000000e-10 4.046526586524e-02 + 1.928000000000e-10 1.515705626527e-01 + 2.028000000000e-10 2.200566198342e-01 + 2.128000000000e-10 2.503583455541e-01 + 2.228000000000e-10 2.832914205797e-01 + 2.328000000000e-10 3.216696186231e-01 + 2.428000000000e-10 3.500303926946e-01 + 2.528000000000e-10 3.524815741411e-01 + 2.628000000000e-10 2.936462106779e-01 + 2.728000000000e-10 1.576219496242e-01 + 2.828000000000e-10 -7.121462127754e-03 + 2.928000000000e-10 -1.436071598858e-01 + 3.028000000000e-10 -2.249496922999e-01 + 3.128000000000e-10 -2.586592240194e-01 + 3.228000000000e-10 -2.922419569702e-01 + 3.328000000000e-10 -3.321983211521e-01 + 3.428000000000e-10 -3.618684381611e-01 + 3.528000000000e-10 -3.648249016007e-01 + 3.628000000000e-10 -3.055379959953e-01 + 3.728000000000e-10 -1.686105488568e-01 + 3.828000000000e-10 -2.582643774162e-03 + 3.928000000000e-10 1.352182085241e-01 + 4.028000000000e-10 2.180702244722e-01 + 4.128000000000e-10 2.527783389641e-01 + 4.228000000000e-10 2.869845016096e-01 + 4.328000000000e-10 3.271697550530e-01 + 4.428000000000e-10 3.573213651505e-01 + 4.528000000000e-10 3.609341509143e-01 + 4.628000000000e-10 3.026708512688e-01 + 4.728000000000e-10 1.667591862946e-01 + 4.828000000000e-10 1.676053368052e-03 + 4.928000000000e-10 -1.356064331336e-01 + 5.028000000000e-10 -2.181494577446e-01 + 5.128000000000e-10 -2.528581012316e-01 + 5.228000000000e-10 -2.870203472690e-01 + 5.328000000000e-10 -3.272198972187e-01 + 5.428000000000e-10 -3.572767955086e-01 + 5.528000000000e-10 -3.608816832152e-01 + 5.628000000000e-10 -3.025243774497e-01 + 5.728000000000e-10 -1.666129730216e-01 + 5.828000000000e-10 -1.465204057357e-03 + 5.928000000000e-10 1.357749931272e-01 + 6.028000000000e-10 2.183376260095e-01 + 6.128000000000e-10 2.529831758691e-01 + 6.228000000000e-10 2.871716452249e-01 + 6.328000000000e-10 3.273254918206e-01 + 6.428000000000e-10 3.574148326524e-01 + 6.528000000000e-10 3.609652866209e-01 + 6.628000000000e-10 3.026246199120e-01 + 6.728000000000e-10 1.666502220733e-01 + 6.828000000000e-10 1.518129196282e-03 + 6.928000000000e-10 -1.357732099566e-01 + 7.028000000000e-10 -2.183080403425e-01 + 7.128000000000e-10 -2.529912058397e-01 + 7.228000000000e-10 -2.871450109118e-01 + 7.328000000000e-10 -3.273360198503e-01 + 7.428000000000e-10 -3.573916245859e-01 + 7.528000000000e-10 -3.609790664977e-01 + 7.628000000000e-10 -3.026068066478e-01 + 7.728000000000e-10 -1.666683959674e-01 + 7.828000000000e-10 -1.504711775466e-03 + 7.928000000000e-10 1.357534602326e-01 + 8.028000000000e-10 2.183202914392e-01 + 8.128000000000e-10 2.529726082081e-01 + 8.228000000000e-10 2.871582302084e-01 + 8.328000000000e-10 3.273171284192e-01 + 8.428000000000e-10 3.574045685766e-01 + 8.528000000000e-10 3.609610284998e-01 + 8.628000000000e-10 3.026196909841e-01 + 8.728000000000e-10 1.666518528053e-01 + 8.828000000000e-10 1.518315117290e-03 + 8.928000000000e-10 -1.357682747942e-01 + 9.028000000000e-10 -2.183066580359e-01 + 9.128000000000e-10 -2.529866332266e-01 + 9.228000000000e-10 -2.871442829871e-01 + 9.328000000000e-10 -3.273316607928e-01 + 9.428000000000e-10 -3.573910212469e-01 + 9.528000000000e-10 -3.609749965926e-01 + 9.628000000000e-10 -3.026065830591e-01 + 9.728000000000e-10 -1.666652414066e-01 + 9.828000000000e-10 -1.505286118034e-03 + 9.928000000000e-10 1.357557668798e-01 + 1.000000000000e-09 2.016242513907e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/conditions.yaml new file mode 100644 index 00000000..26495c93 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 25 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_25 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/CML_core_tb.sch new file mode 100644 index 00000000..932ad888 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/CML_core_tb_26.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/CML_core_tb_26.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/CML_core_tb_26.data new file mode 100644 index 00000000..c21b093d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/CML_core_tb_26.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.135873679018e-01 + 1.728000000000e-10 -1.054229355639e-01 + 1.828000000000e-10 3.485798650969e-02 + 1.928000000000e-10 1.569675139767e-01 + 2.028000000000e-10 2.330635404696e-01 + 2.128000000000e-10 2.680443549179e-01 + 2.228000000000e-10 3.014044829899e-01 + 2.328000000000e-10 3.394080314353e-01 + 2.428000000000e-10 3.679529618424e-01 + 2.528000000000e-10 3.700593040123e-01 + 2.628000000000e-10 3.097824620429e-01 + 2.728000000000e-10 1.706514675999e-01 + 2.828000000000e-10 3.558070014658e-04 + 2.928000000000e-10 -1.428409974599e-01 + 3.028000000000e-10 -2.298289579719e-01 + 3.128000000000e-10 -2.678794741753e-01 + 3.228000000000e-10 -3.017454056957e-01 + 3.328000000000e-10 -3.410620518407e-01 + 3.428000000000e-10 -3.712405389398e-01 + 3.528000000000e-10 -3.749327973471e-01 + 3.628000000000e-10 -3.157484466493e-01 + 3.728000000000e-10 -1.773087198166e-01 + 3.828000000000e-10 -7.070252178339e-03 + 3.928000000000e-10 1.364462941621e-01 + 4.028000000000e-10 2.243241068758e-01 + 4.128000000000e-10 2.631279769125e-01 + 4.228000000000e-10 2.976097246349e-01 + 4.328000000000e-10 3.371159716785e-01 + 4.428000000000e-10 3.676405775058e-01 + 4.528000000000e-10 3.717787254056e-01 + 4.628000000000e-10 3.133854979421e-01 + 4.728000000000e-10 1.756870158595e-01 + 4.828000000000e-10 6.171257018760e-03 + 4.928000000000e-10 -1.369680995621e-01 + 5.028000000000e-10 -2.245781248931e-01 + 5.128000000000e-10 -2.633829468620e-01 + 5.228000000000e-10 -2.978042748481e-01 + 5.328000000000e-10 -3.373348877854e-01 + 5.428000000000e-10 -3.677584906255e-01 + 5.528000000000e-10 -3.718812762918e-01 + 5.628000000000e-10 -3.133649557524e-01 + 5.728000000000e-10 -1.756479312047e-01 + 5.828000000000e-10 -6.040608056278e-03 + 5.928000000000e-10 1.370690415770e-01 + 6.028000000000e-10 2.247181767783e-01 + 6.128000000000e-10 2.634617265965e-01 + 6.228000000000e-10 2.979157296699e-01 + 6.328000000000e-10 3.373958940353e-01 + 6.428000000000e-10 3.678612954525e-01 + 6.528000000000e-10 3.719309221475e-01 + 6.628000000000e-10 3.134447453066e-01 + 6.728000000000e-10 1.756687688086e-01 + 6.828000000000e-10 6.090200135509e-03 + 6.928000000000e-10 -1.370702307281e-01 + 7.028000000000e-10 -2.246847420648e-01 + 7.128000000000e-10 -2.634701196121e-01 + 7.228000000000e-10 -2.978849158722e-01 + 7.328000000000e-10 -3.374068878437e-01 + 7.428000000000e-10 -3.678336110941e-01 + 7.528000000000e-10 -3.719446503824e-01 + 7.628000000000e-10 -3.134227431793e-01 + 7.728000000000e-10 -1.756868885858e-01 + 7.828000000000e-10 -6.072676723321e-03 + 7.928000000000e-10 1.370503070743e-01 + 8.028000000000e-10 2.247004966695e-01 + 8.128000000000e-10 2.634509722982e-01 + 8.228000000000e-10 2.979013793804e-01 + 8.328000000000e-10 3.373870921905e-01 + 8.428000000000e-10 3.678495602861e-01 + 8.528000000000e-10 3.719256264749e-01 + 8.628000000000e-10 3.134381864470e-01 + 8.728000000000e-10 1.756688935561e-01 + 8.828000000000e-10 6.088345643719e-03 + 8.928000000000e-10 -1.370666831053e-01 + 9.028000000000e-10 -2.246851372638e-01 + 9.128000000000e-10 -2.634666121684e-01 + 9.228000000000e-10 -2.978856025968e-01 + 9.328000000000e-10 -3.374033621769e-01 + 9.428000000000e-10 -3.678342837151e-01 + 9.528000000000e-10 -3.719412125322e-01 + 9.628000000000e-10 -3.134235677100e-01 + 9.728000000000e-10 -1.756838495744e-01 + 9.828000000000e-10 -6.073781243164e-03 + 9.928000000000e-10 1.370527135588e-01 + 1.000000000000e-09 2.065229990524e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/conditions.yaml new file mode 100644 index 00000000..17737255 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 26 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/run_26 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/simulation_summary.csv b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/simulation_summary.csv new file mode 100644 index 00000000..1c9074b8 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/simulation_summary.csv @@ -0,0 +1,28 @@ +run,corner,temperature,vdd,time,vo_diff,frequency +run_00,tt,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.111e-01, -1.870e-01, -3.563e-02, …]",4.722e+09 +run_01,ff,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.099e-01, -1.895e-01, -4.060e-02, …]",4.722e+09 +run_02,ss,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.163e-01, -1.876e-01, -3.217e-02, …]",4.722e+09 +run_03,tt,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.915e-01, -1.780e-01, -3.803e-02, …]",4.722e+09 +run_04,ff,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.909e-01, -1.806e-01, -4.276e-02, …]",4.722e+09 +run_05,ss,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.959e-01, -1.792e-01, -3.599e-02, …]",4.722e+09 +run_06,tt,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.689e-01, -1.692e-01, -4.423e-02, …]",4.722e+09 +run_07,ff,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.694e-01, -1.722e-01, -4.907e-02, …]",4.722e+09 +run_08,ss,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.723e-01, -1.701e-01, -4.252e-02, …]",4.722e+09 +run_09,tt,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.623e-01, -1.963e-01, -5.713e-03, …]",4.722e+09 +run_10,ff,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.622e-01, -1.984e-01, -1.024e-02, …]",4.722e+09 +run_11,ss,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.669e-01, -1.979e-01, -3.070e-03, …]",4.722e+09 +run_12,tt,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.388e-01, -1.852e-01, -4.985e-03, …]",4.722e+09 +run_13,ff,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.407e-01, -1.880e-01, -9.263e-03, …]",4.722e+09 +run_14,ss,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.446e-01, -1.889e-01, -5.355e-03, …]",4.722e+09 +run_15,tt,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.832e-01, -1.548e-01, 2.955e-03, …]",4.722e+09 +run_16,ff,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.908e-01, -1.609e-01, -2.321e-03, …]",4.722e+09 +run_17,ss,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.858e-01, -1.573e-01, 2.540e-03, …]",4.722e+09 +run_18,tt,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.214e-01, -1.558e-01, 3.477e-02, …]",4.722e+09 +run_19,ff,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.163e-01, -1.529e-01, 3.475e-02, …]",4.722e+09 +run_20,ss,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.365e-01, -1.657e-01, 3.100e-02, …]",4.722e+09 +run_21,tt,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.748e-01, -1.328e-01, 3.931e-02, …]",4.722e+09 +run_22,ff,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.701e-01, -1.295e-01, 4.028e-02, …]",4.722e+09 +run_23,ss,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.957e-01, -1.475e-01, 3.197e-02, …]",4.722e+09 +run_24,tt,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-1.909e-01, -9.049e-02, 3.946e-02, …]",4.722e+09 +run_25,ff,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-1.879e-01, -8.812e-02, 4.047e-02, …]",4.722e+09 +run_26,ss,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.136e-01, -1.054e-01, 3.486e-02, …]",4.722e+09 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/simulation_summary.md b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/simulation_summary.md new file mode 100644 index 00000000..31c8cc54 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-46-18/parameters/Frequency/simulation_summary.md @@ -0,0 +1,31 @@ +# Simulation Summary for Freq + +| run | corner | temperature | vdd | time | vo_diff | frequency | +| :-- | -----: | ----------: | --: | ---: | ------: | --------: | +| run_00 | tt | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.111e-01, -1.870e-01, -3.563e-02, …] | 4.722e+09 | +| run_01 | ff | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.099e-01, -1.895e-01, -4.060e-02, …] | 4.722e+09 | +| run_02 | ss | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.163e-01, -1.876e-01, -3.217e-02, …] | 4.722e+09 | +| run_03 | tt | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.915e-01, -1.780e-01, -3.803e-02, …] | 4.722e+09 | +| run_04 | ff | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.909e-01, -1.806e-01, -4.276e-02, …] | 4.722e+09 | +| run_05 | ss | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.959e-01, -1.792e-01, -3.599e-02, …] | 4.722e+09 | +| run_06 | tt | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.689e-01, -1.692e-01, -4.423e-02, …] | 4.722e+09 | +| run_07 | ff | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.694e-01, -1.722e-01, -4.907e-02, …] | 4.722e+09 | +| run_08 | ss | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.723e-01, -1.701e-01, -4.252e-02, …] | 4.722e+09 | +| run_09 | tt | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.623e-01, -1.963e-01, -5.713e-03, …] | 4.722e+09 | +| run_10 | ff | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.622e-01, -1.984e-01, -1.024e-02, …] | 4.722e+09 | +| run_11 | ss | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.669e-01, -1.979e-01, -3.070e-03, …] | 4.722e+09 | +| run_12 | tt | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.388e-01, -1.852e-01, -4.985e-03, …] | 4.722e+09 | +| run_13 | ff | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.407e-01, -1.880e-01, -9.263e-03, …] | 4.722e+09 | +| run_14 | ss | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.446e-01, -1.889e-01, -5.355e-03, …] | 4.722e+09 | +| run_15 | tt | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.832e-01, -1.548e-01, 2.955e-03, …] | 4.722e+09 | +| run_16 | ff | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.908e-01, -1.609e-01, -2.321e-03, …] | 4.722e+09 | +| run_17 | ss | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.858e-01, -1.573e-01, 2.540e-03, …] | 4.722e+09 | +| run_18 | tt | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.214e-01, -1.558e-01, 3.477e-02, …] | 4.722e+09 | +| run_19 | ff | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.163e-01, -1.529e-01, 3.475e-02, …] | 4.722e+09 | +| run_20 | ss | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.365e-01, -1.657e-01, 3.100e-02, …] | 4.722e+09 | +| run_21 | tt | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.748e-01, -1.328e-01, 3.931e-02, …] | 4.722e+09 | +| run_22 | ff | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.701e-01, -1.295e-01, 4.028e-02, …] | 4.722e+09 | +| run_23 | ss | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.957e-01, -1.475e-01, 3.197e-02, …] | 4.722e+09 | +| run_24 | tt | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-1.909e-01, -9.049e-02, 3.946e-02, …] | 4.722e+09 | +| run_25 | ff | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-1.879e-01, -8.812e-02, 4.047e-02, …] | 4.722e+09 | +| run_26 | ss | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.136e-01, -1.054e-01, 3.486e-02, …] | 4.722e+09 | diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/CML_core_tb.sch new file mode 100644 index 00000000..48f6f0bb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=CACE\{vdd\} savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/frequency.png b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/frequency.png new file mode 100644 index 0000000000000000000000000000000000000000..e4b0a21a410ea45152b21e69092b27c4fd38834f GIT binary patch literal 187075 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�wTWw%38sW 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 t6~vlD*Y&45GNmD literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/CML_core_tb.sch new file mode 100644 index 00000000..f594c8b5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/CML_core_tb_0.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/CML_core_tb_0.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/CML_core_tb_0.data new file mode 100644 index 00000000..4cb5b399 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/CML_core_tb_0.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.110742996065e-01 + 1.728000000000e-10 -1.869505717284e-01 + 1.828000000000e-10 -3.563037101706e-02 + 1.928000000000e-10 1.056708524540e-01 + 2.028000000000e-10 2.100393804445e-01 + 2.128000000000e-10 2.784249297688e-01 + 2.228000000000e-10 3.224310579067e-01 + 2.328000000000e-10 3.548600651170e-01 + 2.428000000000e-10 3.792482005271e-01 + 2.528000000000e-10 3.740820324036e-01 + 2.628000000000e-10 3.079440308227e-01 + 2.728000000000e-10 1.813826171807e-01 + 2.828000000000e-10 2.923027813912e-02 + 2.928000000000e-10 -1.118282325615e-01 + 3.028000000000e-10 -2.157337068367e-01 + 3.128000000000e-10 -2.829033176767e-01 + 3.228000000000e-10 -3.260714502323e-01 + 3.328000000000e-10 -3.577361248183e-01 + 3.428000000000e-10 -3.819104006606e-01 + 3.528000000000e-10 -3.764730474160e-01 + 3.628000000000e-10 -3.102968359246e-01 + 3.728000000000e-10 -1.832608913655e-01 + 3.828000000000e-10 -3.084931437320e-02 + 3.928000000000e-10 1.106163095990e-01 + 4.028000000000e-10 2.145714971977e-01 + 4.128000000000e-10 2.819937231053e-01 + 4.228000000000e-10 3.251740998910e-01 + 4.328000000000e-10 3.570946969464e-01 + 4.428000000000e-10 3.813004444382e-01 + 4.528000000000e-10 3.761230596147e-01 + 4.628000000000e-10 3.099646053412e-01 + 4.728000000000e-10 1.831473345022e-01 + 4.828000000000e-10 3.069401022130e-02 + 4.928000000000e-10 -1.106258411343e-01 + 5.028000000000e-10 -2.146793601179e-01 + 5.128000000000e-10 -2.820035552799e-01 + 5.228000000000e-10 -3.252909243829e-01 + 5.328000000000e-10 -3.570986338553e-01 + 5.428000000000e-10 -3.813904658256e-01 + 5.528000000000e-10 -3.760889514061e-01 + 5.628000000000e-10 -3.100114096943e-01 + 5.728000000000e-10 -1.830827247194e-01 + 5.828000000000e-10 -3.072480545922e-02 + 5.928000000000e-10 1.106906463094e-01 + 6.028000000000e-10 2.146493837568e-01 + 6.128000000000e-10 2.820610673881e-01 + 6.228000000000e-10 3.252525482967e-01 + 6.328000000000e-10 3.571504708749e-01 + 6.428000000000e-10 3.813516648295e-01 + 6.528000000000e-10 3.761390656738e-01 + 6.628000000000e-10 3.099742259389e-01 + 6.728000000000e-10 1.831331110808e-01 + 6.828000000000e-10 3.068765829312e-02 + 6.928000000000e-10 -1.106445812930e-01 + 7.028000000000e-10 -2.146859050297e-01 + 7.128000000000e-10 -2.820172231683e-01 + 7.228000000000e-10 -3.252905125649e-01 + 7.328000000000e-10 -3.571078709926e-01 + 7.428000000000e-10 -3.813893177320e-01 + 7.528000000000e-10 -3.760986555866e-01 + 7.628000000000e-10 -3.100117776476e-01 + 7.728000000000e-10 -1.830935153198e-01 + 7.828000000000e-10 -3.072484475908e-02 + 7.928000000000e-10 1.106810594907e-01 + 8.028000000000e-10 2.146507312123e-01 + 8.128000000000e-10 2.820530370402e-01 + 8.228000000000e-10 3.252547871433e-01 + 8.328000000000e-10 3.571432636036e-01 + 8.428000000000e-10 3.813547544577e-01 + 8.528000000000e-10 3.761324372121e-01 + 8.628000000000e-10 3.099775475493e-01 + 8.728000000000e-10 1.831274535707e-01 + 8.828000000000e-10 3.069175078476e-02 + 8.928000000000e-10 -1.106491559136e-01 + 9.028000000000e-10 -2.146821655528e-01 + 9.128000000000e-10 -2.820218639330e-01 + 9.228000000000e-10 -3.252864642203e-01 + 9.328000000000e-10 -3.571122611941e-01 + 9.428000000000e-10 -3.813854215351e-01 + 9.528000000000e-10 -3.761024723822e-01 + 9.628000000000e-10 -3.100075395903e-01 + 9.728000000000e-10 -1.830975404653e-01 + 9.828000000000e-10 -3.072097080048e-02 + 9.928000000000e-10 1.106770531472e-01 + 1.000000000000e-09 1.895325033433e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/conditions.yaml new file mode 100644 index 00000000..de36aa6b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_00 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/CML_core_tb.sch new file mode 100644 index 00000000..55050413 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/CML_core_tb_1.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/CML_core_tb_1.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/CML_core_tb_1.data new file mode 100644 index 00000000..2b8492c0 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/CML_core_tb_1.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.098686002716e-01 + 1.728000000000e-10 -1.894560696460e-01 + 1.828000000000e-10 -4.059695742871e-02 + 1.928000000000e-10 9.940964501315e-02 + 2.028000000000e-10 2.033133834097e-01 + 2.128000000000e-10 2.719620830710e-01 + 2.228000000000e-10 3.163098950569e-01 + 2.328000000000e-10 3.491513279687e-01 + 2.428000000000e-10 3.741332087119e-01 + 2.528000000000e-10 3.700254590965e-01 + 2.628000000000e-10 3.062168938694e-01 + 2.728000000000e-10 1.827341653261e-01 + 2.828000000000e-10 3.280764574542e-02 + 2.928000000000e-10 -1.069769977212e-01 + 3.028000000000e-10 -2.102924295592e-01 + 3.128000000000e-10 -2.774748738503e-01 + 3.228000000000e-10 -3.207751929169e-01 + 3.328000000000e-10 -3.527202709264e-01 + 3.428000000000e-10 -3.774342269369e-01 + 3.528000000000e-10 -3.730540733905e-01 + 3.628000000000e-10 -3.091949741363e-01 + 3.728000000000e-10 -1.851642002832e-01 + 3.828000000000e-10 -3.487935842603e-02 + 3.928000000000e-10 1.053970083053e-01 + 4.028000000000e-10 2.088131472734e-01 + 4.128000000000e-10 2.762908135843e-01 + 4.228000000000e-10 3.196385089100e-01 + 4.328000000000e-10 3.518763575372e-01 + 4.428000000000e-10 3.766558038448e-01 + 4.528000000000e-10 3.725714207051e-01 + 4.628000000000e-10 3.087619830708e-01 + 4.728000000000e-10 1.849833837695e-01 + 4.828000000000e-10 3.467977975354e-02 + 4.928000000000e-10 -1.054340839288e-01 + 5.028000000000e-10 -2.089448612506e-01 + 5.128000000000e-10 -2.763231704068e-01 + 5.228000000000e-10 -3.197791718821e-01 + 5.328000000000e-10 -3.518998659973e-01 + 5.428000000000e-10 -3.767613178326e-01 + 5.528000000000e-10 -3.725445308461e-01 + 5.628000000000e-10 -3.088109693961e-01 + 5.728000000000e-10 -1.849155432321e-01 + 5.828000000000e-10 -3.470667341543e-02 + 5.928000000000e-10 1.055048847061e-01 + 6.028000000000e-10 2.089187592091e-01 + 6.128000000000e-10 2.763849186823e-01 + 6.228000000000e-10 3.197425041182e-01 + 6.328000000000e-10 3.519544114659e-01 + 6.428000000000e-10 3.767237647599e-01 + 6.528000000000e-10 3.725977061828e-01 + 6.628000000000e-10 3.087755728399e-01 + 6.728000000000e-10 1.849692271918e-01 + 6.828000000000e-10 3.467099374312e-02 + 6.928000000000e-10 -1.054562384013e-01 + 7.028000000000e-10 -2.089544093361e-01 + 7.128000000000e-10 -2.763388509076e-01 + 7.228000000000e-10 -3.197800091948e-01 + 7.328000000000e-10 -3.519101110125e-01 + 7.428000000000e-10 -3.767612419697e-01 + 7.528000000000e-10 -3.725558598664e-01 + 7.628000000000e-10 -3.088133010441e-01 + 7.728000000000e-10 -1.849285593480e-01 + 7.828000000000e-10 -3.470862903587e-02 + 7.928000000000e-10 1.054936381918e-01 + 8.028000000000e-10 2.089186129636e-01 + 8.128000000000e-10 2.763755879874e-01 + 8.228000000000e-10 3.197437164625e-01 + 8.328000000000e-10 3.519463479929e-01 + 8.428000000000e-10 3.767260853907e-01 + 8.528000000000e-10 3.725904126785e-01 + 8.628000000000e-10 3.087783440951e-01 + 8.728000000000e-10 1.849632167070e-01 + 8.828000000000e-10 3.467482549783e-02 + 8.928000000000e-10 -1.054610682584e-01 + 9.028000000000e-10 -2.089507846182e-01 + 9.128000000000e-10 -2.763436586770e-01 + 9.228000000000e-10 -3.197760754687e-01 + 9.328000000000e-10 -3.519146615050e-01 + 9.428000000000e-10 -3.767573997120e-01 + 9.528000000000e-10 -3.725597535055e-01 + 9.628000000000e-10 -3.088090609970e-01 + 9.728000000000e-10 -1.849326628321e-01 + 9.828000000000e-10 -3.470475490247e-02 + 9.928000000000e-10 1.054896146910e-01 + 1.000000000000e-09 1.838520001242e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/conditions.yaml new file mode 100644 index 00000000..d1dfdfa9 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 1 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_01 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/CML_core_tb.sch new file mode 100644 index 00000000..f6084e58 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/CML_core_tb_2.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/CML_core_tb_2.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/CML_core_tb_2.data new file mode 100644 index 00000000..b332ca2c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/CML_core_tb_2.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.162797108708e-01 + 1.728000000000e-10 -1.875883768906e-01 + 1.828000000000e-10 -3.217177564589e-02 + 1.928000000000e-10 1.118453904517e-01 + 2.028000000000e-10 2.178869753922e-01 + 2.128000000000e-10 2.869187499571e-01 + 2.228000000000e-10 3.311831063176e-01 + 2.328000000000e-10 3.637965093552e-01 + 2.428000000000e-10 3.884475585753e-01 + 2.528000000000e-10 3.831703446637e-01 + 2.628000000000e-10 3.149426000366e-01 + 2.728000000000e-10 1.840825734866e-01 + 2.828000000000e-10 2.786370536806e-02 + 2.928000000000e-10 -1.159899232258e-01 + 3.028000000000e-10 -2.217323928122e-01 + 3.128000000000e-10 -2.897841810826e-01 + 3.228000000000e-10 -3.334256487170e-01 + 3.328000000000e-10 -3.654508602495e-01 + 3.428000000000e-10 -3.900407544937e-01 + 3.528000000000e-10 -3.846189534315e-01 + 3.628000000000e-10 -3.164922452622e-01 + 3.728000000000e-10 -1.853182634851e-01 + 3.828000000000e-10 -2.898615964086e-02 + 3.928000000000e-10 1.151710782521e-01 + 4.028000000000e-10 2.209054309263e-01 + 4.128000000000e-10 2.891817322742e-01 + 4.228000000000e-10 3.328077516782e-01 + 4.328000000000e-10 3.650515838921e-01 + 4.428000000000e-10 3.896233583948e-01 + 4.528000000000e-10 3.844074302627e-01 + 4.628000000000e-10 3.162448842688e-01 + 4.728000000000e-10 1.852475068120e-01 + 4.828000000000e-10 2.884623360652e-02 + 4.928000000000e-10 -1.151788252337e-01 + 5.028000000000e-10 -2.210147130581e-01 + 5.128000000000e-10 -2.891872658193e-01 + 5.228000000000e-10 -3.329167168088e-01 + 5.328000000000e-10 -3.650471930963e-01 + 5.428000000000e-10 -3.897100874545e-01 + 5.528000000000e-10 -3.843762306477e-01 + 5.628000000000e-10 -3.163013912188e-01 + 5.728000000000e-10 -1.851950213487e-01 + 5.828000000000e-10 -2.889036873678e-02 + 5.928000000000e-10 1.152312899162e-01 + 6.028000000000e-10 2.209735588305e-01 + 6.128000000000e-10 2.892357416511e-01 + 6.228000000000e-10 3.328707955285e-01 + 6.328000000000e-10 3.650931065031e-01 + 6.428000000000e-10 3.896657987149e-01 + 6.528000000000e-10 3.844215105032e-01 + 6.628000000000e-10 3.162596917265e-01 + 6.728000000000e-10 1.852417351036e-01 + 6.828000000000e-10 2.884992827621e-02 + 6.928000000000e-10 -1.151876679011e-01 + 7.028000000000e-10 -2.210123101756e-01 + 7.128000000000e-10 -2.891938845816e-01 + 7.228000000000e-10 -3.329106389600e-01 + 7.328000000000e-10 -3.650518039465e-01 + 7.428000000000e-10 -3.897047407363e-01 + 7.528000000000e-10 -3.843819858648e-01 + 7.628000000000e-10 -3.162978744015e-01 + 7.728000000000e-10 -1.852023753321e-01 + 7.828000000000e-10 -2.888743165850e-02 + 7.928000000000e-10 1.152240030808e-01 + 8.028000000000e-10 2.209771419031e-01 + 8.128000000000e-10 2.892295361788e-01 + 8.228000000000e-10 3.328747680971e-01 + 8.328000000000e-10 3.650871456099e-01 + 8.428000000000e-10 3.896701175780e-01 + 8.528000000000e-10 3.844156912621e-01 + 8.628000000000e-10 3.162637401476e-01 + 8.728000000000e-10 1.852363586492e-01 + 8.828000000000e-10 2.885434112124e-02 + 8.928000000000e-10 -1.151920978903e-01 + 9.028000000000e-10 -2.210084087345e-01 + 9.128000000000e-10 -2.891984388712e-01 + 9.228000000000e-10 -3.329064027155e-01 + 9.328000000000e-10 -3.650560988894e-01 + 9.428000000000e-10 -3.897007143418e-01 + 9.528000000000e-10 -3.843858173814e-01 + 9.628000000000e-10 -3.162935974835e-01 + 9.728000000000e-10 -1.852064424274e-01 + 9.828000000000e-10 -2.888350905479e-02 + 9.928000000000e-10 1.152199079204e-01 + 1.000000000000e-09 1.954791142410e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/conditions.yaml new file mode 100644 index 00000000..ba5c3aa0 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 2 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_02 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/CML_core_tb.sch new file mode 100644 index 00000000..6ac65fea --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/CML_core_tb_3.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/CML_core_tb_3.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/CML_core_tb_3.data new file mode 100644 index 00000000..6dccbfd6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/CML_core_tb_3.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.914571027454e-01 + 1.728000000000e-10 -1.780117263272e-01 + 1.828000000000e-10 -3.802564096594e-02 + 1.928000000000e-10 9.479025580261e-02 + 2.028000000000e-10 1.961220444980e-01 + 2.128000000000e-10 2.643669322964e-01 + 2.228000000000e-10 3.071498875260e-01 + 2.328000000000e-10 3.351667250191e-01 + 2.428000000000e-10 3.529478733093e-01 + 2.528000000000e-10 3.439767079911e-01 + 2.628000000000e-10 2.827109934029e-01 + 2.728000000000e-10 1.683025534555e-01 + 2.828000000000e-10 2.843266655337e-02 + 2.928000000000e-10 -1.036223502576e-01 + 3.028000000000e-10 -2.042863713809e-01 + 3.128000000000e-10 -2.713818104821e-01 + 3.228000000000e-10 -3.132717880322e-01 + 3.328000000000e-10 -3.402903477971e-01 + 3.428000000000e-10 -3.574262556597e-01 + 3.528000000000e-10 -3.476240566503e-01 + 3.628000000000e-10 -2.857203755187e-01 + 3.728000000000e-10 -1.703849236420e-01 + 3.828000000000e-10 -2.994825869373e-02 + 3.928000000000e-10 1.026817167876e-01 + 4.028000000000e-10 2.034750084544e-01 + 4.128000000000e-10 2.707812081585e-01 + 4.228000000000e-10 3.126503625184e-01 + 4.328000000000e-10 3.399043734480e-01 + 4.428000000000e-10 3.571021595385e-01 + 4.528000000000e-10 3.475896983741e-01 + 4.628000000000e-10 2.857411927694e-01 + 4.728000000000e-10 1.706053611761e-01 + 4.828000000000e-10 3.010795594348e-02 + 4.928000000000e-10 -1.024135388755e-01 + 5.028000000000e-10 -2.033190471438e-01 + 5.128000000000e-10 -2.705615444577e-01 + 5.228000000000e-10 -3.125558523975e-01 + 5.328000000000e-10 -3.397330193449e-01 + 5.428000000000e-10 -3.570354300338e-01 + 5.528000000000e-10 -3.474353611027e-01 + 5.628000000000e-10 -2.856876769732e-01 + 5.728000000000e-10 -1.704760895977e-01 + 5.828000000000e-10 -3.008641427314e-02 + 5.928000000000e-10 1.025087996136e-01 + 6.028000000000e-10 2.033209986443e-01 + 6.128000000000e-10 2.706412375819e-01 + 6.228000000000e-10 3.125457575810e-01 + 6.328000000000e-10 3.398008382665e-01 + 6.428000000000e-10 3.570145583479e-01 + 6.528000000000e-10 3.474888598072e-01 + 6.628000000000e-10 2.856551852535e-01 + 6.728000000000e-10 1.705188293935e-01 + 6.828000000000e-10 3.004736925580e-02 + 6.928000000000e-10 -1.024728514478e-01 + 7.028000000000e-10 -2.033602328622e-01 + 7.128000000000e-10 -2.706061106716e-01 + 7.228000000000e-10 -3.125843283316e-01 + 7.328000000000e-10 -3.397655433228e-01 + 7.428000000000e-10 -3.570523646632e-01 + 7.528000000000e-10 -3.474554820929e-01 + 7.628000000000e-10 -2.856929985560e-01 + 7.728000000000e-10 -1.704859799650e-01 + 7.828000000000e-10 -3.008383757896e-02 + 7.928000000000e-10 1.025039608177e-01 + 8.028000000000e-10 2.033261442763e-01 + 8.128000000000e-10 2.706371082838e-01 + 8.228000000000e-10 3.125504649737e-01 + 8.328000000000e-10 3.397966066528e-01 + 8.428000000000e-10 3.570198965640e-01 + 8.528000000000e-10 3.474857187206e-01 + 8.628000000000e-10 2.856614378232e-01 + 8.728000000000e-10 1.705164607562e-01 + 8.828000000000e-10 3.005354621749e-02 + 8.928000000000e-10 -1.024749769036e-01 + 9.028000000000e-10 -2.033548454455e-01 + 9.128000000000e-10 -2.706087008930e-01 + 9.228000000000e-10 -3.125792630790e-01 + 9.328000000000e-10 -3.397683901773e-01 + 9.428000000000e-10 -3.570478314069e-01 + 9.528000000000e-10 -3.474583427153e-01 + 9.628000000000e-10 -2.856887110961e-01 + 9.728000000000e-10 -1.704892548593e-01 + 9.828000000000e-10 -3.008001356704e-02 + 9.928000000000e-10 1.025005080892e-01 + 1.000000000000e-09 1.786649040194e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/conditions.yaml new file mode 100644 index 00000000..e8f17db4 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 3 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_03 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/CML_core_tb.sch new file mode 100644 index 00000000..d049f138 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/CML_core_tb_4.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/CML_core_tb_4.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/CML_core_tb_4.data new file mode 100644 index 00000000..3efc8a54 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/CML_core_tb_4.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.908886906683e-01 + 1.728000000000e-10 -1.805890382926e-01 + 1.828000000000e-10 -4.276329247682e-02 + 1.928000000000e-10 8.882407595099e-02 + 2.028000000000e-10 1.894983505466e-01 + 2.128000000000e-10 2.576242567207e-01 + 2.228000000000e-10 3.005212718886e-01 + 2.328000000000e-10 3.289546768723e-01 + 2.428000000000e-10 3.474240530436e-01 + 2.528000000000e-10 3.394794629215e-01 + 2.628000000000e-10 2.802266193594e-01 + 2.728000000000e-10 1.685520573893e-01 + 2.828000000000e-10 3.081792474830e-02 + 2.928000000000e-10 -9.985913249602e-02 + 3.028000000000e-10 -1.996535082954e-01 + 3.128000000000e-10 -2.663519845580e-01 + 3.228000000000e-10 -3.081166100610e-01 + 3.328000000000e-10 -3.353557582557e-01 + 3.428000000000e-10 -3.530339682910e-01 + 3.528000000000e-10 -3.441234226063e-01 + 3.628000000000e-10 -2.840838930007e-01 + 3.728000000000e-10 -1.712890179908e-01 + 3.828000000000e-10 -3.280692441870e-02 + 3.928000000000e-10 9.858702888345e-02 + 4.028000000000e-10 1.985844458095e-01 + 4.128000000000e-10 2.655374220709e-01 + 4.228000000000e-10 3.073092043222e-01 + 4.328000000000e-10 3.348254361967e-01 + 4.428000000000e-10 3.526065806553e-01 + 4.528000000000e-10 3.440384505411e-01 + 4.628000000000e-10 2.840943593119e-01 + 4.728000000000e-10 1.715352376725e-01 + 4.828000000000e-10 3.300625747524e-02 + 4.928000000000e-10 -9.826793525126e-02 + 5.028000000000e-10 -1.983826392696e-01 + 5.128000000000e-10 -2.652748957302e-01 + 5.228000000000e-10 -3.071819372703e-01 + 5.328000000000e-10 -3.346211766496e-01 + 5.428000000000e-10 -3.525115401756e-01 + 5.528000000000e-10 -3.438520776438e-01 + 5.628000000000e-10 -2.840132934403e-01 + 5.728000000000e-10 -1.713783534881e-01 + 5.828000000000e-10 -3.296528839742e-02 + 5.928000000000e-10 9.838210726041e-02 + 6.028000000000e-10 1.983970962128e-01 + 6.128000000000e-10 2.653685996210e-01 + 6.228000000000e-10 3.071805271474e-01 + 6.328000000000e-10 3.346994451143e-01 + 6.428000000000e-10 3.524959527178e-01 + 6.528000000000e-10 3.439124816552e-01 + 6.628000000000e-10 2.839825148385e-01 + 6.728000000000e-10 1.714247364616e-01 + 6.828000000000e-10 3.292536702304e-02 + 6.928000000000e-10 -9.834444145178e-02 + 7.028000000000e-10 -1.984381153623e-01 + 7.128000000000e-10 -2.653318964793e-01 + 7.228000000000e-10 -3.072207693265e-01 + 7.328000000000e-10 -3.346627011511e-01 + 7.428000000000e-10 -3.525355719541e-01 + 7.528000000000e-10 -3.438780517049e-01 + 7.628000000000e-10 -2.840226095914e-01 + 7.728000000000e-10 -1.713910964736e-01 + 7.828000000000e-10 -3.296406429130e-02 + 7.928000000000e-10 9.837645950128e-02 + 8.028000000000e-10 1.984019833998e-01 + 8.128000000000e-10 2.653640104122e-01 + 8.228000000000e-10 3.071850636337e-01 + 8.328000000000e-10 3.346949515146e-01 + 8.428000000000e-10 3.525014052751e-01 + 8.528000000000e-10 3.439095067618e-01 + 8.628000000000e-10 2.839893402731e-01 + 8.728000000000e-10 1.714228569780e-01 + 8.828000000000e-10 3.293222880403e-02 + 8.928000000000e-10 -9.834616516704e-02 + 9.028000000000e-10 -1.984321208293e-01 + 9.128000000000e-10 -2.653341991167e-01 + 9.228000000000e-10 -3.072152380466e-01 + 9.328000000000e-10 -3.346653803170e-01 + 9.428000000000e-10 -3.525306496503e-01 + 9.528000000000e-10 -3.438807929682e-01 + 9.628000000000e-10 -2.840179937834e-01 + 9.728000000000e-10 -1.713943425416e-01 + 9.828000000000e-10 -3.296001530074e-02 + 9.928000000000e-10 9.837298926970e-02 + 1.000000000000e-09 1.738955459088e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/conditions.yaml new file mode 100644 index 00000000..5df8815a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 4 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_04 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/CML_core_tb.sch new file mode 100644 index 00000000..ac517bac --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/CML_core_tb_5.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/CML_core_tb_5.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/CML_core_tb_5.data new file mode 100644 index 00000000..0cc77d23 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/CML_core_tb_5.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.958574299710e-01 + 1.728000000000e-10 -1.791897212785e-01 + 1.828000000000e-10 -3.599075048614e-02 + 1.928000000000e-10 9.946703268478e-02 + 2.028000000000e-10 2.032502871016e-01 + 2.128000000000e-10 2.733994094958e-01 + 2.228000000000e-10 3.172845988123e-01 + 2.328000000000e-10 3.455609123691e-01 + 2.428000000000e-10 3.630923957132e-01 + 2.528000000000e-10 3.534419450967e-01 + 2.628000000000e-10 2.903663934708e-01 + 2.728000000000e-10 1.726743312860e-01 + 2.828000000000e-10 2.930291139472e-02 + 2.928000000000e-10 -1.057514312075e-01 + 3.028000000000e-10 -2.091913834589e-01 + 3.128000000000e-10 -2.784696434768e-01 + 3.228000000000e-10 -3.216873931074e-01 + 3.328000000000e-10 -3.491870426412e-01 + 3.428000000000e-10 -3.662894191498e-01 + 3.528000000000e-10 -3.560374131806e-01 + 3.628000000000e-10 -2.925719059469e-01 + 3.728000000000e-10 -1.742159787839e-01 + 3.828000000000e-10 -3.049391935212e-02 + 3.928000000000e-10 1.049756016137e-01 + 4.028000000000e-10 2.084672065617e-01 + 4.128000000000e-10 2.779301238417e-01 + 4.228000000000e-10 3.211180618030e-01 + 4.328000000000e-10 3.488255023686e-01 + 4.428000000000e-10 3.659572542624e-01 + 4.528000000000e-10 3.559493947967e-01 + 4.628000000000e-10 2.925058094407e-01 + 4.728000000000e-10 1.743267017008e-01 + 4.828000000000e-10 3.054314172764e-02 + 4.928000000000e-10 -1.048175245910e-01 + 5.028000000000e-10 -2.084096499031e-01 + 5.128000000000e-10 -2.777998408986e-01 + 5.228000000000e-10 -3.210985617265e-01 + 5.328000000000e-10 -3.487226120056e-01 + 5.428000000000e-10 -3.659481451181e-01 + 5.528000000000e-10 -3.558482598240e-01 + 5.628000000000e-10 -2.924942070749e-01 + 5.728000000000e-10 -1.742324941843e-01 + 5.828000000000e-10 -3.054486718364e-02 + 5.928000000000e-10 1.048934295445e-01 + 6.028000000000e-10 2.083991544976e-01 + 6.128000000000e-10 2.778660140822e-01 + 6.228000000000e-10 3.210794561497e-01 + 6.328000000000e-10 3.487805773205e-01 + 6.428000000000e-10 3.659226785140e-01 + 6.528000000000e-10 3.558970058340e-01 + 6.628000000000e-10 2.924624137185e-01 + 6.728000000000e-10 1.742748110039e-01 + 6.828000000000e-10 3.050920657876e-02 + 6.928000000000e-10 -1.048562048812e-01 + 7.028000000000e-10 -2.084343791218e-01 + 7.128000000000e-10 -2.778299623633e-01 + 7.228000000000e-10 -3.211147582115e-01 + 7.328000000000e-10 -3.487447461690e-01 + 7.428000000000e-10 -3.659575085549e-01 + 7.528000000000e-10 -3.558632428052e-01 + 7.628000000000e-10 -2.924972481137e-01 + 7.728000000000e-10 -1.742418088753e-01 + 7.828000000000e-10 -3.054328720193e-02 + 7.928000000000e-10 1.048870377838e-01 + 8.028000000000e-10 2.084024115537e-01 + 8.128000000000e-10 2.778603942564e-01 + 8.228000000000e-10 3.210827582845e-01 + 8.328000000000e-10 3.487751488045e-01 + 8.428000000000e-10 3.659266824704e-01 + 8.528000000000e-10 3.558925702991e-01 + 8.628000000000e-10 2.924671830422e-01 + 8.728000000000e-10 1.742711856894e-01 + 8.828000000000e-10 3.051417003050e-02 + 8.928000000000e-10 -1.048591994973e-01 + 9.028000000000e-10 -2.084299430076e-01 + 9.128000000000e-10 -2.778331783696e-01 + 9.228000000000e-10 -3.211104359655e-01 + 9.328000000000e-10 -3.487480244246e-01 + 9.428000000000e-10 -3.659535267111e-01 + 9.528000000000e-10 -3.558663548813e-01 + 9.628000000000e-10 -2.924933270906e-01 + 9.728000000000e-10 -1.742451324195e-01 + 9.828000000000e-10 -3.053963678018e-02 + 9.928000000000e-10 1.048836196344e-01 + 1.000000000000e-09 1.830293824662e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/conditions.yaml new file mode 100644 index 00000000..e65c52d5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 5 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_05 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/CML_core_tb.sch new file mode 100644 index 00000000..27fcf26c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/CML_core_tb_6.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/CML_core_tb_6.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/CML_core_tb_6.data new file mode 100644 index 00000000..38ffd8bf --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/CML_core_tb_6.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.689355033953e-01 + 1.728000000000e-10 -1.691728954892e-01 + 1.828000000000e-10 -4.423302134033e-02 + 1.928000000000e-10 7.663444207075e-02 + 2.028000000000e-10 1.714764750752e-01 + 2.128000000000e-10 2.368219567798e-01 + 2.228000000000e-10 2.772768132445e-01 + 2.328000000000e-10 3.013675537348e-01 + 2.428000000000e-10 3.140706479520e-01 + 2.528000000000e-10 3.038549886105e-01 + 2.628000000000e-10 2.508404086347e-01 + 2.728000000000e-10 1.528360605683e-01 + 2.828000000000e-10 3.040034809293e-02 + 2.928000000000e-10 -8.785381094258e-02 + 3.028000000000e-10 -1.808734961109e-01 + 3.128000000000e-10 -2.445795528199e-01 + 3.228000000000e-10 -2.838354337528e-01 + 3.328000000000e-10 -3.065800962400e-01 + 3.428000000000e-10 -3.181767360109e-01 + 3.528000000000e-10 -3.065752663659e-01 + 3.628000000000e-10 -2.523878800401e-01 + 3.728000000000e-10 -1.531173668737e-01 + 3.828000000000e-10 -2.992055538556e-02 + 3.928000000000e-10 8.900435641641e-02 + 4.028000000000e-10 1.821756238512e-01 + 4.128000000000e-10 2.460123650690e-01 + 4.228000000000e-10 2.851182310100e-01 + 4.328000000000e-10 3.079291995556e-01 + 4.428000000000e-10 3.194129911462e-01 + 4.528000000000e-10 3.078915366323e-01 + 4.628000000000e-10 2.535144344421e-01 + 4.728000000000e-10 1.541542026196e-01 + 4.828000000000e-10 3.063651583090e-02 + 4.928000000000e-10 -8.839161491074e-02 + 5.028000000000e-10 -1.817999659778e-01 + 5.128000000000e-10 -2.456456661989e-01 + 5.228000000000e-10 -2.849195350591e-01 + 5.328000000000e-10 -3.077091828990e-01 + 5.428000000000e-10 -3.193505374448e-01 + 5.528000000000e-10 -3.078081521678e-01 + 5.628000000000e-10 -2.535787813503e-01 + 5.728000000000e-10 -1.541764927596e-01 + 5.828000000000e-10 -3.077048554081e-02 + 5.928000000000e-10 8.832790620553e-02 + 6.028000000000e-10 1.816551916875e-01 + 6.128000000000e-10 2.455879975104e-01 + 6.228000000000e-10 2.847911932982e-01 + 6.328000000000e-10 3.076677363016e-01 + 6.428000000000e-10 3.192371229053e-01 + 6.528000000000e-10 3.077778412262e-01 + 6.628000000000e-10 2.534819327505e-01 + 6.728000000000e-10 1.541683138663e-01 + 6.828000000000e-10 3.070155435378e-02 + 6.928000000000e-10 -8.831320560130e-02 + 7.028000000000e-10 -1.817038543937e-01 + 7.128000000000e-10 -2.455619958387e-01 + 7.228000000000e-10 -2.848320347671e-01 + 7.328000000000e-10 -3.076358698550e-01 + 7.428000000000e-10 -3.192710667609e-01 + 7.528000000000e-10 -3.077409972388e-01 + 7.628000000000e-10 -2.535098012890e-01 + 7.728000000000e-10 -1.541282589474e-01 + 7.828000000000e-10 -3.072672689244e-02 + 7.928000000000e-10 8.835148526653e-02 + 8.028000000000e-10 1.816795669555e-01 + 8.128000000000e-10 2.455984246601e-01 + 8.228000000000e-10 2.848062931006e-01 + 8.328000000000e-10 3.076705916890e-01 + 8.428000000000e-10 3.192450073559e-01 + 8.528000000000e-10 3.077736319697e-01 + 8.628000000000e-10 2.534831121829e-01 + 8.728000000000e-10 1.541590953584e-01 + 8.828000000000e-10 3.069946612700e-02 + 8.928000000000e-10 -8.832341199891e-02 + 9.028000000000e-10 -1.817063952021e-01 + 9.128000000000e-10 -2.455714256322e-01 + 9.228000000000e-10 -2.848333922463e-01 + 9.328000000000e-10 -3.076440936715e-01 + 9.428000000000e-10 -3.192716274515e-01 + 9.528000000000e-10 -3.077481608676e-01 + 9.628000000000e-10 -2.535093614867e-01 + 9.728000000000e-10 -1.541340765567e-01 + 9.828000000000e-10 -3.072486745089e-02 + 9.928000000000e-10 8.834711873249e-02 + 1.000000000000e-09 1.586239577417e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/conditions.yaml new file mode 100644 index 00000000..5afc1722 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 6 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_06 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/CML_core_tb.sch new file mode 100644 index 00000000..519d1c35 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/CML_core_tb_7.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/CML_core_tb_7.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/CML_core_tb_7.data new file mode 100644 index 00000000..1cfe87b5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/CML_core_tb_7.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.694477874818e-01 + 1.728000000000e-10 -1.721829739194e-01 + 1.828000000000e-10 -4.906833766415e-02 + 1.928000000000e-10 7.069743134728e-02 + 2.028000000000e-10 1.648418946330e-01 + 2.128000000000e-10 2.298765389610e-01 + 2.228000000000e-10 2.702802052070e-01 + 2.328000000000e-10 2.947129455777e-01 + 2.428000000000e-10 3.081296602318e-01 + 2.528000000000e-10 2.990063012040e-01 + 2.628000000000e-10 2.478884705263e-01 + 2.728000000000e-10 1.524230846398e-01 + 2.828000000000e-10 3.216725009037e-02 + 2.928000000000e-10 -8.452884553171e-02 + 3.028000000000e-10 -1.764495371150e-01 + 3.128000000000e-10 -2.394951663999e-01 + 3.228000000000e-10 -2.784178156025e-01 + 3.328000000000e-10 -3.012580547427e-01 + 3.428000000000e-10 -3.133510931360e-01 + 3.528000000000e-10 -3.026055002423e-01 + 3.628000000000e-10 -2.500554574282e-01 + 3.728000000000e-10 -1.530444893437e-01 + 3.828000000000e-10 -3.179895766292e-02 + 3.928000000000e-10 8.573594509971e-02 + 4.028000000000e-10 1.778922744476e-01 + 4.128000000000e-10 2.411102030583e-01 + 4.228000000000e-10 2.798967112063e-01 + 4.328000000000e-10 3.028156837380e-01 + 4.428000000000e-10 3.148075876296e-01 + 4.528000000000e-10 3.041758344829e-01 + 4.628000000000e-10 2.514478797306e-01 + 4.728000000000e-10 1.543354303295e-01 + 4.828000000000e-10 3.272908827542e-02 + 4.928000000000e-10 -8.494488064942e-02 + 5.028000000000e-10 -1.773750790235e-01 + 5.128000000000e-10 -2.406241070550e-01 + 5.228000000000e-10 -2.796032327906e-01 + 5.328000000000e-10 -3.025154625175e-01 + 5.428000000000e-10 -3.146850050735e-01 + 5.528000000000e-10 -3.040456856306e-01 + 5.628000000000e-10 -2.514865398019e-01 + 5.728000000000e-10 -1.543455010081e-01 + 5.828000000000e-10 -3.286780649422e-02 + 5.928000000000e-10 8.487071769529e-02 + 6.028000000000e-10 1.772120847555e-01 + 6.128000000000e-10 2.405506532865e-01 + 6.228000000000e-10 2.794557736074e-01 + 6.328000000000e-10 3.024581955274e-01 + 6.428000000000e-10 3.145521515255e-01 + 6.528000000000e-10 3.039990633934e-01 + 6.628000000000e-10 2.513709142203e-01 + 6.728000000000e-10 1.543241408079e-01 + 6.828000000000e-10 3.278555364704e-02 + 6.928000000000e-10 -8.486327141666e-02 + 7.028000000000e-10 -1.772689800248e-01 + 7.128000000000e-10 -2.405282060865e-01 + 7.228000000000e-10 -2.795021370136e-01 + 7.328000000000e-10 -3.024278022377e-01 + 7.428000000000e-10 -3.145896170200e-01 + 7.528000000000e-10 -3.039617953787e-01 + 7.628000000000e-10 -2.514004690324e-01 + 7.728000000000e-10 -1.542820043229e-01 + 7.828000000000e-10 -3.281110337775e-02 + 7.928000000000e-10 8.490436306023e-02 + 8.028000000000e-10 1.772446330839e-01 + 8.128000000000e-10 2.405674335146e-01 + 8.228000000000e-10 2.794761963085e-01 + 8.328000000000e-10 3.024650976088e-01 + 8.428000000000e-10 3.145632644585e-01 + 8.528000000000e-10 3.039968961590e-01 + 8.628000000000e-10 2.513733111446e-01 + 8.728000000000e-10 1.543150179356e-01 + 8.828000000000e-10 3.278304586331e-02 + 8.928000000000e-10 -8.487456857602e-02 + 9.028000000000e-10 -1.772725618584e-01 + 9.128000000000e-10 -2.405389250041e-01 + 9.228000000000e-10 -2.795045102279e-01 + 9.328000000000e-10 -3.024372521320e-01 + 9.428000000000e-10 -3.145911572553e-01 + 9.528000000000e-10 -3.039701598993e-01 + 9.628000000000e-10 -2.514009218164e-01 + 9.728000000000e-10 -1.542887967264e-01 + 9.828000000000e-10 -3.280979517783e-02 + 9.928000000000e-10 8.489941508642e-02 + 1.000000000000e-09 1.544118489485e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/conditions.yaml new file mode 100644 index 00000000..7e83d801 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 7 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_07 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/CML_core_tb.sch new file mode 100644 index 00000000..8cd2f767 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/CML_core_tb_8.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/CML_core_tb_8.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/CML_core_tb_8.data new file mode 100644 index 00000000..b4ed17dd --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/CML_core_tb_8.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.722799425151e-01 + 1.728000000000e-10 -1.701277707773e-01 + 1.828000000000e-10 -4.252496989706e-02 + 1.928000000000e-10 8.092536896213e-02 + 2.028000000000e-10 1.785199933375e-01 + 2.128000000000e-10 2.463984181452e-01 + 2.228000000000e-10 2.885755113271e-01 + 2.328000000000e-10 3.131967480955e-01 + 2.428000000000e-10 3.255285716483e-01 + 2.528000000000e-10 3.143820454109e-01 + 2.628000000000e-10 2.595824958850e-01 + 2.728000000000e-10 1.585585813323e-01 + 2.828000000000e-10 3.254606172598e-02 + 2.928000000000e-10 -8.921916265210e-02 + 3.028000000000e-10 -1.857143058967e-01 + 3.128000000000e-10 -2.524588707093e-01 + 3.228000000000e-10 -2.937876617757e-01 + 3.328000000000e-10 -3.173655773168e-01 + 3.428000000000e-10 -3.288566343508e-01 + 3.528000000000e-10 -3.166123605828e-01 + 3.628000000000e-10 -2.609360611345e-01 + 3.728000000000e-10 -1.589355414621e-01 + 3.828000000000e-10 -3.237621747627e-02 + 3.928000000000e-10 8.990939637816e-02 + 4.028000000000e-10 1.864994737191e-01 + 4.128000000000e-10 2.533636311879e-01 + 4.228000000000e-10 2.945633129641e-01 + 4.328000000000e-10 3.182197832362e-01 + 4.428000000000e-10 3.296245618008e-01 + 4.528000000000e-10 3.174841059207e-01 + 4.628000000000e-10 2.616780558587e-01 + 4.728000000000e-10 1.596622360522e-01 + 4.828000000000e-10 3.287681921596e-02 + 4.928000000000e-10 -8.943999963453e-02 + 5.028000000000e-10 -1.862066308093e-01 + 5.128000000000e-10 -2.530527908612e-01 + 5.228000000000e-10 -2.943931136832e-01 + 5.328000000000e-10 -3.180152021024e-01 + 5.428000000000e-10 -3.295545667130e-01 + 5.528000000000e-10 -3.173812952412e-01 + 5.628000000000e-10 -2.617027726155e-01 + 5.728000000000e-10 -1.596411992093e-01 + 5.828000000000e-10 -3.295895028258e-02 + 5.928000000000e-10 8.942267434718e-02 + 6.028000000000e-10 1.861105403656e-01 + 6.128000000000e-10 2.530344325895e-01 + 6.228000000000e-10 2.943051008579e-01 + 6.328000000000e-10 3.180051485103e-01 + 6.428000000000e-10 3.294737915539e-01 + 6.528000000000e-10 3.173744791022e-01 + 6.628000000000e-10 2.616291881364e-01 + 6.728000000000e-10 1.596450333001e-01 + 6.828000000000e-10 3.290088244348e-02 + 6.928000000000e-10 -8.940659470005e-02 + 7.028000000000e-10 -1.861562133447e-01 + 7.128000000000e-10 -2.530116656482e-01 + 7.228000000000e-10 -2.943454309811e-01 + 7.328000000000e-10 -3.179780561670e-01 + 7.428000000000e-10 -3.295087969733e-01 + 7.528000000000e-10 -3.173438661274e-01 + 7.628000000000e-10 -2.616591955397e-01 + 7.728000000000e-10 -1.596115565426e-01 + 7.828000000000e-10 -3.292790237402e-02 + 7.928000000000e-10 8.943927261705e-02 + 8.028000000000e-10 1.861310420114e-01 + 8.128000000000e-10 2.530433655174e-01 + 8.228000000000e-10 2.943195630770e-01 + 8.328000000000e-10 3.180088285378e-01 + 8.428000000000e-10 3.294832118435e-01 + 8.528000000000e-10 3.173732295072e-01 + 8.628000000000e-10 2.616337486722e-01 + 8.728000000000e-10 1.596399004289e-01 + 8.828000000000e-10 3.290244884503e-02 + 8.928000000000e-10 -8.941301350766e-02 + 9.028000000000e-10 -1.861557185261e-01 + 9.128000000000e-10 -2.530180139920e-01 + 9.228000000000e-10 -2.943444772306e-01 + 9.328000000000e-10 -3.179838696148e-01 + 9.428000000000e-10 -3.295076633013e-01 + 9.528000000000e-10 -3.173492560727e-01 + 9.628000000000e-10 -2.616577755083e-01 + 9.728000000000e-10 -1.596163947717e-01 + 9.828000000000e-10 -3.292583900074e-02 + 9.928000000000e-10 8.943518431692e-02 + 1.000000000000e-09 1.621529465729e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/conditions.yaml new file mode 100644 index 00000000..894a7d5c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 8 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_08 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/CML_core_tb.sch new file mode 100644 index 00000000..f4080d0b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/CML_core_tb_9.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/CML_core_tb_9.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/CML_core_tb_9.data new file mode 100644 index 00000000..6b24d1d6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/CML_core_tb_9.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.622644182692e-01 + 1.728000000000e-10 -1.962653738736e-01 + 1.828000000000e-10 -5.712895575235e-03 + 1.928000000000e-10 1.510345047594e-01 + 2.028000000000e-10 2.432775412534e-01 + 2.128000000000e-10 2.772000132926e-01 + 2.228000000000e-10 3.161630086256e-01 + 2.328000000000e-10 3.654121904616e-01 + 2.428000000000e-10 4.070200809677e-01 + 2.528000000000e-10 4.211809118313e-01 + 2.628000000000e-10 3.552666659990e-01 + 2.728000000000e-10 1.954111420719e-01 + 2.828000000000e-10 7.499275151763e-03 + 2.928000000000e-10 -1.488912332472e-01 + 3.028000000000e-10 -2.420325529570e-01 + 3.128000000000e-10 -2.768171400503e-01 + 3.228000000000e-10 -3.164103191401e-01 + 3.328000000000e-10 -3.656815561297e-01 + 3.428000000000e-10 -4.072561733660e-01 + 3.528000000000e-10 -4.210637971044e-01 + 3.628000000000e-10 -3.548415521036e-01 + 3.728000000000e-10 -1.946286859654e-01 + 3.828000000000e-10 -6.746438981043e-03 + 3.928000000000e-10 1.496127957227e-01 + 4.028000000000e-10 2.425057762271e-01 + 4.128000000000e-10 2.772590268750e-01 + 4.228000000000e-10 3.167075169816e-01 + 4.328000000000e-10 3.660182242119e-01 + 4.428000000000e-10 4.074726111052e-01 + 4.528000000000e-10 4.212975956202e-01 + 4.628000000000e-10 3.549573822535e-01 + 4.728000000000e-10 1.947835560361e-01 + 4.828000000000e-10 6.801482567115e-03 + 4.928000000000e-10 -1.495086456760e-01 + 5.028000000000e-10 -2.424863730465e-01 + 5.128000000000e-10 -2.771744431737e-01 + 5.228000000000e-10 -3.166940000076e-01 + 5.328000000000e-10 -3.659398771497e-01 + 5.428000000000e-10 -4.074689465730e-01 + 5.528000000000e-10 -4.212394549000e-01 + 5.628000000000e-10 -3.549741510035e-01 + 5.728000000000e-10 -1.947436351784e-01 + 5.828000000000e-10 -6.830080160870e-03 + 5.928000000000e-10 1.495407150967e-01 + 6.028000000000e-10 2.424570295697e-01 + 6.128000000000e-10 2.772066160972e-01 + 6.228000000000e-10 3.166654934082e-01 + 6.328000000000e-10 3.659723864247e-01 + 6.428000000000e-10 4.074416211051e-01 + 6.528000000000e-10 4.212697301261e-01 + 6.628000000000e-10 3.549467093259e-01 + 6.728000000000e-10 1.947718238583e-01 + 6.828000000000e-10 6.800951177238e-03 + 6.928000000000e-10 -1.495148390529e-01 + 7.028000000000e-10 -2.424852043575e-01 + 7.128000000000e-10 -2.771809105751e-01 + 7.228000000000e-10 -3.166930947909e-01 + 7.328000000000e-10 -3.659459016360e-01 + 7.428000000000e-10 -4.074677461547e-01 + 7.528000000000e-10 -4.212442717757e-01 + 7.628000000000e-10 -3.549717520551e-01 + 7.728000000000e-10 -1.947463263521e-01 + 7.828000000000e-10 -6.825916545420e-03 + 7.928000000000e-10 1.495385751436e-01 + 8.028000000000e-10 2.424609931904e-01 + 8.128000000000e-10 2.772040406871e-01 + 8.228000000000e-10 3.166687905139e-01 + 8.328000000000e-10 3.659694951712e-01 + 8.428000000000e-10 4.074447010218e-01 + 8.528000000000e-10 4.212671408417e-01 + 8.628000000000e-10 3.549498827484e-01 + 8.728000000000e-10 1.947689363825e-01 + 8.828000000000e-10 6.803756635994e-03 + 8.928000000000e-10 -1.495176738691e-01 + 9.028000000000e-10 -2.424825342063e-01 + 9.128000000000e-10 -2.771836734306e-01 + 9.228000000000e-10 -3.166902103892e-01 + 9.328000000000e-10 -3.659485359213e-01 + 9.428000000000e-10 -4.074650210911e-01 + 9.528000000000e-10 -4.212469657833e-01 + 9.628000000000e-10 -3.549694058275e-01 + 9.728000000000e-10 -1.947487958951e-01 + 9.828000000000e-10 -6.823236278537e-03 + 9.928000000000e-10 1.495363177485e-01 + 1.000000000000e-09 2.250264100511e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/conditions.yaml new file mode 100644 index 00000000..d6f97f74 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 9 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_09 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/CML_core_tb.sch new file mode 100644 index 00000000..520e88c8 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/CML_core_tb_10.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/CML_core_tb_10.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/CML_core_tb_10.data new file mode 100644 index 00000000..f64d27bb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/CML_core_tb_10.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.621881537650e-01 + 1.728000000000e-10 -1.984429143572e-01 + 1.828000000000e-10 -1.024381876325e-02 + 1.928000000000e-10 1.456486678579e-01 + 2.028000000000e-10 2.379497773075e-01 + 2.128000000000e-10 2.714724605336e-01 + 2.228000000000e-10 3.108042897090e-01 + 2.328000000000e-10 3.600441003378e-01 + 2.428000000000e-10 4.020596908788e-01 + 2.528000000000e-10 4.176332246346e-01 + 2.628000000000e-10 3.534480183483e-01 + 2.728000000000e-10 1.957884716864e-01 + 2.828000000000e-10 1.048070619246e-02 + 2.928000000000e-10 -1.446967472000e-01 + 3.028000000000e-10 -2.375576326508e-01 + 3.128000000000e-10 -2.717915022579e-01 + 3.228000000000e-10 -3.116603869888e-01 + 3.328000000000e-10 -3.608573425706e-01 + 3.428000000000e-10 -4.027490548925e-01 + 3.528000000000e-10 -4.178578104758e-01 + 3.628000000000e-10 -3.532507313188e-01 + 3.728000000000e-10 -1.951536666098e-01 + 3.828000000000e-10 -9.813336101525e-03 + 3.928000000000e-10 1.453604720604e-01 + 4.028000000000e-10 2.379857130154e-01 + 4.128000000000e-10 2.721818635676e-01 + 4.228000000000e-10 3.119088225778e-01 + 4.328000000000e-10 3.611475798924e-01 + 4.428000000000e-10 4.029304727738e-01 + 4.528000000000e-10 4.180700216423e-01 + 4.628000000000e-10 3.533627988360e-01 + 4.728000000000e-10 1.953149158213e-01 + 4.828000000000e-10 9.881134950277e-03 + 4.928000000000e-10 -1.452466419838e-01 + 5.028000000000e-10 -2.379576224969e-01 + 5.128000000000e-10 -2.720935242692e-01 + 5.228000000000e-10 -3.118909714313e-01 + 5.328000000000e-10 -3.610674239906e-01 + 5.428000000000e-10 -4.029229661263e-01 + 5.528000000000e-10 -4.180098057029e-01 + 5.628000000000e-10 -3.533753449283e-01 + 5.728000000000e-10 -1.952727841385e-01 + 5.828000000000e-10 -9.906008920915e-03 + 5.928000000000e-10 1.452800172029e-01 + 6.028000000000e-10 2.379306740359e-01 + 6.128000000000e-10 2.721261300904e-01 + 6.228000000000e-10 3.118646486801e-01 + 6.328000000000e-10 3.611003417151e-01 + 6.428000000000e-10 4.028972890619e-01 + 6.528000000000e-10 4.180401129989e-01 + 6.628000000000e-10 3.533488930459e-01 + 6.728000000000e-10 1.953007885397e-01 + 6.828000000000e-10 9.878072761317e-03 + 6.928000000000e-10 -1.452545395230e-01 + 7.028000000000e-10 -2.379578117562e-01 + 7.128000000000e-10 -2.721008877684e-01 + 7.228000000000e-10 -3.118914026492e-01 + 7.328000000000e-10 -3.610744602697e-01 + 7.428000000000e-10 -4.029226014194e-01 + 7.528000000000e-10 -4.180151483436e-01 + 7.628000000000e-10 -3.533732531474e-01 + 7.728000000000e-10 -1.952759500525e-01 + 7.828000000000e-10 -9.902411226855e-03 + 7.928000000000e-10 1.452776462046e-01 + 8.028000000000e-10 2.379341379884e-01 + 8.128000000000e-10 2.721234101956e-01 + 8.228000000000e-10 3.118677116052e-01 + 8.328000000000e-10 3.610975209728e-01 + 8.428000000000e-10 4.029000595077e-01 + 8.528000000000e-10 4.180375331400e-01 + 8.628000000000e-10 3.533517750284e-01 + 8.728000000000e-10 1.952981248182e-01 + 8.828000000000e-10 9.880873061622e-03 + 8.928000000000e-10 -1.452571579233e-01 + 9.028000000000e-10 -2.379551078725e-01 + 9.128000000000e-10 -2.721034614056e-01 + 9.228000000000e-10 -3.118886463518e-01 + 9.328000000000e-10 -3.610770519544e-01 + 9.428000000000e-10 -4.029199107687e-01 + 9.528000000000e-10 -4.180177452829e-01 + 9.628000000000e-10 -3.533708821878e-01 + 9.728000000000e-10 -1.952784134813e-01 + 9.828000000000e-10 -9.899898542678e-03 + 9.928000000000e-10 1.452754037376e-01 + 1.000000000000e-09 2.207322871295e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/conditions.yaml new file mode 100644 index 00000000..c386d0fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 10 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_10 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/CML_core_tb.sch new file mode 100644 index 00000000..43cda8c8 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/CML_core_tb_11.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/CML_core_tb_11.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/CML_core_tb_11.data new file mode 100644 index 00000000..1453012b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/CML_core_tb_11.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.668500025046e-01 + 1.728000000000e-10 -1.978704758130e-01 + 1.828000000000e-10 -3.069550951996e-03 + 1.928000000000e-10 1.561389387989e-01 + 2.028000000000e-10 2.488697408913e-01 + 2.128000000000e-10 2.833379270136e-01 + 2.228000000000e-10 3.221467647695e-01 + 2.328000000000e-10 3.723176028273e-01 + 2.428000000000e-10 4.147931582649e-01 + 2.528000000000e-10 4.286646301121e-01 + 2.628000000000e-10 3.614677855799e-01 + 2.728000000000e-10 1.982726052647e-01 + 2.828000000000e-10 5.580533140739e-03 + 2.928000000000e-10 -1.536551403474e-01 + 3.028000000000e-10 -2.474729097395e-01 + 3.128000000000e-10 -2.827981749211e-01 + 3.228000000000e-10 -3.222400643179e-01 + 3.328000000000e-10 -3.724510578191e-01 + 3.428000000000e-10 -4.149487937489e-01 + 3.528000000000e-10 -4.285094572794e-01 + 3.628000000000e-10 -3.610716711123e-01 + 3.728000000000e-10 -1.975613483211e-01 + 3.828000000000e-10 -4.936396792217e-03 + 3.928000000000e-10 1.542720670721e-01 + 4.028000000000e-10 2.478554934965e-01 + 4.128000000000e-10 2.831768205427e-01 + 4.228000000000e-10 3.224764565266e-01 + 4.328000000000e-10 3.727376628527e-01 + 4.428000000000e-10 4.151128450004e-01 + 4.528000000000e-10 4.287030398326e-01 + 4.628000000000e-10 3.611465460996e-01 + 4.728000000000e-10 1.976871290976e-01 + 4.828000000000e-10 4.962067120498e-03 + 4.928000000000e-10 -1.541857483448e-01 + 5.028000000000e-10 -2.478549856990e-01 + 5.128000000000e-10 -2.831031432303e-01 + 5.228000000000e-10 -3.224786212940e-01 + 5.328000000000e-10 -3.726675199031e-01 + 5.428000000000e-10 -4.151222726988e-01 + 5.528000000000e-10 -4.286496175832e-01 + 5.628000000000e-10 -3.611719348809e-01 + 5.728000000000e-10 -1.976471175954e-01 + 5.828000000000e-10 -4.995016715658e-03 + 5.928000000000e-10 1.542195273485e-01 + 6.028000000000e-10 2.478226151197e-01 + 6.128000000000e-10 2.831371441394e-01 + 6.228000000000e-10 3.224465270882e-01 + 6.328000000000e-10 3.727020829784e-01 + 6.428000000000e-10 4.150919188021e-01 + 6.528000000000e-10 4.286821395136e-01 + 6.628000000000e-10 3.611419365066e-01 + 6.728000000000e-10 1.976777927703e-01 + 6.828000000000e-10 4.963507878799e-03 + 6.928000000000e-10 -1.541913949207e-01 + 7.028000000000e-10 -2.478529800499e-01 + 7.128000000000e-10 -2.831092109235e-01 + 7.228000000000e-10 -3.224762894768e-01 + 7.328000000000e-10 -3.726728668334e-01 + 7.428000000000e-10 -4.151201370880e-01 + 7.528000000000e-10 -4.286543531433e-01 + 7.628000000000e-10 -3.611692599178e-01 + 7.728000000000e-10 -1.976499135935e-01 + 7.828000000000e-10 -4.990471824028e-03 + 7.928000000000e-10 1.542171227717e-01 + 8.028000000000e-10 2.478269854332e-01 + 8.128000000000e-10 2.831343470853e-01 + 8.228000000000e-10 3.224500362551e-01 + 8.328000000000e-10 3.726987138014e-01 + 8.428000000000e-10 4.150953468135e-01 + 8.528000000000e-10 4.286792233560e-01 + 8.628000000000e-10 3.611455588852e-01 + 8.728000000000e-10 1.976743961081e-01 + 8.828000000000e-10 4.966432661841e-03 + 8.928000000000e-10 -1.541946484524e-01 + 9.028000000000e-10 -2.478502288236e-01 + 9.128000000000e-10 -2.831123474050e-01 + 9.228000000000e-10 -3.224731331421e-01 + 9.328000000000e-10 -3.726757720747e-01 + 9.428000000000e-10 -4.151172388981e-01 + 9.528000000000e-10 -4.286573581279e-01 + 9.628000000000e-10 -3.611667698498e-01 + 9.728000000000e-10 -1.976525646923e-01 + 9.828000000000e-10 -4.987471597641e-03 + 9.928000000000e-10 1.542147143463e-01 + 1.000000000000e-09 2.301006397866e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/conditions.yaml new file mode 100644 index 00000000..fdf0598a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 11 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_11 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/CML_core_tb.sch new file mode 100644 index 00000000..6024b729 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/CML_core_tb_12.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/CML_core_tb_12.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/CML_core_tb_12.data new file mode 100644 index 00000000..3b0782c6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/CML_core_tb_12.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.388323931118e-01 + 1.728000000000e-10 -1.851651732117e-01 + 1.828000000000e-10 -4.985209728467e-03 + 1.928000000000e-10 1.464303664236e-01 + 2.028000000000e-10 2.390890865534e-01 + 2.128000000000e-10 2.778147857521e-01 + 2.228000000000e-10 3.140298283994e-01 + 2.328000000000e-10 3.564486269316e-01 + 2.428000000000e-10 3.920777300126e-01 + 2.528000000000e-10 4.026431485981e-01 + 2.628000000000e-10 3.407818057760e-01 + 2.728000000000e-10 1.919413521399e-01 + 2.828000000000e-10 1.380608162301e-02 + 2.928000000000e-10 -1.377275777470e-01 + 3.028000000000e-10 -2.320727525709e-01 + 3.128000000000e-10 -2.723718882130e-01 + 3.228000000000e-10 -3.097195919600e-01 + 3.328000000000e-10 -3.525356430610e-01 + 3.428000000000e-10 -3.885938438581e-01 + 3.528000000000e-10 -3.995683250409e-01 + 3.628000000000e-10 -3.382392747069e-01 + 3.728000000000e-10 -1.897685835172e-01 + 3.828000000000e-10 -1.211190537496e-02 + 3.928000000000e-10 1.391365825109e-01 + 4.028000000000e-10 2.331433172305e-01 + 4.128000000000e-10 2.733678679410e-01 + 4.228000000000e-10 3.105714733021e-01 + 4.328000000000e-10 3.533708758772e-01 + 4.428000000000e-10 3.892622592719e-01 + 4.528000000000e-10 4.001272859757e-01 + 4.628000000000e-10 3.385642563623e-01 + 4.728000000000e-10 1.899916781684e-01 + 4.828000000000e-10 1.218033620775e-02 + 4.928000000000e-10 -1.390656421002e-01 + 5.028000000000e-10 -2.331398693887e-01 + 5.128000000000e-10 -2.733037181082e-01 + 5.228000000000e-10 -3.105518491305e-01 + 5.328000000000e-10 -3.533032068815e-01 + 5.428000000000e-10 -3.892531494066e-01 + 5.528000000000e-10 -4.000849100741e-01 + 5.628000000000e-10 -3.385845178207e-01 + 5.728000000000e-10 -1.899774211598e-01 + 5.828000000000e-10 -1.221996984529e-02 + 5.928000000000e-10 1.390720456320e-01 + 6.028000000000e-10 2.331027694491e-01 + 6.128000000000e-10 2.733156842718e-01 + 6.228000000000e-10 3.105197170718e-01 + 6.328000000000e-10 3.533171034352e-01 + 6.428000000000e-10 3.892243222051e-01 + 6.528000000000e-10 4.000997182403e-01 + 6.628000000000e-10 3.385594083538e-01 + 6.728000000000e-10 1.899934277570e-01 + 6.828000000000e-10 1.219466050150e-02 + 6.928000000000e-10 -1.390553921853e-01 + 7.028000000000e-10 -2.331263672195e-01 + 7.128000000000e-10 -2.732987102222e-01 + 7.228000000000e-10 -3.105421090081e-01 + 7.328000000000e-10 -3.532994962925e-01 + 7.428000000000e-10 -3.892451651423e-01 + 7.528000000000e-10 -4.000824543639e-01 + 7.628000000000e-10 -3.385783830881e-01 + 7.728000000000e-10 -1.899748483052e-01 + 7.828000000000e-10 -1.221334688082e-02 + 7.928000000000e-10 1.390733351530e-01 + 8.028000000000e-10 2.331082732353e-01 + 8.128000000000e-10 2.733160005972e-01 + 8.228000000000e-10 3.105237742784e-01 + 8.328000000000e-10 3.533165556732e-01 + 8.428000000000e-10 3.892279285214e-01 + 8.528000000000e-10 4.000991009611e-01 + 8.628000000000e-10 3.385625511294e-01 + 8.728000000000e-10 1.899914169425e-01 + 8.828000000000e-10 1.219669858142e-02 + 8.928000000000e-10 -1.390576717936e-01 + 9.028000000000e-10 -2.331245304799e-01 + 9.128000000000e-10 -2.733009677599e-01 + 9.228000000000e-10 -3.105397739050e-01 + 9.328000000000e-10 -3.533012749995e-01 + 9.428000000000e-10 -3.892430673555e-01 + 9.528000000000e-10 -4.000844420176e-01 + 9.628000000000e-10 -3.385768441038e-01 + 9.728000000000e-10 -1.899764612955e-01 + 9.828000000000e-10 -1.221122328152e-02 + 9.928000000000e-10 1.390717643268e-01 + 1.000000000000e-09 2.142511381663e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/conditions.yaml new file mode 100644 index 00000000..191d932a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 12 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_12 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/CML_core_tb.sch new file mode 100644 index 00000000..fb3f44f9 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/CML_core_tb_13.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/CML_core_tb_13.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/CML_core_tb_13.data new file mode 100644 index 00000000..36de6040 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/CML_core_tb_13.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.406999838743e-01 + 1.728000000000e-10 -1.879936990253e-01 + 1.828000000000e-10 -9.262901303246e-03 + 1.928000000000e-10 1.413611635485e-01 + 2.028000000000e-10 2.336775345801e-01 + 2.128000000000e-10 2.717294842894e-01 + 2.228000000000e-10 3.082620487639e-01 + 2.328000000000e-10 3.509422339502e-01 + 2.428000000000e-10 3.871053596645e-01 + 2.528000000000e-10 3.988940820744e-01 + 2.628000000000e-10 3.384312270542e-01 + 2.728000000000e-10 1.913281233779e-01 + 2.828000000000e-10 1.537343295661e-02 + 2.928000000000e-10 -1.347916275204e-01 + 3.028000000000e-10 -2.283419665374e-01 + 3.128000000000e-10 -2.677291408127e-01 + 3.228000000000e-10 -3.052231075401e-01 + 3.328000000000e-10 -3.481601477547e-01 + 3.428000000000e-10 -3.845854123080e-01 + 3.528000000000e-10 -3.965379624605e-01 + 3.628000000000e-10 -3.363314255870e-01 + 3.728000000000e-10 -1.893723794407e-01 + 3.828000000000e-10 -1.375643865463e-02 + 3.928000000000e-10 1.361849816757e-01 + 4.028000000000e-10 2.294005939140e-01 + 4.128000000000e-10 2.686949729273e-01 + 4.228000000000e-10 3.060328157788e-01 + 4.328000000000e-10 3.489590274886e-01 + 4.428000000000e-10 3.852266672724e-01 + 4.528000000000e-10 3.970921187630e-01 + 4.628000000000e-10 3.366736237881e-01 + 4.728000000000e-10 1.896320772426e-01 + 4.828000000000e-10 1.386475371506e-02 + 4.928000000000e-10 -1.360753156283e-01 + 5.028000000000e-10 -2.293675908871e-01 + 5.128000000000e-10 -2.686062530832e-01 + 5.228000000000e-10 -3.059945800423e-01 + 5.328000000000e-10 -3.488729675224e-01 + 5.428000000000e-10 -3.852026785029e-01 + 5.528000000000e-10 -3.970350594993e-01 + 5.628000000000e-10 -3.366834486256e-01 + 5.728000000000e-10 -1.896077423819e-01 + 5.828000000000e-10 -1.389840122586e-02 + 5.928000000000e-10 1.360876217327e-01 + 6.028000000000e-10 2.293336021557e-01 + 6.128000000000e-10 2.686225622920e-01 + 6.228000000000e-10 3.059648098566e-01 + 6.328000000000e-10 3.488907093130e-01 + 6.428000000000e-10 3.851753633828e-01 + 6.528000000000e-10 3.970526526302e-01 + 6.628000000000e-10 3.366583891048e-01 + 6.728000000000e-10 1.896251667832e-01 + 6.828000000000e-10 1.387242911077e-02 + 6.928000000000e-10 -1.360702314024e-01 + 7.028000000000e-10 -2.293580006158e-01 + 7.128000000000e-10 -2.686047945045e-01 + 7.228000000000e-10 -3.059879182353e-01 + 7.328000000000e-10 -3.488722408399e-01 + 7.428000000000e-10 -3.851969589401e-01 + 7.528000000000e-10 -3.970345404264e-01 + 7.628000000000e-10 -3.366782708831e-01 + 7.728000000000e-10 -1.896058621860e-01 + 7.828000000000e-10 -1.389192450355e-02 + 7.928000000000e-10 1.360888260036e-01 + 8.028000000000e-10 2.293391038565e-01 + 8.128000000000e-10 2.686227634282e-01 + 8.228000000000e-10 3.059688096850e-01 + 8.328000000000e-10 3.488900661997e-01 + 8.428000000000e-10 3.851789257250e-01 + 8.528000000000e-10 3.970519764807e-01 + 8.628000000000e-10 3.366616134215e-01 + 8.728000000000e-10 1.896231972496e-01 + 8.828000000000e-10 1.387461571983e-02 + 8.928000000000e-10 -1.360724758723e-01 + 9.028000000000e-10 -2.293560182270e-01 + 9.128000000000e-10 -2.686070528237e-01 + 9.228000000000e-10 -3.059854790954e-01 + 9.328000000000e-10 -3.488740842624e-01 + 9.428000000000e-10 -3.851947329758e-01 + 9.528000000000e-10 -3.970365843841e-01 + 9.628000000000e-10 -3.366766115599e-01 + 9.728000000000e-10 -1.896075309897e-01 + 9.828000000000e-10 -1.388973786858e-02 + 9.928000000000e-10 1.360872156510e-01 + 1.000000000000e-09 2.108297225004e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/conditions.yaml new file mode 100644 index 00000000..1d848f4a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 13 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_13 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/CML_core_tb.sch new file mode 100644 index 00000000..5b3a2a18 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/CML_core_tb_14.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/CML_core_tb_14.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/CML_core_tb_14.data new file mode 100644 index 00000000..73c31d13 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/CML_core_tb_14.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.445927026449e-01 + 1.728000000000e-10 -1.889320969581e-01 + 1.828000000000e-10 -5.355234564888e-03 + 1.928000000000e-10 1.489911128277e-01 + 2.028000000000e-10 2.434822449071e-01 + 2.128000000000e-10 2.838702060450e-01 + 2.228000000000e-10 3.202156401988e-01 + 2.328000000000e-10 3.629401474789e-01 + 2.428000000000e-10 3.990998051164e-01 + 2.528000000000e-10 4.099063275401e-01 + 2.628000000000e-10 3.477923521709e-01 + 2.728000000000e-10 1.968519788675e-01 + 2.828000000000e-10 1.493750763318e-02 + 2.928000000000e-10 -1.398437743336e-01 + 3.028000000000e-10 -2.362338093992e-01 + 3.128000000000e-10 -2.782887085314e-01 + 3.228000000000e-10 -3.158910292643e-01 + 3.328000000000e-10 -3.590893499920e-01 + 3.428000000000e-10 -3.957248346768e-01 + 3.528000000000e-10 -4.069627998073e-01 + 3.628000000000e-10 -3.454070734708e-01 + 3.728000000000e-10 -1.948243362004e-01 + 3.828000000000e-10 -1.337926088934e-02 + 3.928000000000e-10 1.411472162204e-01 + 4.028000000000e-10 2.372231231196e-01 + 4.128000000000e-10 2.792284454069e-01 + 4.228000000000e-10 3.166817589057e-01 + 4.328000000000e-10 3.598702175634e-01 + 4.428000000000e-10 3.963375250752e-01 + 4.528000000000e-10 4.074753309124e-01 + 4.628000000000e-10 3.456854225481e-01 + 4.728000000000e-10 1.950177434222e-01 + 4.828000000000e-10 1.342430394201e-02 + 4.928000000000e-10 -1.410850608466e-01 + 5.028000000000e-10 -2.372286880899e-01 + 5.128000000000e-10 -2.791659662153e-01 + 5.228000000000e-10 -3.166689293508e-01 + 5.328000000000e-10 -3.598026374101e-01 + 5.428000000000e-10 -3.963331138013e-01 + 5.528000000000e-10 -4.074316676804e-01 + 5.628000000000e-10 -3.457088001737e-01 + 5.728000000000e-10 -1.950000158899e-01 + 5.828000000000e-10 -1.346504722293e-02 + 5.928000000000e-10 1.410957635246e-01 + 6.028000000000e-10 2.371909425038e-01 + 6.128000000000e-10 2.791817404178e-01 + 6.228000000000e-10 3.166356138828e-01 + 6.328000000000e-10 3.598203377806e-01 + 6.428000000000e-10 3.963033609435e-01 + 6.528000000000e-10 4.074499160221e-01 + 6.628000000000e-10 3.456826167292e-01 + 6.728000000000e-10 1.950190841630e-01 + 6.828000000000e-10 1.343803454206e-02 + 6.928000000000e-10 -1.410764950259e-01 + 7.028000000000e-10 -2.372163265848e-01 + 7.128000000000e-10 -2.791624229651e-01 + 7.228000000000e-10 -3.166599225368e-01 + 7.328000000000e-10 -3.598002455584e-01 + 7.428000000000e-10 -3.963259615583e-01 + 7.528000000000e-10 -4.074304662079e-01 + 7.628000000000e-10 -3.457033629648e-01 + 7.728000000000e-10 -1.949983704767e-01 + 7.828000000000e-10 -1.345872104163e-02 + 7.928000000000e-10 1.410962716693e-01 + 8.028000000000e-10 2.371963808526e-01 + 8.128000000000e-10 2.791814500218e-01 + 8.228000000000e-10 3.166396456569e-01 + 8.328000000000e-10 3.598191409746e-01 + 8.428000000000e-10 3.963069790813e-01 + 8.528000000000e-10 4.074488078929e-01 + 8.628000000000e-10 3.456858987705e-01 + 8.728000000000e-10 1.950166421641e-01 + 8.828000000000e-10 1.344025602045e-02 + 8.928000000000e-10 -1.410790665154e-01 + 9.028000000000e-10 -2.372142995262e-01 + 9.128000000000e-10 -2.791649325552e-01 + 9.228000000000e-10 -3.166573514474e-01 + 9.328000000000e-10 -3.598022359716e-01 + 9.428000000000e-10 -3.963236588924e-01 + 9.528000000000e-10 -4.074326778223e-01 + 9.628000000000e-10 -3.457016440453e-01 + 9.728000000000e-10 -1.950001702792e-01 + 9.828000000000e-10 -1.345633761364e-02 + 9.928000000000e-10 1.410945129066e-01 + 1.000000000000e-09 2.176807579100e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/conditions.yaml new file mode 100644 index 00000000..d86ee2b6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 14 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_14 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/CML_core_tb.sch new file mode 100644 index 00000000..7ad944e0 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/CML_core_tb_15.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/CML_core_tb_15.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/CML_core_tb_15.data new file mode 100644 index 00000000..6f87c434 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/CML_core_tb_15.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.831577979118e-01 + 1.728000000000e-10 -1.548331321524e-01 + 1.828000000000e-10 2.954507991941e-03 + 1.928000000000e-10 1.412083661187e-01 + 2.028000000000e-10 2.303947789211e-01 + 2.128000000000e-10 2.725788032239e-01 + 2.228000000000e-10 3.064646814943e-01 + 2.328000000000e-10 3.412898568956e-01 + 2.428000000000e-10 3.692979025942e-01 + 2.528000000000e-10 3.751979264520e-01 + 2.628000000000e-10 3.186495551608e-01 + 2.728000000000e-10 1.849115684226e-01 + 2.828000000000e-10 2.146912258403e-02 + 2.928000000000e-10 -1.215319416200e-01 + 3.028000000000e-10 -2.147336364713e-01 + 3.128000000000e-10 -2.593628319189e-01 + 3.228000000000e-10 -2.947919001104e-01 + 3.328000000000e-10 -3.306034656465e-01 + 3.428000000000e-10 -3.598903423599e-01 + 3.528000000000e-10 -3.674806029527e-01 + 3.628000000000e-10 -3.131864519443e-01 + 3.728000000000e-10 -1.816607205648e-01 + 3.828000000000e-10 -2.002885045896e-02 + 3.928000000000e-10 1.219326732879e-01 + 4.028000000000e-10 2.146583452252e-01 + 4.128000000000e-10 2.593288859790e-01 + 4.228000000000e-10 2.947836961551e-01 + 4.328000000000e-10 3.305873089453e-01 + 4.428000000000e-10 3.597520160348e-01 + 4.528000000000e-10 3.672634041173e-01 + 4.628000000000e-10 3.128292575731e-01 + 4.728000000000e-10 1.812525079401e-01 + 4.828000000000e-10 1.956255085056e-02 + 4.928000000000e-10 -1.223539241893e-01 + 5.028000000000e-10 -2.150587893921e-01 + 5.128000000000e-10 -2.596440912838e-01 + 5.228000000000e-10 -2.950896959018e-01 + 5.328000000000e-10 -3.308452440946e-01 + 5.428000000000e-10 -3.600168265621e-01 + 5.528000000000e-10 -3.674687038170e-01 + 5.628000000000e-10 -3.130140501398e-01 + 5.728000000000e-10 -1.813584327872e-01 + 5.828000000000e-10 -1.965159115909e-02 + 5.928000000000e-10 1.223212864923e-01 + 6.028000000000e-10 2.150157103205e-01 + 6.128000000000e-10 2.596318060931e-01 + 6.228000000000e-10 2.950524078153e-01 + 6.328000000000e-10 3.308363963911e-01 + 6.428000000000e-10 3.599874022300e-01 + 6.528000000000e-10 3.674690181116e-01 + 6.628000000000e-10 3.129980588961e-01 + 6.728000000000e-10 1.813712653368e-01 + 6.828000000000e-10 1.964491680526e-02 + 6.928000000000e-10 -1.223023112353e-01 + 7.028000000000e-10 -2.150202483004e-01 + 7.128000000000e-10 -2.596144309164e-01 + 7.228000000000e-10 -2.950582886643e-01 + 7.328000000000e-10 -3.308199600200e-01 + 7.428000000000e-10 -3.599931640339e-01 + 7.528000000000e-10 -3.674538095645e-01 + 7.628000000000e-10 -3.130042913922e-01 + 7.728000000000e-10 -1.813570925598e-01 + 7.828000000000e-10 -1.965290666609e-02 + 7.928000000000e-10 1.223145971689e-01 + 8.028000000000e-10 2.150114430495e-01 + 8.128000000000e-10 2.596256780136e-01 + 8.228000000000e-10 2.950490452158e-01 + 8.328000000000e-10 3.308307530718e-01 + 8.428000000000e-10 3.599842799802e-01 + 8.528000000000e-10 3.674639698479e-01 + 8.628000000000e-10 3.129957925611e-01 + 8.728000000000e-10 1.813666711568e-01 + 8.828000000000e-10 1.964348030724e-02 + 8.928000000000e-10 -1.223056361887e-01 + 9.028000000000e-10 -2.150207890100e-01 + 9.128000000000e-10 -2.596171721225e-01 + 9.228000000000e-10 -2.950581404305e-01 + 9.328000000000e-10 -3.308221104591e-01 + 9.428000000000e-10 -3.599929167296e-01 + 9.528000000000e-10 -3.674557320782e-01 + 9.628000000000e-10 -3.130039671541e-01 + 9.728000000000e-10 -1.813582011282e-01 + 9.828000000000e-10 -1.965175786777e-02 + 9.928000000000e-10 1.223137237372e-01 + 1.000000000000e-09 1.953703252853e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/conditions.yaml new file mode 100644 index 00000000..b5e73849 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 15 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_15 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/CML_core_tb.sch new file mode 100644 index 00000000..bc0e2451 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/CML_core_tb_16.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/CML_core_tb_16.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/CML_core_tb_16.data new file mode 100644 index 00000000..c0c44c66 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/CML_core_tb_16.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.908214410229e-01 + 1.728000000000e-10 -1.609006026552e-01 + 1.828000000000e-10 -2.321243117629e-03 + 1.928000000000e-10 1.363185315112e-01 + 2.028000000000e-10 2.253864999197e-01 + 2.128000000000e-10 2.667546328680e-01 + 2.228000000000e-10 3.007016001191e-01 + 2.328000000000e-10 3.359037685855e-01 + 2.428000000000e-10 3.646369081917e-01 + 2.528000000000e-10 3.717564842409e-01 + 2.628000000000e-10 3.164681086559e-01 + 2.728000000000e-10 1.842122200319e-01 + 2.828000000000e-10 2.261788955655e-02 + 2.928000000000e-10 -1.190364341005e-01 + 3.028000000000e-10 -2.112326750882e-01 + 3.128000000000e-10 -2.547832728498e-01 + 3.228000000000e-10 -2.901354995194e-01 + 3.328000000000e-10 -3.261256516764e-01 + 3.428000000000e-10 -3.558916364396e-01 + 3.528000000000e-10 -3.643768878587e-01 + 3.628000000000e-10 -3.109660871267e-01 + 3.728000000000e-10 -1.806005122430e-01 + 3.828000000000e-10 -2.063463882859e-02 + 3.928000000000e-10 1.200417121301e-01 + 4.028000000000e-10 2.117115066678e-01 + 4.128000000000e-10 2.552245954862e-01 + 4.228000000000e-10 2.905358174314e-01 + 4.328000000000e-10 3.264964127076e-01 + 4.428000000000e-10 3.561164409890e-01 + 4.528000000000e-10 3.644937527082e-01 + 4.628000000000e-10 3.108863598347e-01 + 4.728000000000e-10 1.804066968471e-01 + 4.828000000000e-10 2.031749353463e-02 + 4.928000000000e-10 -1.203543467152e-01 + 5.028000000000e-10 -2.120338656010e-01 + 5.128000000000e-10 -2.554694201182e-01 + 5.228000000000e-10 -2.907816217466e-01 + 5.328000000000e-10 -3.266973931907e-01 + 5.428000000000e-10 -3.563354715244e-01 + 5.528000000000e-10 -3.646612654323e-01 + 5.628000000000e-10 -3.110514282819e-01 + 5.728000000000e-10 -1.805042989376e-01 + 5.828000000000e-10 -2.041198102925e-02 + 5.928000000000e-10 1.203139122453e-01 + 6.028000000000e-10 2.119789678115e-01 + 6.128000000000e-10 2.554499136191e-01 + 6.228000000000e-10 2.907352766216e-01 + 6.328000000000e-10 3.266827936599e-01 + 6.428000000000e-10 3.562972261563e-01 + 6.528000000000e-10 3.646559193667e-01 + 6.628000000000e-10 3.110272539685e-01 + 6.728000000000e-10 1.805126920434e-01 + 6.828000000000e-10 2.039901072518e-02 + 6.928000000000e-10 -1.202975671206e-01 + 7.028000000000e-10 -2.119881389434e-01 + 7.128000000000e-10 -2.554339974826e-01 + 7.228000000000e-10 -2.907449786827e-01 + 7.328000000000e-10 -3.266672756474e-01 + 7.428000000000e-10 -3.563063206496e-01 + 7.528000000000e-10 -3.646410588059e-01 + 7.628000000000e-10 -3.110359790738e-01 + 7.728000000000e-10 -1.804978632753e-01 + 7.828000000000e-10 -2.040852410596e-02 + 7.928000000000e-10 1.203110667878e-01 + 8.028000000000e-10 2.119781439274e-01 + 8.128000000000e-10 2.554465105638e-01 + 8.228000000000e-10 2.907345088651e-01 + 8.328000000000e-10 3.266793442083e-01 + 8.428000000000e-10 3.562962712815e-01 + 8.528000000000e-10 3.646525269207e-01 + 8.628000000000e-10 3.110264147595e-01 + 8.728000000000e-10 1.805087495738e-01 + 8.828000000000e-10 2.039807927138e-02 + 8.928000000000e-10 -1.203008828088e-01 + 9.028000000000e-10 -2.119885143169e-01 + 9.128000000000e-10 -2.554368509477e-01 + 9.228000000000e-10 -2.907446372900e-01 + 9.328000000000e-10 -3.266695427412e-01 + 9.428000000000e-10 -3.563059183968e-01 + 9.528000000000e-10 -3.646431522847e-01 + 9.628000000000e-10 -3.110356032735e-01 + 9.728000000000e-10 -1.804991631480e-01 + 9.828000000000e-10 -2.040735001275e-02 + 9.928000000000e-10 1.203099974113e-01 + 1.000000000000e-09 1.927324868168e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/conditions.yaml new file mode 100644 index 00000000..35779b70 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 16 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_16 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/CML_core_tb.sch new file mode 100644 index 00000000..f53966aa --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/CML_core_tb_17.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/CML_core_tb_17.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/CML_core_tb_17.data new file mode 100644 index 00000000..1e62d263 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/CML_core_tb_17.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.857852225245e-01 + 1.728000000000e-10 -1.572533595452e-01 + 1.828000000000e-10 2.540381659783e-03 + 1.928000000000e-10 1.434374080790e-01 + 2.028000000000e-10 2.351272809546e-01 + 2.128000000000e-10 2.797956268783e-01 + 2.228000000000e-10 3.144243918962e-01 + 2.328000000000e-10 3.493618787392e-01 + 2.428000000000e-10 3.773715695689e-01 + 2.528000000000e-10 3.831823569325e-01 + 2.628000000000e-10 3.264482498061e-01 + 2.728000000000e-10 1.910530045686e-01 + 2.828000000000e-10 2.436059711742e-02 + 2.928000000000e-10 -1.220220612332e-01 + 3.028000000000e-10 -2.180809390746e-01 + 3.128000000000e-10 -2.653775774444e-01 + 3.228000000000e-10 -3.017848824321e-01 + 3.328000000000e-10 -3.379021858146e-01 + 3.428000000000e-10 -3.673696540777e-01 + 3.528000000000e-10 -3.751149757425e-01 + 3.628000000000e-10 -3.209083740174e-01 + 3.728000000000e-10 -1.878979131572e-01 + 3.828000000000e-10 -2.307531260616e-02 + 3.928000000000e-10 1.222703025101e-01 + 4.028000000000e-10 2.179003509445e-01 + 4.128000000000e-10 2.652908784701e-01 + 4.228000000000e-10 3.017672646237e-01 + 4.328000000000e-10 3.378931599738e-01 + 4.428000000000e-10 3.672390198172e-01 + 4.528000000000e-10 3.748903812400e-01 + 4.628000000000e-10 3.205316331029e-01 + 4.728000000000e-10 1.874647700937e-01 + 4.828000000000e-10 2.258819957166e-02 + 4.928000000000e-10 -1.227112688171e-01 + 5.028000000000e-10 -2.183172764214e-01 + 5.128000000000e-10 -2.656203742551e-01 + 5.228000000000e-10 -3.020800906145e-01 + 5.328000000000e-10 -3.381553362553e-01 + 5.428000000000e-10 -3.675051891202e-01 + 5.528000000000e-10 -3.750972240389e-01 + 5.628000000000e-10 -3.207148935088e-01 + 5.728000000000e-10 -1.875700292984e-01 + 5.828000000000e-10 -2.267596999196e-02 + 5.928000000000e-10 1.226776663562e-01 + 6.028000000000e-10 2.182733434309e-01 + 6.128000000000e-10 2.656053081095e-01 + 6.228000000000e-10 3.020411985396e-01 + 6.328000000000e-10 3.381435634392e-01 + 6.428000000000e-10 3.674743818406e-01 + 6.528000000000e-10 3.750952532513e-01 + 6.628000000000e-10 3.206986438750e-01 + 6.728000000000e-10 1.875816736609e-01 + 6.828000000000e-10 2.266940437016e-02 + 6.928000000000e-10 -1.226596158426e-01 + 7.028000000000e-10 -2.182776851932e-01 + 7.128000000000e-10 -2.655888997029e-01 + 7.228000000000e-10 -3.020470638059e-01 + 7.328000000000e-10 -3.381282771084e-01 + 7.428000000000e-10 -3.674800981492e-01 + 7.528000000000e-10 -3.750811166601e-01 + 7.628000000000e-10 -3.207046174850e-01 + 7.728000000000e-10 -1.875682790354e-01 + 7.828000000000e-10 -2.267703281628e-02 + 7.928000000000e-10 1.226713327530e-01 + 8.028000000000e-10 2.182693863135e-01 + 8.128000000000e-10 2.655996099454e-01 + 8.228000000000e-10 3.020383466326e-01 + 8.328000000000e-10 3.381385294735e-01 + 8.428000000000e-10 3.674717742910e-01 + 8.528000000000e-10 3.750907045119e-01 + 8.628000000000e-10 3.206966644115e-01 + 8.728000000000e-10 1.875773616331e-01 + 8.828000000000e-10 2.266807684955e-02 + 8.928000000000e-10 -1.226628120211e-01 + 9.028000000000e-10 -2.182782381400e-01 + 9.128000000000e-10 -2.655915506047e-01 + 9.228000000000e-10 -3.020469590318e-01 + 9.328000000000e-10 -3.381303351991e-01 + 9.428000000000e-10 -3.674798958779e-01 + 9.528000000000e-10 -3.750829516380e-01 + 9.628000000000e-10 -3.207043265993e-01 + 9.728000000000e-10 -1.875693454762e-01 + 9.828000000000e-10 -2.267594148777e-02 + 9.928000000000e-10 1.226704651969e-01 + 1.000000000000e-09 1.977257563344e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/conditions.yaml new file mode 100644 index 00000000..b8e15375 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 17 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_17 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/CML_core_tb.sch new file mode 100644 index 00000000..c3d414d1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/CML_core_tb_18.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/CML_core_tb_18.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/CML_core_tb_18.data new file mode 100644 index 00000000..16422ca1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/CML_core_tb_18.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.213526702696e-01 + 1.728000000000e-10 -1.557909441213e-01 + 1.828000000000e-10 3.476956205809e-02 + 1.928000000000e-10 1.811250151598e-01 + 2.028000000000e-10 2.596166993269e-01 + 2.128000000000e-10 2.853727091731e-01 + 2.228000000000e-10 3.254453264627e-01 + 2.328000000000e-10 3.792799604087e-01 + 2.428000000000e-10 4.176388066249e-01 + 2.528000000000e-10 4.205544301124e-01 + 2.628000000000e-10 3.463528198985e-01 + 2.728000000000e-10 1.792096076204e-01 + 2.828000000000e-10 -1.442396833933e-02 + 2.928000000000e-10 -1.649237711275e-01 + 3.028000000000e-10 -2.471596975948e-01 + 3.128000000000e-10 -2.748735614517e-01 + 3.228000000000e-10 -3.160128767795e-01 + 3.328000000000e-10 -3.707930594343e-01 + 3.428000000000e-10 -4.104823651943e-01 + 3.528000000000e-10 -4.153692056047e-01 + 3.628000000000e-10 -3.427931169871e-01 + 3.728000000000e-10 -1.769552164151e-01 + 3.828000000000e-10 1.590673093360e-02 + 3.928000000000e-10 1.658834812043e-01 + 4.028000000000e-10 2.479775600913e-01 + 4.128000000000e-10 2.756409688001e-01 + 4.228000000000e-10 3.168596600790e-01 + 4.328000000000e-10 3.715133147191e-01 + 4.428000000000e-10 4.111218222953e-01 + 4.528000000000e-10 4.157229971644e-01 + 4.628000000000e-10 3.430019798682e-01 + 4.728000000000e-10 1.769456026445e-01 + 4.828000000000e-10 -1.592886494610e-02 + 4.928000000000e-10 -1.659782283296e-01 + 5.028000000000e-10 -2.479947853664e-01 + 5.128000000000e-10 -2.756931315881e-01 + 5.228000000000e-10 -3.168416717549e-01 + 5.328000000000e-10 -3.715547211919e-01 + 5.428000000000e-10 -4.111034138799e-01 + 5.528000000000e-10 -4.157691346087e-01 + 5.628000000000e-10 -3.429925568898e-01 + 5.728000000000e-10 -1.770024985869e-01 + 5.828000000000e-10 1.592938202906e-02 + 5.928000000000e-10 1.659292038608e-01 + 6.028000000000e-10 2.480043512000e-01 + 6.128000000000e-10 2.756533285421e-01 + 6.228000000000e-10 3.168576585763e-01 + 6.328000000000e-10 3.715156583068e-01 + 6.428000000000e-10 4.111207690964e-01 + 6.528000000000e-10 4.157343976531e-01 + 6.628000000000e-10 3.430135347581e-01 + 6.728000000000e-10 1.769734665185e-01 + 6.828000000000e-10 -1.590652763180e-02 + 6.928000000000e-10 -1.659537152419e-01 + 7.028000000000e-10 -2.479812550746e-01 + 7.128000000000e-10 -2.756768834918e-01 + 7.228000000000e-10 -3.168350969677e-01 + 7.328000000000e-10 -3.715419152243e-01 + 7.428000000000e-10 -4.110983779981e-01 + 7.528000000000e-10 -4.157587194411e-01 + 7.628000000000e-10 -3.429901444601e-01 + 7.728000000000e-10 -1.769973775521e-01 + 7.828000000000e-10 1.592723735432e-02 + 7.928000000000e-10 1.659318535084e-01 + 8.028000000000e-10 2.480017799848e-01 + 8.128000000000e-10 2.756559811492e-01 + 8.228000000000e-10 3.168566227283e-01 + 8.328000000000e-10 3.715195500188e-01 + 8.428000000000e-10 4.111190536097e-01 + 8.528000000000e-10 4.157370668569e-01 + 8.628000000000e-10 3.430103710665e-01 + 8.728000000000e-10 1.769771675859e-01 + 8.828000000000e-10 -1.590770493918e-02 + 8.928000000000e-10 -1.659501582149e-01 + 9.028000000000e-10 -2.479827571068e-01 + 9.128000000000e-10 -2.756738772283e-01 + 9.228000000000e-10 -3.168377001445e-01 + 9.328000000000e-10 -3.715391180409e-01 + 9.428000000000e-10 -4.111007797151e-01 + 9.528000000000e-10 -4.157556639381e-01 + 9.628000000000e-10 -3.429919881202e-01 + 9.728000000000e-10 -1.769955652012e-01 + 9.828000000000e-10 1.592430721908e-02 + 9.928000000000e-10 1.659331850974e-01 + 1.000000000000e-09 2.332140069758e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/conditions.yaml new file mode 100644 index 00000000..bb42c54d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 18 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_18 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/CML_core_tb.sch new file mode 100644 index 00000000..769e4cd5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/CML_core_tb_19.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/CML_core_tb_19.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/CML_core_tb_19.data new file mode 100644 index 00000000..6e384890 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/CML_core_tb_19.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.162777317791e-01 + 1.728000000000e-10 -1.528661974147e-01 + 1.828000000000e-10 3.474832458294e-02 + 1.928000000000e-10 1.787124308466e-01 + 2.028000000000e-10 2.559986610902e-01 + 2.128000000000e-10 2.810767408313e-01 + 2.228000000000e-10 3.219404824571e-01 + 2.328000000000e-10 3.760375868322e-01 + 2.428000000000e-10 4.141294975409e-01 + 2.528000000000e-10 4.175370858756e-01 + 2.628000000000e-10 3.443891646085e-01 + 2.728000000000e-10 1.786024667409e-01 + 2.828000000000e-10 -1.272368439666e-02 + 2.928000000000e-10 -1.612661145276e-01 + 3.028000000000e-10 -2.425558656005e-01 + 3.128000000000e-10 -2.696709375544e-01 + 3.228000000000e-10 -3.115976016931e-01 + 3.328000000000e-10 -3.666762080522e-01 + 3.428000000000e-10 -4.062269757432e-01 + 3.528000000000e-10 -4.117682170104e-01 + 3.628000000000e-10 -3.403932990270e-01 + 3.728000000000e-10 -1.760595961534e-01 + 3.828000000000e-10 1.438676142530e-02 + 3.928000000000e-10 1.623380571180e-01 + 4.028000000000e-10 2.434588647096e-01 + 4.128000000000e-10 2.705169080514e-01 + 4.228000000000e-10 3.125303134845e-01 + 4.328000000000e-10 3.674735521527e-01 + 4.428000000000e-10 4.069324770669e-01 + 4.528000000000e-10 4.121668816011e-01 + 4.628000000000e-10 3.406314536055e-01 + 4.728000000000e-10 1.760592839129e-01 + 4.828000000000e-10 -1.440702618479e-02 + 4.928000000000e-10 -1.624387020945e-01 + 5.028000000000e-10 -2.434775787799e-01 + 5.128000000000e-10 -2.705727170369e-01 + 5.228000000000e-10 -3.125119373252e-01 + 5.328000000000e-10 -3.675184828947e-01 + 5.428000000000e-10 -4.069140356329e-01 + 5.528000000000e-10 -4.122173977207e-01 + 5.628000000000e-10 -3.406230488723e-01 + 5.728000000000e-10 -1.761225643375e-01 + 5.828000000000e-10 1.440482600394e-02 + 5.928000000000e-10 1.623840500109e-01 + 6.028000000000e-10 2.434858819416e-01 + 6.128000000000e-10 2.705285901327e-01 + 6.228000000000e-10 3.125279242462e-01 + 6.328000000000e-10 3.674758375852e-01 + 6.428000000000e-10 4.069313048189e-01 + 6.528000000000e-10 4.121794941223e-01 + 6.628000000000e-10 3.406442721772e-01 + 6.728000000000e-10 1.760913923029e-01 + 6.828000000000e-10 -1.438048626859e-02 + 6.928000000000e-10 -1.624102913298e-01 + 7.028000000000e-10 -2.434611919520e-01 + 7.128000000000e-10 -2.705537859875e-01 + 7.228000000000e-10 -3.125040211699e-01 + 7.328000000000e-10 -3.675038904367e-01 + 7.428000000000e-10 -4.069074652851e-01 + 7.528000000000e-10 -4.122054838885e-01 + 7.628000000000e-10 -3.406192567768e-01 + 7.728000000000e-10 -1.761170868219e-01 + 7.828000000000e-10 1.440247036537e-02 + 7.928000000000e-10 1.623867436405e-01 + 8.028000000000e-10 2.434830143217e-01 + 8.128000000000e-10 2.705312548291e-01 + 8.228000000000e-10 3.125271394700e-01 + 8.328000000000e-10 3.674800931307e-01 + 8.428000000000e-10 4.069295144266e-01 + 8.528000000000e-10 4.121823557439e-01 + 8.628000000000e-10 3.406407407456e-01 + 8.728000000000e-10 1.760956573916e-01 + 8.828000000000e-10 -1.438135361500e-02 + 8.928000000000e-10 -1.624062315135e-01 + 9.028000000000e-10 -2.434625084707e-01 + 9.128000000000e-10 -2.705503455528e-01 + 9.228000000000e-10 -3.125068466958e-01 + 9.328000000000e-10 -3.675009271833e-01 + 9.428000000000e-10 -4.069098943042e-01 + 9.528000000000e-10 -4.122022218921e-01 + 9.628000000000e-10 -3.406210058100e-01 + 9.728000000000e-10 -1.761154015725e-01 + 9.828000000000e-10 1.439913133121e-02 + 9.928000000000e-10 1.623879640093e-01 + 1.000000000000e-09 2.290402036537e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/conditions.yaml new file mode 100644 index 00000000..6236e59b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 19 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_19 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/CML_core_tb.sch new file mode 100644 index 00000000..71fb2193 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/CML_core_tb_20.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/CML_core_tb_20.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/CML_core_tb_20.data new file mode 100644 index 00000000..3dfcf241 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/CML_core_tb_20.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.365386572536e-01 + 1.728000000000e-10 -1.657072094068e-01 + 1.828000000000e-10 3.099865584261e-02 + 1.928000000000e-10 1.820426436768e-01 + 2.028000000000e-10 2.627018214462e-01 + 2.128000000000e-10 2.893736945719e-01 + 2.228000000000e-10 3.287984169352e-01 + 2.328000000000e-10 3.833334317825e-01 + 2.428000000000e-10 4.238785365972e-01 + 2.528000000000e-10 4.280322768716e-01 + 2.628000000000e-10 3.532409470363e-01 + 2.728000000000e-10 1.834641899168e-01 + 2.828000000000e-10 -1.474496205711e-02 + 2.928000000000e-10 -1.691349612478e-01 + 3.028000000000e-10 -2.530204867896e-01 + 3.128000000000e-10 -2.814070764654e-01 + 3.228000000000e-10 -3.218416847899e-01 + 3.328000000000e-10 -3.771799136100e-01 + 3.428000000000e-10 -4.187055626636e-01 + 3.528000000000e-10 -4.243036771430e-01 + 3.628000000000e-10 -3.506062035467e-01 + 3.728000000000e-10 -1.816763297909e-01 + 3.828000000000e-10 1.601938741723e-02 + 3.928000000000e-10 1.700087907901e-01 + 4.028000000000e-10 2.537596951165e-01 + 4.128000000000e-10 2.820887501770e-01 + 4.228000000000e-10 3.225625541805e-01 + 4.328000000000e-10 3.777928583784e-01 + 4.428000000000e-10 4.192485534625e-01 + 4.528000000000e-10 4.246080285894e-01 + 4.628000000000e-10 3.507916132015e-01 + 4.728000000000e-10 1.816929452641e-01 + 4.828000000000e-10 -1.601075067965e-02 + 4.928000000000e-10 -1.700562644838e-01 + 5.028000000000e-10 -2.537513990380e-01 + 5.128000000000e-10 -2.821086741965e-01 + 5.228000000000e-10 -3.225309737549e-01 + 5.328000000000e-10 -3.778081660132e-01 + 5.428000000000e-10 -4.192196231589e-01 + 5.528000000000e-10 -4.246325132019e-01 + 5.628000000000e-10 -3.507765562578e-01 + 5.728000000000e-10 -1.817315603141e-01 + 5.828000000000e-10 1.601468821266e-02 + 5.928000000000e-10 1.700220210141e-01 + 6.028000000000e-10 2.537612841477e-01 + 6.128000000000e-10 2.820810469197e-01 + 6.228000000000e-10 3.225454957468e-01 + 6.328000000000e-10 3.777800822765e-01 + 6.428000000000e-10 4.192350742948e-01 + 6.528000000000e-10 4.246071005326e-01 + 6.628000000000e-10 3.507940665347e-01 + 6.728000000000e-10 1.817094337521e-01 + 6.828000000000e-10 -1.599736953115e-02 + 6.928000000000e-10 -1.700405869499e-01 + 7.028000000000e-10 -2.537437685408e-01 + 7.128000000000e-10 -2.820988428465e-01 + 7.228000000000e-10 -3.225283133162e-01 + 7.328000000000e-10 -3.778004844844e-01 + 7.428000000000e-10 -4.192180216890e-01 + 7.528000000000e-10 -4.246257635725e-01 + 7.628000000000e-10 -3.507760422929e-01 + 7.728000000000e-10 -1.817278922025e-01 + 7.828000000000e-10 1.601285231965e-02 + 7.928000000000e-10 1.700238629540e-01 + 8.028000000000e-10 2.537592487741e-01 + 8.128000000000e-10 2.820829438407e-01 + 8.228000000000e-10 3.225445511573e-01 + 8.328000000000e-10 3.777829985044e-01 + 8.428000000000e-10 4.192337708379e-01 + 8.528000000000e-10 4.246090234999e-01 + 8.628000000000e-10 3.507916632731e-01 + 8.728000000000e-10 1.817122417436e-01 + 8.828000000000e-10 -1.599824136343e-02 + 8.928000000000e-10 -1.700377849177e-01 + 9.028000000000e-10 -2.537449127629e-01 + 9.128000000000e-10 -2.820965585668e-01 + 9.228000000000e-10 -3.225302446360e-01 + 9.328000000000e-10 -3.777982010874e-01 + 9.428000000000e-10 -4.192199753705e-01 + 9.528000000000e-10 -4.246232587341e-01 + 9.628000000000e-10 -3.507775800865e-01 + 9.728000000000e-10 -1.817263367247e-01 + 9.828000000000e-10 1.601066647660e-02 + 9.928000000000e-10 1.700248857455e-01 + 1.000000000000e-09 2.385375784000e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/conditions.yaml new file mode 100644 index 00000000..3519aa6d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 20 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_20 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/CML_core_tb.sch new file mode 100644 index 00000000..0e56b96e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/CML_core_tb_21.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/CML_core_tb_21.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/CML_core_tb_21.data new file mode 100644 index 00000000..86f9b023 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/CML_core_tb_21.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.747912795524e-01 + 1.728000000000e-10 -1.327955908449e-01 + 1.828000000000e-10 3.931332790349e-02 + 1.928000000000e-10 1.782957289495e-01 + 2.028000000000e-10 2.573194188668e-01 + 2.128000000000e-10 2.870254911902e-01 + 2.228000000000e-10 3.228650321442e-01 + 2.328000000000e-10 3.690575149088e-01 + 2.428000000000e-10 4.023791308175e-01 + 2.528000000000e-10 4.034409994944e-01 + 2.628000000000e-10 3.332295993533e-01 + 2.728000000000e-10 1.767123870243e-01 + 2.828000000000e-10 -7.574880255958e-03 + 2.928000000000e-10 -1.550892096227e-01 + 3.028000000000e-10 -2.394679486139e-01 + 3.128000000000e-10 -2.715465054757e-01 + 3.228000000000e-10 -3.085580168164e-01 + 3.328000000000e-10 -3.560821219044e-01 + 3.428000000000e-10 -3.914831036325e-01 + 3.528000000000e-10 -3.956717314322e-01 + 3.628000000000e-10 -3.285929470428e-01 + 3.728000000000e-10 -1.747908753666e-01 + 3.828000000000e-10 7.882784627431e-03 + 3.928000000000e-10 1.545893087045e-01 + 4.028000000000e-10 2.389887597051e-01 + 4.128000000000e-10 2.712307710628e-01 + 4.228000000000e-10 3.085047043395e-01 + 4.328000000000e-10 3.559448484744e-01 + 4.428000000000e-10 3.913507819782e-01 + 4.528000000000e-10 3.953547803018e-01 + 4.628000000000e-10 3.282585464854e-01 + 4.728000000000e-10 1.743078825018e-01 + 4.828000000000e-10 -8.291328068348e-03 + 4.928000000000e-10 -1.550293895867e-01 + 5.028000000000e-10 -2.392804293874e-01 + 5.128000000000e-10 -2.715405217782e-01 + 5.228000000000e-10 -3.087067361985e-01 + 5.328000000000e-10 -3.562070457914e-01 + 5.428000000000e-10 -3.915132320474e-01 + 5.528000000000e-10 -3.955548280332e-01 + 5.628000000000e-10 -3.283427048941e-01 + 5.728000000000e-10 -1.744282326244e-01 + 5.828000000000e-10 8.270645751064e-03 + 5.928000000000e-10 1.549582711486e-01 + 6.028000000000e-10 2.392860039329e-01 + 6.128000000000e-10 2.714820836214e-01 + 6.228000000000e-10 3.087161022039e-01 + 6.328000000000e-10 3.561494137047e-01 + 6.428000000000e-10 3.915273490759e-01 + 6.528000000000e-10 3.955079501007e-01 + 6.628000000000e-10 3.283677191723e-01 + 6.728000000000e-10 1.743944727908e-01 + 6.828000000000e-10 -8.238033211244e-03 + 6.928000000000e-10 -1.549849820320e-01 + 7.028000000000e-10 -2.392533741503e-01 + 7.128000000000e-10 -2.715088112944e-01 + 7.228000000000e-10 -3.086845279612e-01 + 7.328000000000e-10 -3.561786907982e-01 + 7.428000000000e-10 -3.914967682891e-01 + 7.528000000000e-10 -3.955360247734e-01 + 7.628000000000e-10 -3.283379458960e-01 + 7.728000000000e-10 -1.744219452106e-01 + 7.828000000000e-10 8.266285029230e-03 + 7.928000000000e-10 1.549592969714e-01 + 8.028000000000e-10 2.392805186707e-01 + 8.128000000000e-10 2.714837558368e-01 + 8.228000000000e-10 3.087120651005e-01 + 8.328000000000e-10 3.561520690508e-01 + 8.428000000000e-10 3.915233230940e-01 + 8.528000000000e-10 3.955100606400e-01 + 8.628000000000e-10 3.283632493206e-01 + 8.728000000000e-10 1.743968536756e-01 + 8.828000000000e-10 -8.241845610385e-03 + 8.928000000000e-10 -1.549825747228e-01 + 9.028000000000e-10 -2.392568734068e-01 + 9.128000000000e-10 -2.715063119250e-01 + 9.228000000000e-10 -3.086881712182e-01 + 9.328000000000e-10 -3.561760305782e-01 + 9.428000000000e-10 -3.915002731039e-01 + 9.528000000000e-10 -3.955331724158e-01 + 9.628000000000e-10 -3.283409163093e-01 + 9.728000000000e-10 -1.744193777973e-01 + 9.828000000000e-10 8.263272108901e-03 + 9.928000000000e-10 1.549616575981e-01 + 1.000000000000e-09 2.229820050464e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/conditions.yaml new file mode 100644 index 00000000..1bcabd93 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 21 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_21 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/CML_core_tb.sch new file mode 100644 index 00000000..9c3ed2de --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/CML_core_tb_22.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/CML_core_tb_22.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/CML_core_tb_22.data new file mode 100644 index 00000000..ef0e6c8e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/CML_core_tb_22.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.701426652476e-01 + 1.728000000000e-10 -1.295079168872e-01 + 1.828000000000e-10 4.028305902420e-02 + 1.928000000000e-10 1.769160181627e-01 + 2.028000000000e-10 2.543038782058e-01 + 2.128000000000e-10 2.828787064062e-01 + 2.228000000000e-10 3.193333275112e-01 + 2.328000000000e-10 3.660596632426e-01 + 2.428000000000e-10 3.993599084345e-01 + 2.528000000000e-10 4.007883413226e-01 + 2.628000000000e-10 3.312419521143e-01 + 2.728000000000e-10 1.754810620333e-01 + 2.828000000000e-10 -7.142746942805e-03 + 2.928000000000e-10 -1.527779354444e-01 + 3.028000000000e-10 -2.358001938178e-01 + 3.128000000000e-10 -2.668485168237e-01 + 3.228000000000e-10 -3.044746718514e-01 + 3.328000000000e-10 -3.525545062341e-01 + 3.428000000000e-10 -3.880254364838e-01 + 3.528000000000e-10 -3.926522183008e-01 + 3.628000000000e-10 -3.262954780243e-01 + 3.728000000000e-10 -1.733443838482e-01 + 3.828000000000e-10 7.573790689709e-03 + 3.928000000000e-10 1.523487073311e-01 + 4.028000000000e-10 2.353677758316e-01 + 4.128000000000e-10 2.665695097895e-01 + 4.228000000000e-10 3.044490522149e-01 + 4.328000000000e-10 3.524353166192e-01 + 4.428000000000e-10 3.879041587545e-01 + 4.528000000000e-10 3.923389296672e-01 + 4.628000000000e-10 3.259554596391e-01 + 4.728000000000e-10 1.728458619818e-01 + 4.828000000000e-10 -8.002573892585e-03 + 4.928000000000e-10 -1.528088090159e-01 + 5.028000000000e-10 -2.356747724378e-01 + 5.128000000000e-10 -2.668925685814e-01 + 5.228000000000e-10 -3.046638401901e-01 + 5.328000000000e-10 -3.527112223433e-01 + 5.428000000000e-10 -3.880786380631e-01 + 5.528000000000e-10 -3.925506229445e-01 + 5.628000000000e-10 -3.260495799326e-01 + 5.728000000000e-10 -1.729761662154e-01 + 5.828000000000e-10 7.974498187451e-03 + 5.928000000000e-10 1.527311696558e-01 + 6.028000000000e-10 2.356760074325e-01 + 6.128000000000e-10 2.668297167568e-01 + 6.228000000000e-10 3.046702367069e-01 + 6.328000000000e-10 3.526500635637e-01 + 6.428000000000e-10 3.880902250634e-01 + 6.528000000000e-10 3.925010528185e-01 + 6.628000000000e-10 3.260730653917e-01 + 6.728000000000e-10 1.729410953112e-01 + 6.828000000000e-10 -7.941970684065e-03 + 6.928000000000e-10 -1.527585341072e-01 + 7.028000000000e-10 -2.356430884825e-01 + 7.128000000000e-10 -2.668569558480e-01 + 7.228000000000e-10 -3.046384985761e-01 + 7.328000000000e-10 -3.526798341051e-01 + 7.428000000000e-10 -3.880593641809e-01 + 7.528000000000e-10 -3.925295324367e-01 + 7.628000000000e-10 -3.260427874257e-01 + 7.728000000000e-10 -1.729689796013e-01 + 7.828000000000e-10 7.970639231343e-03 + 7.928000000000e-10 1.527324506408e-01 + 8.028000000000e-10 2.356706370408e-01 + 8.128000000000e-10 2.668314718812e-01 + 8.228000000000e-10 3.046665550415e-01 + 8.328000000000e-10 3.526529348742e-01 + 8.428000000000e-10 3.880863283995e-01 + 8.528000000000e-10 3.925032166540e-01 + 8.628000000000e-10 3.260684590033e-01 + 8.728000000000e-10 1.729436324779e-01 + 8.828000000000e-10 -7.945691115533e-03 + 8.928000000000e-10 -1.527560420249e-01 + 9.028000000000e-10 -2.356465048672e-01 + 9.128000000000e-10 -2.668543449819e-01 + 9.228000000000e-10 -3.046422495200e-01 + 9.328000000000e-10 -3.526772110923e-01 + 9.428000000000e-10 -3.880628732866e-01 + 9.528000000000e-10 -3.925266759429e-01 + 9.628000000000e-10 -3.260456785141e-01 + 9.728000000000e-10 -1.729665660062e-01 + 9.828000000000e-10 7.967487161613e-03 + 9.928000000000e-10 1.527347010769e-01 + 1.000000000000e-09 2.198236907112e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/conditions.yaml new file mode 100644 index 00000000..98cbbbe9 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 22 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_22 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/CML_core_tb.sch new file mode 100644 index 00000000..cfabd885 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/CML_core_tb_23.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/CML_core_tb_23.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/CML_core_tb_23.data new file mode 100644 index 00000000..7b2e7ab2 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/CML_core_tb_23.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.957054612407e-01 + 1.728000000000e-10 -1.475216919691e-01 + 1.828000000000e-10 3.196996632833e-02 + 1.928000000000e-10 1.773696584526e-01 + 2.028000000000e-10 2.602670445343e-01 + 2.128000000000e-10 2.919684489720e-01 + 2.228000000000e-10 3.273690981683e-01 + 2.328000000000e-10 3.736661732429e-01 + 2.428000000000e-10 4.086769482098e-01 + 2.528000000000e-10 4.113258498473e-01 + 2.628000000000e-10 3.414272197123e-01 + 2.728000000000e-10 1.833836328070e-01 + 2.828000000000e-10 -4.501363849837e-03 + 2.928000000000e-10 -1.562318489881e-01 + 3.028000000000e-10 -2.435570784568e-01 + 3.128000000000e-10 -2.775386220390e-01 + 3.228000000000e-10 -3.142878056355e-01 + 3.328000000000e-10 -3.618442790176e-01 + 3.428000000000e-10 -3.986028140213e-01 + 3.528000000000e-10 -4.040381865127e-01 + 3.628000000000e-10 -3.369104214062e-01 + 3.728000000000e-10 -1.811830752063e-01 + 3.828000000000e-10 5.355128083595e-03 + 3.928000000000e-10 1.563630270676e-01 + 4.028000000000e-10 2.436522664355e-01 + 4.128000000000e-10 2.777202130414e-01 + 4.228000000000e-10 3.146716935396e-01 + 4.328000000000e-10 3.621309165835e-01 + 4.428000000000e-10 3.988648293319e-01 + 4.528000000000e-10 4.040567761896e-01 + 4.628000000000e-10 3.368362274946e-01 + 4.728000000000e-10 1.809052635954e-01 + 4.828000000000e-10 -5.606347307292e-03 + 4.928000000000e-10 -1.566747533637e-01 + 5.028000000000e-10 -2.438438929936e-01 + 5.128000000000e-10 -2.779365198916e-01 + 5.228000000000e-10 -3.147868656031e-01 + 5.328000000000e-10 -3.623069078218e-01 + 5.428000000000e-10 -3.989546307961e-01 + 5.528000000000e-10 -4.041975741324e-01 + 5.628000000000e-10 -3.368831845243e-01 + 5.728000000000e-10 -1.810020824460e-01 + 5.828000000000e-10 5.593858826262e-03 + 5.928000000000e-10 1.566090374935e-01 + 6.028000000000e-10 2.438493522755e-01 + 6.128000000000e-10 2.778818285943e-01 + 6.228000000000e-10 3.147972496077e-01 + 6.328000000000e-10 3.622530927659e-01 + 6.428000000000e-10 3.989689895438e-01 + 6.528000000000e-10 4.041528360847e-01 + 6.628000000000e-10 3.369065350765e-01 + 6.728000000000e-10 1.809679655825e-01 + 6.828000000000e-10 -5.565139497590e-03 + 6.928000000000e-10 -1.566366178225e-01 + 7.028000000000e-10 -2.438204188033e-01 + 7.128000000000e-10 -2.779089356335e-01 + 7.228000000000e-10 -3.147686522157e-01 + 7.328000000000e-10 -3.622826637804e-01 + 7.428000000000e-10 -3.989411843085e-01 + 7.528000000000e-10 -4.041807678845e-01 + 7.628000000000e-10 -3.368790616195e-01 + 7.728000000000e-10 -1.809947630224e-01 + 7.828000000000e-10 5.591512634984e-03 + 7.928000000000e-10 1.566120178189e-01 + 8.028000000000e-10 2.438458933358e-01 + 8.128000000000e-10 2.778849719194e-01 + 8.228000000000e-10 3.147945034671e-01 + 8.328000000000e-10 3.622568751046e-01 + 8.428000000000e-10 3.989662140554e-01 + 8.528000000000e-10 4.041558823701e-01 + 8.628000000000e-10 3.369030769235e-01 + 8.728000000000e-10 1.809706945647e-01 + 8.828000000000e-10 -5.568483515763e-03 + 8.928000000000e-10 -1.566340912711e-01 + 9.028000000000e-10 -2.438236181184e-01 + 9.128000000000e-10 -2.779064153414e-01 + 9.228000000000e-10 -3.147718720666e-01 + 9.328000000000e-10 -3.622798572716e-01 + 9.428000000000e-10 -3.989444036153e-01 + 9.528000000000e-10 -4.041778978449e-01 + 9.628000000000e-10 -3.368819513246e-01 + 9.728000000000e-10 -1.809921012276e-01 + 9.828000000000e-10 5.588724287086e-03 + 9.928000000000e-10 1.566143682128e-01 + 1.000000000000e-09 2.267750497136e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/conditions.yaml new file mode 100644 index 00000000..cfb5c2d9 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 23 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_23 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/CML_core_tb.sch new file mode 100644 index 00000000..f684fcc8 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/CML_core_tb_24.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/CML_core_tb_24.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/CML_core_tb_24.data new file mode 100644 index 00000000..a01deb89 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/CML_core_tb_24.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -1.908985659112e-01 + 1.728000000000e-10 -9.049079150817e-02 + 1.828000000000e-10 3.945873683219e-02 + 1.928000000000e-10 1.521437177417e-01 + 2.028000000000e-10 2.220068772324e-01 + 2.128000000000e-10 2.535092334052e-01 + 2.228000000000e-10 2.861973397174e-01 + 2.328000000000e-10 3.239843013312e-01 + 2.428000000000e-10 3.520113017607e-01 + 2.528000000000e-10 3.540468115658e-01 + 2.628000000000e-10 2.949447709683e-01 + 2.728000000000e-10 1.587983397866e-01 + 2.828000000000e-10 -6.865354773069e-03 + 2.928000000000e-10 -1.448078480843e-01 + 3.028000000000e-10 -2.275605338030e-01 + 3.128000000000e-10 -2.625604064747e-01 + 3.228000000000e-10 -2.958552078644e-01 + 3.328000000000e-10 -3.351711406638e-01 + 3.428000000000e-10 -3.644984224381e-01 + 3.528000000000e-10 -3.669950471097e-01 + 3.628000000000e-10 -3.072796408874e-01 + 3.728000000000e-10 -1.699866077827e-01 + 3.828000000000e-10 -2.842045316933e-03 + 3.928000000000e-10 1.365086891956e-01 + 4.028000000000e-10 2.207869920157e-01 + 4.128000000000e-10 2.567713461579e-01 + 4.228000000000e-10 2.907030026757e-01 + 4.328000000000e-10 3.302687598301e-01 + 4.428000000000e-10 3.600803190405e-01 + 4.528000000000e-10 3.632331450943e-01 + 4.628000000000e-10 3.045482678871e-01 + 4.728000000000e-10 1.682698274629e-01 + 4.828000000000e-10 2.058504292284e-03 + 4.928000000000e-10 -1.367871396964e-01 + 5.028000000000e-10 -2.207717990252e-01 + 5.128000000000e-10 -2.567684885934e-01 + 5.228000000000e-10 -2.906651825463e-01 + 5.328000000000e-10 -3.302494358660e-01 + 5.428000000000e-10 -3.599712284157e-01 + 5.528000000000e-10 -3.631239508150e-01 + 5.628000000000e-10 -3.043584109358e-01 + 5.728000000000e-10 -1.680958385636e-01 + 5.828000000000e-10 -1.834034512727e-03 + 5.928000000000e-10 1.369613450439e-01 + 6.028000000000e-10 2.209618957221e-01 + 6.128000000000e-10 2.568952536478e-01 + 6.228000000000e-10 2.908171185353e-01 + 6.328000000000e-10 3.303549214919e-01 + 6.428000000000e-10 3.601082390759e-01 + 6.528000000000e-10 3.632059905221e-01 + 6.628000000000e-10 3.044557238628e-01 + 6.728000000000e-10 1.681292777859e-01 + 6.828000000000e-10 1.882442241730e-03 + 6.928000000000e-10 -1.369637862409e-01 + 7.028000000000e-10 -2.209363992802e-01 + 7.128000000000e-10 -2.569065829626e-01 + 7.228000000000e-10 -2.907936706940e-01 + 7.328000000000e-10 -3.303682701482e-01 + 7.428000000000e-10 -3.600879594395e-01 + 7.528000000000e-10 -3.632220959958e-01 + 7.628000000000e-10 -3.044401007882e-01 + 7.728000000000e-10 -1.681486407544e-01 + 7.828000000000e-10 -1.870004957548e-03 + 7.928000000000e-10 1.369437070838e-01 + 8.028000000000e-10 2.209481957039e-01 + 8.128000000000e-10 2.568879030180e-01 + 8.228000000000e-10 2.908064848389e-01 + 8.328000000000e-10 3.303493303219e-01 + 8.428000000000e-10 3.601006147126e-01 + 8.528000000000e-10 3.632041339109e-01 + 8.628000000000e-10 3.044528281549e-01 + 8.728000000000e-10 1.681322760827e-01 + 8.828000000000e-10 1.883536763259e-03 + 8.928000000000e-10 -1.369582535540e-01 + 9.028000000000e-10 -2.209346296842e-01 + 9.128000000000e-10 -2.569016830366e-01 + 9.228000000000e-10 -2.907925936742e-01 + 9.328000000000e-10 -3.303636164667e-01 + 9.428000000000e-10 -3.600871302257e-01 + 9.528000000000e-10 -3.632178492939e-01 + 9.628000000000e-10 -3.044398392752e-01 + 9.728000000000e-10 -1.681454261603e-01 + 9.828000000000e-10 -1.870628705438e-03 + 9.928000000000e-10 1.369459433541e-01 + 1.000000000000e-09 2.037746084522e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/conditions.yaml new file mode 100644 index 00000000..25f37c6c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 24 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_24 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/CML_core_tb.sch new file mode 100644 index 00000000..67e9e639 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/CML_core_tb_25.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/CML_core_tb_25.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/CML_core_tb_25.data new file mode 100644 index 00000000..182746dc --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/CML_core_tb_25.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -1.878715792581e-01 + 1.728000000000e-10 -8.812036120597e-02 + 1.828000000000e-10 4.046526586524e-02 + 1.928000000000e-10 1.515705626527e-01 + 2.028000000000e-10 2.200566198342e-01 + 2.128000000000e-10 2.503583455541e-01 + 2.228000000000e-10 2.832914205797e-01 + 2.328000000000e-10 3.216696186231e-01 + 2.428000000000e-10 3.500303926946e-01 + 2.528000000000e-10 3.524815741411e-01 + 2.628000000000e-10 2.936462106779e-01 + 2.728000000000e-10 1.576219496242e-01 + 2.828000000000e-10 -7.121462127754e-03 + 2.928000000000e-10 -1.436071598858e-01 + 3.028000000000e-10 -2.249496922999e-01 + 3.128000000000e-10 -2.586592240194e-01 + 3.228000000000e-10 -2.922419569702e-01 + 3.328000000000e-10 -3.321983211521e-01 + 3.428000000000e-10 -3.618684381611e-01 + 3.528000000000e-10 -3.648249016007e-01 + 3.628000000000e-10 -3.055379959953e-01 + 3.728000000000e-10 -1.686105488568e-01 + 3.828000000000e-10 -2.582643774162e-03 + 3.928000000000e-10 1.352182085241e-01 + 4.028000000000e-10 2.180702244722e-01 + 4.128000000000e-10 2.527783389641e-01 + 4.228000000000e-10 2.869845016096e-01 + 4.328000000000e-10 3.271697550530e-01 + 4.428000000000e-10 3.573213651505e-01 + 4.528000000000e-10 3.609341509143e-01 + 4.628000000000e-10 3.026708512688e-01 + 4.728000000000e-10 1.667591862946e-01 + 4.828000000000e-10 1.676053368052e-03 + 4.928000000000e-10 -1.356064331336e-01 + 5.028000000000e-10 -2.181494577446e-01 + 5.128000000000e-10 -2.528581012316e-01 + 5.228000000000e-10 -2.870203472690e-01 + 5.328000000000e-10 -3.272198972187e-01 + 5.428000000000e-10 -3.572767955086e-01 + 5.528000000000e-10 -3.608816832152e-01 + 5.628000000000e-10 -3.025243774497e-01 + 5.728000000000e-10 -1.666129730216e-01 + 5.828000000000e-10 -1.465204057357e-03 + 5.928000000000e-10 1.357749931272e-01 + 6.028000000000e-10 2.183376260095e-01 + 6.128000000000e-10 2.529831758691e-01 + 6.228000000000e-10 2.871716452249e-01 + 6.328000000000e-10 3.273254918206e-01 + 6.428000000000e-10 3.574148326524e-01 + 6.528000000000e-10 3.609652866209e-01 + 6.628000000000e-10 3.026246199120e-01 + 6.728000000000e-10 1.666502220733e-01 + 6.828000000000e-10 1.518129196282e-03 + 6.928000000000e-10 -1.357732099566e-01 + 7.028000000000e-10 -2.183080403425e-01 + 7.128000000000e-10 -2.529912058397e-01 + 7.228000000000e-10 -2.871450109118e-01 + 7.328000000000e-10 -3.273360198503e-01 + 7.428000000000e-10 -3.573916245859e-01 + 7.528000000000e-10 -3.609790664977e-01 + 7.628000000000e-10 -3.026068066478e-01 + 7.728000000000e-10 -1.666683959674e-01 + 7.828000000000e-10 -1.504711775466e-03 + 7.928000000000e-10 1.357534602326e-01 + 8.028000000000e-10 2.183202914392e-01 + 8.128000000000e-10 2.529726082081e-01 + 8.228000000000e-10 2.871582302084e-01 + 8.328000000000e-10 3.273171284192e-01 + 8.428000000000e-10 3.574045685766e-01 + 8.528000000000e-10 3.609610284998e-01 + 8.628000000000e-10 3.026196909841e-01 + 8.728000000000e-10 1.666518528053e-01 + 8.828000000000e-10 1.518315117290e-03 + 8.928000000000e-10 -1.357682747942e-01 + 9.028000000000e-10 -2.183066580359e-01 + 9.128000000000e-10 -2.529866332266e-01 + 9.228000000000e-10 -2.871442829871e-01 + 9.328000000000e-10 -3.273316607928e-01 + 9.428000000000e-10 -3.573910212469e-01 + 9.528000000000e-10 -3.609749965926e-01 + 9.628000000000e-10 -3.026065830591e-01 + 9.728000000000e-10 -1.666652414066e-01 + 9.828000000000e-10 -1.505286118034e-03 + 9.928000000000e-10 1.357557668798e-01 + 1.000000000000e-09 2.016242513907e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/conditions.yaml new file mode 100644 index 00000000..44d04af8 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 25 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_25 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/CML_core_tb.sch new file mode 100644 index 00000000..bfdd1260 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/CML_core_tb_26.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/CML_core_tb_26.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/CML_core_tb_26.data new file mode 100644 index 00000000..c21b093d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/CML_core_tb_26.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.135873679018e-01 + 1.728000000000e-10 -1.054229355639e-01 + 1.828000000000e-10 3.485798650969e-02 + 1.928000000000e-10 1.569675139767e-01 + 2.028000000000e-10 2.330635404696e-01 + 2.128000000000e-10 2.680443549179e-01 + 2.228000000000e-10 3.014044829899e-01 + 2.328000000000e-10 3.394080314353e-01 + 2.428000000000e-10 3.679529618424e-01 + 2.528000000000e-10 3.700593040123e-01 + 2.628000000000e-10 3.097824620429e-01 + 2.728000000000e-10 1.706514675999e-01 + 2.828000000000e-10 3.558070014658e-04 + 2.928000000000e-10 -1.428409974599e-01 + 3.028000000000e-10 -2.298289579719e-01 + 3.128000000000e-10 -2.678794741753e-01 + 3.228000000000e-10 -3.017454056957e-01 + 3.328000000000e-10 -3.410620518407e-01 + 3.428000000000e-10 -3.712405389398e-01 + 3.528000000000e-10 -3.749327973471e-01 + 3.628000000000e-10 -3.157484466493e-01 + 3.728000000000e-10 -1.773087198166e-01 + 3.828000000000e-10 -7.070252178339e-03 + 3.928000000000e-10 1.364462941621e-01 + 4.028000000000e-10 2.243241068758e-01 + 4.128000000000e-10 2.631279769125e-01 + 4.228000000000e-10 2.976097246349e-01 + 4.328000000000e-10 3.371159716785e-01 + 4.428000000000e-10 3.676405775058e-01 + 4.528000000000e-10 3.717787254056e-01 + 4.628000000000e-10 3.133854979421e-01 + 4.728000000000e-10 1.756870158595e-01 + 4.828000000000e-10 6.171257018760e-03 + 4.928000000000e-10 -1.369680995621e-01 + 5.028000000000e-10 -2.245781248931e-01 + 5.128000000000e-10 -2.633829468620e-01 + 5.228000000000e-10 -2.978042748481e-01 + 5.328000000000e-10 -3.373348877854e-01 + 5.428000000000e-10 -3.677584906255e-01 + 5.528000000000e-10 -3.718812762918e-01 + 5.628000000000e-10 -3.133649557524e-01 + 5.728000000000e-10 -1.756479312047e-01 + 5.828000000000e-10 -6.040608056278e-03 + 5.928000000000e-10 1.370690415770e-01 + 6.028000000000e-10 2.247181767783e-01 + 6.128000000000e-10 2.634617265965e-01 + 6.228000000000e-10 2.979157296699e-01 + 6.328000000000e-10 3.373958940353e-01 + 6.428000000000e-10 3.678612954525e-01 + 6.528000000000e-10 3.719309221475e-01 + 6.628000000000e-10 3.134447453066e-01 + 6.728000000000e-10 1.756687688086e-01 + 6.828000000000e-10 6.090200135509e-03 + 6.928000000000e-10 -1.370702307281e-01 + 7.028000000000e-10 -2.246847420648e-01 + 7.128000000000e-10 -2.634701196121e-01 + 7.228000000000e-10 -2.978849158722e-01 + 7.328000000000e-10 -3.374068878437e-01 + 7.428000000000e-10 -3.678336110941e-01 + 7.528000000000e-10 -3.719446503824e-01 + 7.628000000000e-10 -3.134227431793e-01 + 7.728000000000e-10 -1.756868885858e-01 + 7.828000000000e-10 -6.072676723321e-03 + 7.928000000000e-10 1.370503070743e-01 + 8.028000000000e-10 2.247004966695e-01 + 8.128000000000e-10 2.634509722982e-01 + 8.228000000000e-10 2.979013793804e-01 + 8.328000000000e-10 3.373870921905e-01 + 8.428000000000e-10 3.678495602861e-01 + 8.528000000000e-10 3.719256264749e-01 + 8.628000000000e-10 3.134381864470e-01 + 8.728000000000e-10 1.756688935561e-01 + 8.828000000000e-10 6.088345643719e-03 + 8.928000000000e-10 -1.370666831053e-01 + 9.028000000000e-10 -2.246851372638e-01 + 9.128000000000e-10 -2.634666121684e-01 + 9.228000000000e-10 -2.978856025968e-01 + 9.328000000000e-10 -3.374033621769e-01 + 9.428000000000e-10 -3.678342837151e-01 + 9.528000000000e-10 -3.719412125322e-01 + 9.628000000000e-10 -3.134235677100e-01 + 9.728000000000e-10 -1.756838495744e-01 + 9.828000000000e-10 -6.073781243164e-03 + 9.928000000000e-10 1.370527135588e-01 + 1.000000000000e-09 2.065229990524e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/conditions.yaml new file mode 100644 index 00000000..1374b11f --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 26 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/run_26 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/simulation_summary.csv b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/simulation_summary.csv new file mode 100644 index 00000000..1422d52e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/simulation_summary.csv @@ -0,0 +1,28 @@ +run,corner,temperature,vdd,time,vo_diff,frequency,amplitude,voltage_swing +run_00,tt,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.111e-01, -1.870e-01, -3.563e-02, …]",4.722e+09,0.382,0.763 +run_01,ff,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.099e-01, -1.895e-01, -4.060e-02, …]",4.722e+09,0.377,0.754 +run_02,ss,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.163e-01, -1.876e-01, -3.217e-02, …]",4.722e+09,0.390,0.780 +run_03,tt,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.915e-01, -1.780e-01, -3.803e-02, …]",4.722e+09,0.357,0.715 +run_04,ff,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.909e-01, -1.806e-01, -4.276e-02, …]",4.722e+09,0.353,0.706 +run_05,ss,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.959e-01, -1.792e-01, -3.599e-02, …]",4.722e+09,0.366,0.732 +run_06,tt,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.689e-01, -1.692e-01, -4.423e-02, …]",4.722e+09,0.319,0.639 +run_07,ff,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.694e-01, -1.722e-01, -4.907e-02, …]",4.722e+09,0.315,0.629 +run_08,ss,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.723e-01, -1.701e-01, -4.252e-02, …]",4.722e+09,0.330,0.659 +run_09,tt,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.623e-01, -1.963e-01, -5.713e-03, …]",4.722e+09,0.421,0.843 +run_10,ff,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.622e-01, -1.984e-01, -1.024e-02, …]",4.722e+09,0.418,0.836 +run_11,ss,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.669e-01, -1.979e-01, -3.070e-03, …]",4.722e+09,0.429,0.857 +run_12,tt,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.388e-01, -1.852e-01, -4.985e-03, …]",4.722e+09,0.401,0.803 +run_13,ff,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.407e-01, -1.880e-01, -9.263e-03, …]",4.722e+09,0.398,0.796 +run_14,ss,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.446e-01, -1.889e-01, -5.355e-03, …]",4.722e+09,0.409,0.817 +run_15,tt,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.832e-01, -1.548e-01, 2.955e-03, …]",4.722e+09,0.371,0.743 +run_16,ff,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.908e-01, -1.609e-01, -2.321e-03, …]",4.722e+09,0.368,0.736 +run_17,ss,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.858e-01, -1.573e-01, 2.540e-03, …]",4.722e+09,0.379,0.758 +run_18,tt,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.214e-01, -1.558e-01, 3.477e-02, …]",4.722e+09,0.418,0.836 +run_19,ff,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.163e-01, -1.529e-01, 3.475e-02, …]",4.722e+09,0.415,0.830 +run_20,ss,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.365e-01, -1.657e-01, 3.100e-02, …]",4.722e+09,0.426,0.853 +run_21,tt,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.748e-01, -1.328e-01, 3.931e-02, …]",4.722e+09,0.400,0.799 +run_22,ff,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.701e-01, -1.295e-01, 4.028e-02, …]",4.722e+09,0.397,0.793 +run_23,ss,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.957e-01, -1.475e-01, 3.197e-02, …]",4.722e+09,0.408,0.816 +run_24,tt,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-1.909e-01, -9.049e-02, 3.946e-02, …]",4.722e+09,0.365,0.730 +run_25,ff,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-1.879e-01, -8.812e-02, 4.047e-02, …]",4.722e+09,0.363,0.726 +run_26,ss,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.136e-01, -1.054e-01, 3.486e-02, …]",4.722e+09,0.373,0.747 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/simulation_summary.md b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/simulation_summary.md new file mode 100644 index 00000000..34c2c715 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/parameters/Frequency/simulation_summary.md @@ -0,0 +1,31 @@ +# Simulation Summary for Freq + +| run | corner | temperature | vdd | time | vo_diff | frequency | amplitude | voltage_swing | +| :-- | -----: | ----------: | --: | ---: | ------: | --------: | --------: | ------------: | +| run_00 | tt | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.111e-01, -1.870e-01, -3.563e-02, …] | 4.722e+09 | 0.382 | 0.763 | +| run_01 | ff | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.099e-01, -1.895e-01, -4.060e-02, …] | 4.722e+09 | 0.377 | 0.754 | +| run_02 | ss | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.163e-01, -1.876e-01, -3.217e-02, …] | 4.722e+09 | 0.390 | 0.780 | +| run_03 | tt | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.915e-01, -1.780e-01, -3.803e-02, …] | 4.722e+09 | 0.357 | 0.715 | +| run_04 | ff | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.909e-01, -1.806e-01, -4.276e-02, …] | 4.722e+09 | 0.353 | 0.706 | +| run_05 | ss | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.959e-01, -1.792e-01, -3.599e-02, …] | 4.722e+09 | 0.366 | 0.732 | +| run_06 | tt | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.689e-01, -1.692e-01, -4.423e-02, …] | 4.722e+09 | 0.319 | 0.639 | +| run_07 | ff | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.694e-01, -1.722e-01, -4.907e-02, …] | 4.722e+09 | 0.315 | 0.629 | +| run_08 | ss | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.723e-01, -1.701e-01, -4.252e-02, …] | 4.722e+09 | 0.330 | 0.659 | +| run_09 | tt | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.623e-01, -1.963e-01, -5.713e-03, …] | 4.722e+09 | 0.421 | 0.843 | +| run_10 | ff | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.622e-01, -1.984e-01, -1.024e-02, …] | 4.722e+09 | 0.418 | 0.836 | +| run_11 | ss | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.669e-01, -1.979e-01, -3.070e-03, …] | 4.722e+09 | 0.429 | 0.857 | +| run_12 | tt | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.388e-01, -1.852e-01, -4.985e-03, …] | 4.722e+09 | 0.401 | 0.803 | +| run_13 | ff | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.407e-01, -1.880e-01, -9.263e-03, …] | 4.722e+09 | 0.398 | 0.796 | +| run_14 | ss | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.446e-01, -1.889e-01, -5.355e-03, …] | 4.722e+09 | 0.409 | 0.817 | +| run_15 | tt | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.832e-01, -1.548e-01, 2.955e-03, …] | 4.722e+09 | 0.371 | 0.743 | +| run_16 | ff | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.908e-01, -1.609e-01, -2.321e-03, …] | 4.722e+09 | 0.368 | 0.736 | +| run_17 | ss | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.858e-01, -1.573e-01, 2.540e-03, …] | 4.722e+09 | 0.379 | 0.758 | +| run_18 | tt | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.214e-01, -1.558e-01, 3.477e-02, …] | 4.722e+09 | 0.418 | 0.836 | +| run_19 | ff | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.163e-01, -1.529e-01, 3.475e-02, …] | 4.722e+09 | 0.415 | 0.830 | +| run_20 | ss | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.365e-01, -1.657e-01, 3.100e-02, …] | 4.722e+09 | 0.426 | 0.853 | +| run_21 | tt | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.748e-01, -1.328e-01, 3.931e-02, …] | 4.722e+09 | 0.400 | 0.799 | +| run_22 | ff | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.701e-01, -1.295e-01, 4.028e-02, …] | 4.722e+09 | 0.397 | 0.793 | +| run_23 | ss | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.957e-01, -1.475e-01, 3.197e-02, …] | 4.722e+09 | 0.408 | 0.816 | +| run_24 | tt | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-1.909e-01, -9.049e-02, 3.946e-02, …] | 4.722e+09 | 0.365 | 0.730 | +| run_25 | ff | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-1.879e-01, -8.812e-02, 4.047e-02, …] | 4.722e+09 | 0.363 | 0.726 | +| run_26 | ss | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.136e-01, -1.054e-01, 3.486e-02, …] | 4.722e+09 | 0.373 | 0.747 | diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/summary.md b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/summary.md new file mode 100644 index 00000000..9d0663f3 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-55-08/summary.md @@ -0,0 +1,11 @@ + +# CACE Summary for CML_divider + +**netlist source**: schematic + +| Parameter | Tool | Result | Min Limit | Min Value | Typ Target | Typ Value | Max Limit | Max Value | Status | +| :------------------- | :------------------- | :-------------- | ---------: | -----------: | ---------: | -----------: | ---------: | -----------: | :------: | +| Freq | ngspice | frequency | 4.3 GHz | 4.722 GHz | 5.0 GHz | 4.722 GHz | 5.2 GHz | 4.722 GHz | Pass ✅ | +| Freq | ngspice | amplitude | 0.2 GHz | 0.000 GHz | 0.4 GHz | 0.000 GHz | 0.6 GHz | 0.000 GHz | Fail ❌ | +| Freq | ngspice | voltage_swing | 0.4 GHz | 0.000 GHz | 0.8 GHz | 0.000 GHz | 1.2 GHz | 0.000 GHz | Fail ❌ | + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/CML_core_tb.sch new file mode 100644 index 00000000..48f6f0bb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=CACE\{vdd\} savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/CML_core_tb.sch new file mode 100644 index 00000000..d286e55c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/CML_core_tb_0.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/CML_core_tb_0.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/CML_core_tb_0.data new file mode 100644 index 00000000..4cb5b399 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/CML_core_tb_0.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.110742996065e-01 + 1.728000000000e-10 -1.869505717284e-01 + 1.828000000000e-10 -3.563037101706e-02 + 1.928000000000e-10 1.056708524540e-01 + 2.028000000000e-10 2.100393804445e-01 + 2.128000000000e-10 2.784249297688e-01 + 2.228000000000e-10 3.224310579067e-01 + 2.328000000000e-10 3.548600651170e-01 + 2.428000000000e-10 3.792482005271e-01 + 2.528000000000e-10 3.740820324036e-01 + 2.628000000000e-10 3.079440308227e-01 + 2.728000000000e-10 1.813826171807e-01 + 2.828000000000e-10 2.923027813912e-02 + 2.928000000000e-10 -1.118282325615e-01 + 3.028000000000e-10 -2.157337068367e-01 + 3.128000000000e-10 -2.829033176767e-01 + 3.228000000000e-10 -3.260714502323e-01 + 3.328000000000e-10 -3.577361248183e-01 + 3.428000000000e-10 -3.819104006606e-01 + 3.528000000000e-10 -3.764730474160e-01 + 3.628000000000e-10 -3.102968359246e-01 + 3.728000000000e-10 -1.832608913655e-01 + 3.828000000000e-10 -3.084931437320e-02 + 3.928000000000e-10 1.106163095990e-01 + 4.028000000000e-10 2.145714971977e-01 + 4.128000000000e-10 2.819937231053e-01 + 4.228000000000e-10 3.251740998910e-01 + 4.328000000000e-10 3.570946969464e-01 + 4.428000000000e-10 3.813004444382e-01 + 4.528000000000e-10 3.761230596147e-01 + 4.628000000000e-10 3.099646053412e-01 + 4.728000000000e-10 1.831473345022e-01 + 4.828000000000e-10 3.069401022130e-02 + 4.928000000000e-10 -1.106258411343e-01 + 5.028000000000e-10 -2.146793601179e-01 + 5.128000000000e-10 -2.820035552799e-01 + 5.228000000000e-10 -3.252909243829e-01 + 5.328000000000e-10 -3.570986338553e-01 + 5.428000000000e-10 -3.813904658256e-01 + 5.528000000000e-10 -3.760889514061e-01 + 5.628000000000e-10 -3.100114096943e-01 + 5.728000000000e-10 -1.830827247194e-01 + 5.828000000000e-10 -3.072480545922e-02 + 5.928000000000e-10 1.106906463094e-01 + 6.028000000000e-10 2.146493837568e-01 + 6.128000000000e-10 2.820610673881e-01 + 6.228000000000e-10 3.252525482967e-01 + 6.328000000000e-10 3.571504708749e-01 + 6.428000000000e-10 3.813516648295e-01 + 6.528000000000e-10 3.761390656738e-01 + 6.628000000000e-10 3.099742259389e-01 + 6.728000000000e-10 1.831331110808e-01 + 6.828000000000e-10 3.068765829312e-02 + 6.928000000000e-10 -1.106445812930e-01 + 7.028000000000e-10 -2.146859050297e-01 + 7.128000000000e-10 -2.820172231683e-01 + 7.228000000000e-10 -3.252905125649e-01 + 7.328000000000e-10 -3.571078709926e-01 + 7.428000000000e-10 -3.813893177320e-01 + 7.528000000000e-10 -3.760986555866e-01 + 7.628000000000e-10 -3.100117776476e-01 + 7.728000000000e-10 -1.830935153198e-01 + 7.828000000000e-10 -3.072484475908e-02 + 7.928000000000e-10 1.106810594907e-01 + 8.028000000000e-10 2.146507312123e-01 + 8.128000000000e-10 2.820530370402e-01 + 8.228000000000e-10 3.252547871433e-01 + 8.328000000000e-10 3.571432636036e-01 + 8.428000000000e-10 3.813547544577e-01 + 8.528000000000e-10 3.761324372121e-01 + 8.628000000000e-10 3.099775475493e-01 + 8.728000000000e-10 1.831274535707e-01 + 8.828000000000e-10 3.069175078476e-02 + 8.928000000000e-10 -1.106491559136e-01 + 9.028000000000e-10 -2.146821655528e-01 + 9.128000000000e-10 -2.820218639330e-01 + 9.228000000000e-10 -3.252864642203e-01 + 9.328000000000e-10 -3.571122611941e-01 + 9.428000000000e-10 -3.813854215351e-01 + 9.528000000000e-10 -3.761024723822e-01 + 9.628000000000e-10 -3.100075395903e-01 + 9.728000000000e-10 -1.830975404653e-01 + 9.828000000000e-10 -3.072097080048e-02 + 9.928000000000e-10 1.106770531472e-01 + 1.000000000000e-09 1.895325033433e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/conditions.yaml new file mode 100644 index 00000000..e969b02e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_00 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/CML_core_tb.sch new file mode 100644 index 00000000..436e0b26 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/CML_core_tb_1.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/CML_core_tb_1.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/CML_core_tb_1.data new file mode 100644 index 00000000..2b8492c0 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/CML_core_tb_1.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.098686002716e-01 + 1.728000000000e-10 -1.894560696460e-01 + 1.828000000000e-10 -4.059695742871e-02 + 1.928000000000e-10 9.940964501315e-02 + 2.028000000000e-10 2.033133834097e-01 + 2.128000000000e-10 2.719620830710e-01 + 2.228000000000e-10 3.163098950569e-01 + 2.328000000000e-10 3.491513279687e-01 + 2.428000000000e-10 3.741332087119e-01 + 2.528000000000e-10 3.700254590965e-01 + 2.628000000000e-10 3.062168938694e-01 + 2.728000000000e-10 1.827341653261e-01 + 2.828000000000e-10 3.280764574542e-02 + 2.928000000000e-10 -1.069769977212e-01 + 3.028000000000e-10 -2.102924295592e-01 + 3.128000000000e-10 -2.774748738503e-01 + 3.228000000000e-10 -3.207751929169e-01 + 3.328000000000e-10 -3.527202709264e-01 + 3.428000000000e-10 -3.774342269369e-01 + 3.528000000000e-10 -3.730540733905e-01 + 3.628000000000e-10 -3.091949741363e-01 + 3.728000000000e-10 -1.851642002832e-01 + 3.828000000000e-10 -3.487935842603e-02 + 3.928000000000e-10 1.053970083053e-01 + 4.028000000000e-10 2.088131472734e-01 + 4.128000000000e-10 2.762908135843e-01 + 4.228000000000e-10 3.196385089100e-01 + 4.328000000000e-10 3.518763575372e-01 + 4.428000000000e-10 3.766558038448e-01 + 4.528000000000e-10 3.725714207051e-01 + 4.628000000000e-10 3.087619830708e-01 + 4.728000000000e-10 1.849833837695e-01 + 4.828000000000e-10 3.467977975354e-02 + 4.928000000000e-10 -1.054340839288e-01 + 5.028000000000e-10 -2.089448612506e-01 + 5.128000000000e-10 -2.763231704068e-01 + 5.228000000000e-10 -3.197791718821e-01 + 5.328000000000e-10 -3.518998659973e-01 + 5.428000000000e-10 -3.767613178326e-01 + 5.528000000000e-10 -3.725445308461e-01 + 5.628000000000e-10 -3.088109693961e-01 + 5.728000000000e-10 -1.849155432321e-01 + 5.828000000000e-10 -3.470667341543e-02 + 5.928000000000e-10 1.055048847061e-01 + 6.028000000000e-10 2.089187592091e-01 + 6.128000000000e-10 2.763849186823e-01 + 6.228000000000e-10 3.197425041182e-01 + 6.328000000000e-10 3.519544114659e-01 + 6.428000000000e-10 3.767237647599e-01 + 6.528000000000e-10 3.725977061828e-01 + 6.628000000000e-10 3.087755728399e-01 + 6.728000000000e-10 1.849692271918e-01 + 6.828000000000e-10 3.467099374312e-02 + 6.928000000000e-10 -1.054562384013e-01 + 7.028000000000e-10 -2.089544093361e-01 + 7.128000000000e-10 -2.763388509076e-01 + 7.228000000000e-10 -3.197800091948e-01 + 7.328000000000e-10 -3.519101110125e-01 + 7.428000000000e-10 -3.767612419697e-01 + 7.528000000000e-10 -3.725558598664e-01 + 7.628000000000e-10 -3.088133010441e-01 + 7.728000000000e-10 -1.849285593480e-01 + 7.828000000000e-10 -3.470862903587e-02 + 7.928000000000e-10 1.054936381918e-01 + 8.028000000000e-10 2.089186129636e-01 + 8.128000000000e-10 2.763755879874e-01 + 8.228000000000e-10 3.197437164625e-01 + 8.328000000000e-10 3.519463479929e-01 + 8.428000000000e-10 3.767260853907e-01 + 8.528000000000e-10 3.725904126785e-01 + 8.628000000000e-10 3.087783440951e-01 + 8.728000000000e-10 1.849632167070e-01 + 8.828000000000e-10 3.467482549783e-02 + 8.928000000000e-10 -1.054610682584e-01 + 9.028000000000e-10 -2.089507846182e-01 + 9.128000000000e-10 -2.763436586770e-01 + 9.228000000000e-10 -3.197760754687e-01 + 9.328000000000e-10 -3.519146615050e-01 + 9.428000000000e-10 -3.767573997120e-01 + 9.528000000000e-10 -3.725597535055e-01 + 9.628000000000e-10 -3.088090609970e-01 + 9.728000000000e-10 -1.849326628321e-01 + 9.828000000000e-10 -3.470475490247e-02 + 9.928000000000e-10 1.054896146910e-01 + 1.000000000000e-09 1.838520001242e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/conditions.yaml new file mode 100644 index 00000000..b62c65a7 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 1 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_01 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/CML_core_tb.sch new file mode 100644 index 00000000..2b654df9 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/CML_core_tb_2.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/CML_core_tb_2.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/CML_core_tb_2.data new file mode 100644 index 00000000..b332ca2c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/CML_core_tb_2.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.162797108708e-01 + 1.728000000000e-10 -1.875883768906e-01 + 1.828000000000e-10 -3.217177564589e-02 + 1.928000000000e-10 1.118453904517e-01 + 2.028000000000e-10 2.178869753922e-01 + 2.128000000000e-10 2.869187499571e-01 + 2.228000000000e-10 3.311831063176e-01 + 2.328000000000e-10 3.637965093552e-01 + 2.428000000000e-10 3.884475585753e-01 + 2.528000000000e-10 3.831703446637e-01 + 2.628000000000e-10 3.149426000366e-01 + 2.728000000000e-10 1.840825734866e-01 + 2.828000000000e-10 2.786370536806e-02 + 2.928000000000e-10 -1.159899232258e-01 + 3.028000000000e-10 -2.217323928122e-01 + 3.128000000000e-10 -2.897841810826e-01 + 3.228000000000e-10 -3.334256487170e-01 + 3.328000000000e-10 -3.654508602495e-01 + 3.428000000000e-10 -3.900407544937e-01 + 3.528000000000e-10 -3.846189534315e-01 + 3.628000000000e-10 -3.164922452622e-01 + 3.728000000000e-10 -1.853182634851e-01 + 3.828000000000e-10 -2.898615964086e-02 + 3.928000000000e-10 1.151710782521e-01 + 4.028000000000e-10 2.209054309263e-01 + 4.128000000000e-10 2.891817322742e-01 + 4.228000000000e-10 3.328077516782e-01 + 4.328000000000e-10 3.650515838921e-01 + 4.428000000000e-10 3.896233583948e-01 + 4.528000000000e-10 3.844074302627e-01 + 4.628000000000e-10 3.162448842688e-01 + 4.728000000000e-10 1.852475068120e-01 + 4.828000000000e-10 2.884623360652e-02 + 4.928000000000e-10 -1.151788252337e-01 + 5.028000000000e-10 -2.210147130581e-01 + 5.128000000000e-10 -2.891872658193e-01 + 5.228000000000e-10 -3.329167168088e-01 + 5.328000000000e-10 -3.650471930963e-01 + 5.428000000000e-10 -3.897100874545e-01 + 5.528000000000e-10 -3.843762306477e-01 + 5.628000000000e-10 -3.163013912188e-01 + 5.728000000000e-10 -1.851950213487e-01 + 5.828000000000e-10 -2.889036873678e-02 + 5.928000000000e-10 1.152312899162e-01 + 6.028000000000e-10 2.209735588305e-01 + 6.128000000000e-10 2.892357416511e-01 + 6.228000000000e-10 3.328707955285e-01 + 6.328000000000e-10 3.650931065031e-01 + 6.428000000000e-10 3.896657987149e-01 + 6.528000000000e-10 3.844215105032e-01 + 6.628000000000e-10 3.162596917265e-01 + 6.728000000000e-10 1.852417351036e-01 + 6.828000000000e-10 2.884992827621e-02 + 6.928000000000e-10 -1.151876679011e-01 + 7.028000000000e-10 -2.210123101756e-01 + 7.128000000000e-10 -2.891938845816e-01 + 7.228000000000e-10 -3.329106389600e-01 + 7.328000000000e-10 -3.650518039465e-01 + 7.428000000000e-10 -3.897047407363e-01 + 7.528000000000e-10 -3.843819858648e-01 + 7.628000000000e-10 -3.162978744015e-01 + 7.728000000000e-10 -1.852023753321e-01 + 7.828000000000e-10 -2.888743165850e-02 + 7.928000000000e-10 1.152240030808e-01 + 8.028000000000e-10 2.209771419031e-01 + 8.128000000000e-10 2.892295361788e-01 + 8.228000000000e-10 3.328747680971e-01 + 8.328000000000e-10 3.650871456099e-01 + 8.428000000000e-10 3.896701175780e-01 + 8.528000000000e-10 3.844156912621e-01 + 8.628000000000e-10 3.162637401476e-01 + 8.728000000000e-10 1.852363586492e-01 + 8.828000000000e-10 2.885434112124e-02 + 8.928000000000e-10 -1.151920978903e-01 + 9.028000000000e-10 -2.210084087345e-01 + 9.128000000000e-10 -2.891984388712e-01 + 9.228000000000e-10 -3.329064027155e-01 + 9.328000000000e-10 -3.650560988894e-01 + 9.428000000000e-10 -3.897007143418e-01 + 9.528000000000e-10 -3.843858173814e-01 + 9.628000000000e-10 -3.162935974835e-01 + 9.728000000000e-10 -1.852064424274e-01 + 9.828000000000e-10 -2.888350905479e-02 + 9.928000000000e-10 1.152199079204e-01 + 1.000000000000e-09 1.954791142410e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/conditions.yaml new file mode 100644 index 00000000..b95c5153 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 2 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_02 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/CML_core_tb.sch new file mode 100644 index 00000000..0bd6852e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/CML_core_tb_3.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/CML_core_tb_3.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/CML_core_tb_3.data new file mode 100644 index 00000000..6dccbfd6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/CML_core_tb_3.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.914571027454e-01 + 1.728000000000e-10 -1.780117263272e-01 + 1.828000000000e-10 -3.802564096594e-02 + 1.928000000000e-10 9.479025580261e-02 + 2.028000000000e-10 1.961220444980e-01 + 2.128000000000e-10 2.643669322964e-01 + 2.228000000000e-10 3.071498875260e-01 + 2.328000000000e-10 3.351667250191e-01 + 2.428000000000e-10 3.529478733093e-01 + 2.528000000000e-10 3.439767079911e-01 + 2.628000000000e-10 2.827109934029e-01 + 2.728000000000e-10 1.683025534555e-01 + 2.828000000000e-10 2.843266655337e-02 + 2.928000000000e-10 -1.036223502576e-01 + 3.028000000000e-10 -2.042863713809e-01 + 3.128000000000e-10 -2.713818104821e-01 + 3.228000000000e-10 -3.132717880322e-01 + 3.328000000000e-10 -3.402903477971e-01 + 3.428000000000e-10 -3.574262556597e-01 + 3.528000000000e-10 -3.476240566503e-01 + 3.628000000000e-10 -2.857203755187e-01 + 3.728000000000e-10 -1.703849236420e-01 + 3.828000000000e-10 -2.994825869373e-02 + 3.928000000000e-10 1.026817167876e-01 + 4.028000000000e-10 2.034750084544e-01 + 4.128000000000e-10 2.707812081585e-01 + 4.228000000000e-10 3.126503625184e-01 + 4.328000000000e-10 3.399043734480e-01 + 4.428000000000e-10 3.571021595385e-01 + 4.528000000000e-10 3.475896983741e-01 + 4.628000000000e-10 2.857411927694e-01 + 4.728000000000e-10 1.706053611761e-01 + 4.828000000000e-10 3.010795594348e-02 + 4.928000000000e-10 -1.024135388755e-01 + 5.028000000000e-10 -2.033190471438e-01 + 5.128000000000e-10 -2.705615444577e-01 + 5.228000000000e-10 -3.125558523975e-01 + 5.328000000000e-10 -3.397330193449e-01 + 5.428000000000e-10 -3.570354300338e-01 + 5.528000000000e-10 -3.474353611027e-01 + 5.628000000000e-10 -2.856876769732e-01 + 5.728000000000e-10 -1.704760895977e-01 + 5.828000000000e-10 -3.008641427314e-02 + 5.928000000000e-10 1.025087996136e-01 + 6.028000000000e-10 2.033209986443e-01 + 6.128000000000e-10 2.706412375819e-01 + 6.228000000000e-10 3.125457575810e-01 + 6.328000000000e-10 3.398008382665e-01 + 6.428000000000e-10 3.570145583479e-01 + 6.528000000000e-10 3.474888598072e-01 + 6.628000000000e-10 2.856551852535e-01 + 6.728000000000e-10 1.705188293935e-01 + 6.828000000000e-10 3.004736925580e-02 + 6.928000000000e-10 -1.024728514478e-01 + 7.028000000000e-10 -2.033602328622e-01 + 7.128000000000e-10 -2.706061106716e-01 + 7.228000000000e-10 -3.125843283316e-01 + 7.328000000000e-10 -3.397655433228e-01 + 7.428000000000e-10 -3.570523646632e-01 + 7.528000000000e-10 -3.474554820929e-01 + 7.628000000000e-10 -2.856929985560e-01 + 7.728000000000e-10 -1.704859799650e-01 + 7.828000000000e-10 -3.008383757896e-02 + 7.928000000000e-10 1.025039608177e-01 + 8.028000000000e-10 2.033261442763e-01 + 8.128000000000e-10 2.706371082838e-01 + 8.228000000000e-10 3.125504649737e-01 + 8.328000000000e-10 3.397966066528e-01 + 8.428000000000e-10 3.570198965640e-01 + 8.528000000000e-10 3.474857187206e-01 + 8.628000000000e-10 2.856614378232e-01 + 8.728000000000e-10 1.705164607562e-01 + 8.828000000000e-10 3.005354621749e-02 + 8.928000000000e-10 -1.024749769036e-01 + 9.028000000000e-10 -2.033548454455e-01 + 9.128000000000e-10 -2.706087008930e-01 + 9.228000000000e-10 -3.125792630790e-01 + 9.328000000000e-10 -3.397683901773e-01 + 9.428000000000e-10 -3.570478314069e-01 + 9.528000000000e-10 -3.474583427153e-01 + 9.628000000000e-10 -2.856887110961e-01 + 9.728000000000e-10 -1.704892548593e-01 + 9.828000000000e-10 -3.008001356704e-02 + 9.928000000000e-10 1.025005080892e-01 + 1.000000000000e-09 1.786649040194e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/conditions.yaml new file mode 100644 index 00000000..c908abbc --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 3 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_03 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/CML_core_tb.sch new file mode 100644 index 00000000..454cb61a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/CML_core_tb_4.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/CML_core_tb_4.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/CML_core_tb_4.data new file mode 100644 index 00000000..3efc8a54 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/CML_core_tb_4.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.908886906683e-01 + 1.728000000000e-10 -1.805890382926e-01 + 1.828000000000e-10 -4.276329247682e-02 + 1.928000000000e-10 8.882407595099e-02 + 2.028000000000e-10 1.894983505466e-01 + 2.128000000000e-10 2.576242567207e-01 + 2.228000000000e-10 3.005212718886e-01 + 2.328000000000e-10 3.289546768723e-01 + 2.428000000000e-10 3.474240530436e-01 + 2.528000000000e-10 3.394794629215e-01 + 2.628000000000e-10 2.802266193594e-01 + 2.728000000000e-10 1.685520573893e-01 + 2.828000000000e-10 3.081792474830e-02 + 2.928000000000e-10 -9.985913249602e-02 + 3.028000000000e-10 -1.996535082954e-01 + 3.128000000000e-10 -2.663519845580e-01 + 3.228000000000e-10 -3.081166100610e-01 + 3.328000000000e-10 -3.353557582557e-01 + 3.428000000000e-10 -3.530339682910e-01 + 3.528000000000e-10 -3.441234226063e-01 + 3.628000000000e-10 -2.840838930007e-01 + 3.728000000000e-10 -1.712890179908e-01 + 3.828000000000e-10 -3.280692441870e-02 + 3.928000000000e-10 9.858702888345e-02 + 4.028000000000e-10 1.985844458095e-01 + 4.128000000000e-10 2.655374220709e-01 + 4.228000000000e-10 3.073092043222e-01 + 4.328000000000e-10 3.348254361967e-01 + 4.428000000000e-10 3.526065806553e-01 + 4.528000000000e-10 3.440384505411e-01 + 4.628000000000e-10 2.840943593119e-01 + 4.728000000000e-10 1.715352376725e-01 + 4.828000000000e-10 3.300625747524e-02 + 4.928000000000e-10 -9.826793525126e-02 + 5.028000000000e-10 -1.983826392696e-01 + 5.128000000000e-10 -2.652748957302e-01 + 5.228000000000e-10 -3.071819372703e-01 + 5.328000000000e-10 -3.346211766496e-01 + 5.428000000000e-10 -3.525115401756e-01 + 5.528000000000e-10 -3.438520776438e-01 + 5.628000000000e-10 -2.840132934403e-01 + 5.728000000000e-10 -1.713783534881e-01 + 5.828000000000e-10 -3.296528839742e-02 + 5.928000000000e-10 9.838210726041e-02 + 6.028000000000e-10 1.983970962128e-01 + 6.128000000000e-10 2.653685996210e-01 + 6.228000000000e-10 3.071805271474e-01 + 6.328000000000e-10 3.346994451143e-01 + 6.428000000000e-10 3.524959527178e-01 + 6.528000000000e-10 3.439124816552e-01 + 6.628000000000e-10 2.839825148385e-01 + 6.728000000000e-10 1.714247364616e-01 + 6.828000000000e-10 3.292536702304e-02 + 6.928000000000e-10 -9.834444145178e-02 + 7.028000000000e-10 -1.984381153623e-01 + 7.128000000000e-10 -2.653318964793e-01 + 7.228000000000e-10 -3.072207693265e-01 + 7.328000000000e-10 -3.346627011511e-01 + 7.428000000000e-10 -3.525355719541e-01 + 7.528000000000e-10 -3.438780517049e-01 + 7.628000000000e-10 -2.840226095914e-01 + 7.728000000000e-10 -1.713910964736e-01 + 7.828000000000e-10 -3.296406429130e-02 + 7.928000000000e-10 9.837645950128e-02 + 8.028000000000e-10 1.984019833998e-01 + 8.128000000000e-10 2.653640104122e-01 + 8.228000000000e-10 3.071850636337e-01 + 8.328000000000e-10 3.346949515146e-01 + 8.428000000000e-10 3.525014052751e-01 + 8.528000000000e-10 3.439095067618e-01 + 8.628000000000e-10 2.839893402731e-01 + 8.728000000000e-10 1.714228569780e-01 + 8.828000000000e-10 3.293222880403e-02 + 8.928000000000e-10 -9.834616516704e-02 + 9.028000000000e-10 -1.984321208293e-01 + 9.128000000000e-10 -2.653341991167e-01 + 9.228000000000e-10 -3.072152380466e-01 + 9.328000000000e-10 -3.346653803170e-01 + 9.428000000000e-10 -3.525306496503e-01 + 9.528000000000e-10 -3.438807929682e-01 + 9.628000000000e-10 -2.840179937834e-01 + 9.728000000000e-10 -1.713943425416e-01 + 9.828000000000e-10 -3.296001530074e-02 + 9.928000000000e-10 9.837298926970e-02 + 1.000000000000e-09 1.738955459088e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/conditions.yaml new file mode 100644 index 00000000..96252d8e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 4 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_04 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/CML_core_tb.sch new file mode 100644 index 00000000..8c843a9b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/CML_core_tb_5.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/CML_core_tb_5.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/CML_core_tb_5.data new file mode 100644 index 00000000..0cc77d23 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/CML_core_tb_5.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.958574299710e-01 + 1.728000000000e-10 -1.791897212785e-01 + 1.828000000000e-10 -3.599075048614e-02 + 1.928000000000e-10 9.946703268478e-02 + 2.028000000000e-10 2.032502871016e-01 + 2.128000000000e-10 2.733994094958e-01 + 2.228000000000e-10 3.172845988123e-01 + 2.328000000000e-10 3.455609123691e-01 + 2.428000000000e-10 3.630923957132e-01 + 2.528000000000e-10 3.534419450967e-01 + 2.628000000000e-10 2.903663934708e-01 + 2.728000000000e-10 1.726743312860e-01 + 2.828000000000e-10 2.930291139472e-02 + 2.928000000000e-10 -1.057514312075e-01 + 3.028000000000e-10 -2.091913834589e-01 + 3.128000000000e-10 -2.784696434768e-01 + 3.228000000000e-10 -3.216873931074e-01 + 3.328000000000e-10 -3.491870426412e-01 + 3.428000000000e-10 -3.662894191498e-01 + 3.528000000000e-10 -3.560374131806e-01 + 3.628000000000e-10 -2.925719059469e-01 + 3.728000000000e-10 -1.742159787839e-01 + 3.828000000000e-10 -3.049391935212e-02 + 3.928000000000e-10 1.049756016137e-01 + 4.028000000000e-10 2.084672065617e-01 + 4.128000000000e-10 2.779301238417e-01 + 4.228000000000e-10 3.211180618030e-01 + 4.328000000000e-10 3.488255023686e-01 + 4.428000000000e-10 3.659572542624e-01 + 4.528000000000e-10 3.559493947967e-01 + 4.628000000000e-10 2.925058094407e-01 + 4.728000000000e-10 1.743267017008e-01 + 4.828000000000e-10 3.054314172764e-02 + 4.928000000000e-10 -1.048175245910e-01 + 5.028000000000e-10 -2.084096499031e-01 + 5.128000000000e-10 -2.777998408986e-01 + 5.228000000000e-10 -3.210985617265e-01 + 5.328000000000e-10 -3.487226120056e-01 + 5.428000000000e-10 -3.659481451181e-01 + 5.528000000000e-10 -3.558482598240e-01 + 5.628000000000e-10 -2.924942070749e-01 + 5.728000000000e-10 -1.742324941843e-01 + 5.828000000000e-10 -3.054486718364e-02 + 5.928000000000e-10 1.048934295445e-01 + 6.028000000000e-10 2.083991544976e-01 + 6.128000000000e-10 2.778660140822e-01 + 6.228000000000e-10 3.210794561497e-01 + 6.328000000000e-10 3.487805773205e-01 + 6.428000000000e-10 3.659226785140e-01 + 6.528000000000e-10 3.558970058340e-01 + 6.628000000000e-10 2.924624137185e-01 + 6.728000000000e-10 1.742748110039e-01 + 6.828000000000e-10 3.050920657876e-02 + 6.928000000000e-10 -1.048562048812e-01 + 7.028000000000e-10 -2.084343791218e-01 + 7.128000000000e-10 -2.778299623633e-01 + 7.228000000000e-10 -3.211147582115e-01 + 7.328000000000e-10 -3.487447461690e-01 + 7.428000000000e-10 -3.659575085549e-01 + 7.528000000000e-10 -3.558632428052e-01 + 7.628000000000e-10 -2.924972481137e-01 + 7.728000000000e-10 -1.742418088753e-01 + 7.828000000000e-10 -3.054328720193e-02 + 7.928000000000e-10 1.048870377838e-01 + 8.028000000000e-10 2.084024115537e-01 + 8.128000000000e-10 2.778603942564e-01 + 8.228000000000e-10 3.210827582845e-01 + 8.328000000000e-10 3.487751488045e-01 + 8.428000000000e-10 3.659266824704e-01 + 8.528000000000e-10 3.558925702991e-01 + 8.628000000000e-10 2.924671830422e-01 + 8.728000000000e-10 1.742711856894e-01 + 8.828000000000e-10 3.051417003050e-02 + 8.928000000000e-10 -1.048591994973e-01 + 9.028000000000e-10 -2.084299430076e-01 + 9.128000000000e-10 -2.778331783696e-01 + 9.228000000000e-10 -3.211104359655e-01 + 9.328000000000e-10 -3.487480244246e-01 + 9.428000000000e-10 -3.659535267111e-01 + 9.528000000000e-10 -3.558663548813e-01 + 9.628000000000e-10 -2.924933270906e-01 + 9.728000000000e-10 -1.742451324195e-01 + 9.828000000000e-10 -3.053963678018e-02 + 9.928000000000e-10 1.048836196344e-01 + 1.000000000000e-09 1.830293824662e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/conditions.yaml new file mode 100644 index 00000000..99793cf5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 5 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_05 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/CML_core_tb.sch new file mode 100644 index 00000000..3b8f1fb1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/CML_core_tb_6.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/CML_core_tb_6.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/CML_core_tb_6.data new file mode 100644 index 00000000..38ffd8bf --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/CML_core_tb_6.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.689355033953e-01 + 1.728000000000e-10 -1.691728954892e-01 + 1.828000000000e-10 -4.423302134033e-02 + 1.928000000000e-10 7.663444207075e-02 + 2.028000000000e-10 1.714764750752e-01 + 2.128000000000e-10 2.368219567798e-01 + 2.228000000000e-10 2.772768132445e-01 + 2.328000000000e-10 3.013675537348e-01 + 2.428000000000e-10 3.140706479520e-01 + 2.528000000000e-10 3.038549886105e-01 + 2.628000000000e-10 2.508404086347e-01 + 2.728000000000e-10 1.528360605683e-01 + 2.828000000000e-10 3.040034809293e-02 + 2.928000000000e-10 -8.785381094258e-02 + 3.028000000000e-10 -1.808734961109e-01 + 3.128000000000e-10 -2.445795528199e-01 + 3.228000000000e-10 -2.838354337528e-01 + 3.328000000000e-10 -3.065800962400e-01 + 3.428000000000e-10 -3.181767360109e-01 + 3.528000000000e-10 -3.065752663659e-01 + 3.628000000000e-10 -2.523878800401e-01 + 3.728000000000e-10 -1.531173668737e-01 + 3.828000000000e-10 -2.992055538556e-02 + 3.928000000000e-10 8.900435641641e-02 + 4.028000000000e-10 1.821756238512e-01 + 4.128000000000e-10 2.460123650690e-01 + 4.228000000000e-10 2.851182310100e-01 + 4.328000000000e-10 3.079291995556e-01 + 4.428000000000e-10 3.194129911462e-01 + 4.528000000000e-10 3.078915366323e-01 + 4.628000000000e-10 2.535144344421e-01 + 4.728000000000e-10 1.541542026196e-01 + 4.828000000000e-10 3.063651583090e-02 + 4.928000000000e-10 -8.839161491074e-02 + 5.028000000000e-10 -1.817999659778e-01 + 5.128000000000e-10 -2.456456661989e-01 + 5.228000000000e-10 -2.849195350591e-01 + 5.328000000000e-10 -3.077091828990e-01 + 5.428000000000e-10 -3.193505374448e-01 + 5.528000000000e-10 -3.078081521678e-01 + 5.628000000000e-10 -2.535787813503e-01 + 5.728000000000e-10 -1.541764927596e-01 + 5.828000000000e-10 -3.077048554081e-02 + 5.928000000000e-10 8.832790620553e-02 + 6.028000000000e-10 1.816551916875e-01 + 6.128000000000e-10 2.455879975104e-01 + 6.228000000000e-10 2.847911932982e-01 + 6.328000000000e-10 3.076677363016e-01 + 6.428000000000e-10 3.192371229053e-01 + 6.528000000000e-10 3.077778412262e-01 + 6.628000000000e-10 2.534819327505e-01 + 6.728000000000e-10 1.541683138663e-01 + 6.828000000000e-10 3.070155435378e-02 + 6.928000000000e-10 -8.831320560130e-02 + 7.028000000000e-10 -1.817038543937e-01 + 7.128000000000e-10 -2.455619958387e-01 + 7.228000000000e-10 -2.848320347671e-01 + 7.328000000000e-10 -3.076358698550e-01 + 7.428000000000e-10 -3.192710667609e-01 + 7.528000000000e-10 -3.077409972388e-01 + 7.628000000000e-10 -2.535098012890e-01 + 7.728000000000e-10 -1.541282589474e-01 + 7.828000000000e-10 -3.072672689244e-02 + 7.928000000000e-10 8.835148526653e-02 + 8.028000000000e-10 1.816795669555e-01 + 8.128000000000e-10 2.455984246601e-01 + 8.228000000000e-10 2.848062931006e-01 + 8.328000000000e-10 3.076705916890e-01 + 8.428000000000e-10 3.192450073559e-01 + 8.528000000000e-10 3.077736319697e-01 + 8.628000000000e-10 2.534831121829e-01 + 8.728000000000e-10 1.541590953584e-01 + 8.828000000000e-10 3.069946612700e-02 + 8.928000000000e-10 -8.832341199891e-02 + 9.028000000000e-10 -1.817063952021e-01 + 9.128000000000e-10 -2.455714256322e-01 + 9.228000000000e-10 -2.848333922463e-01 + 9.328000000000e-10 -3.076440936715e-01 + 9.428000000000e-10 -3.192716274515e-01 + 9.528000000000e-10 -3.077481608676e-01 + 9.628000000000e-10 -2.535093614867e-01 + 9.728000000000e-10 -1.541340765567e-01 + 9.828000000000e-10 -3.072486745089e-02 + 9.928000000000e-10 8.834711873249e-02 + 1.000000000000e-09 1.586239577417e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/conditions.yaml new file mode 100644 index 00000000..670ec0c1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 6 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_06 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/CML_core_tb.sch new file mode 100644 index 00000000..437739ac --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/CML_core_tb_7.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/CML_core_tb_7.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/CML_core_tb_7.data new file mode 100644 index 00000000..1cfe87b5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/CML_core_tb_7.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.694477874818e-01 + 1.728000000000e-10 -1.721829739194e-01 + 1.828000000000e-10 -4.906833766415e-02 + 1.928000000000e-10 7.069743134728e-02 + 2.028000000000e-10 1.648418946330e-01 + 2.128000000000e-10 2.298765389610e-01 + 2.228000000000e-10 2.702802052070e-01 + 2.328000000000e-10 2.947129455777e-01 + 2.428000000000e-10 3.081296602318e-01 + 2.528000000000e-10 2.990063012040e-01 + 2.628000000000e-10 2.478884705263e-01 + 2.728000000000e-10 1.524230846398e-01 + 2.828000000000e-10 3.216725009037e-02 + 2.928000000000e-10 -8.452884553171e-02 + 3.028000000000e-10 -1.764495371150e-01 + 3.128000000000e-10 -2.394951663999e-01 + 3.228000000000e-10 -2.784178156025e-01 + 3.328000000000e-10 -3.012580547427e-01 + 3.428000000000e-10 -3.133510931360e-01 + 3.528000000000e-10 -3.026055002423e-01 + 3.628000000000e-10 -2.500554574282e-01 + 3.728000000000e-10 -1.530444893437e-01 + 3.828000000000e-10 -3.179895766292e-02 + 3.928000000000e-10 8.573594509971e-02 + 4.028000000000e-10 1.778922744476e-01 + 4.128000000000e-10 2.411102030583e-01 + 4.228000000000e-10 2.798967112063e-01 + 4.328000000000e-10 3.028156837380e-01 + 4.428000000000e-10 3.148075876296e-01 + 4.528000000000e-10 3.041758344829e-01 + 4.628000000000e-10 2.514478797306e-01 + 4.728000000000e-10 1.543354303295e-01 + 4.828000000000e-10 3.272908827542e-02 + 4.928000000000e-10 -8.494488064942e-02 + 5.028000000000e-10 -1.773750790235e-01 + 5.128000000000e-10 -2.406241070550e-01 + 5.228000000000e-10 -2.796032327906e-01 + 5.328000000000e-10 -3.025154625175e-01 + 5.428000000000e-10 -3.146850050735e-01 + 5.528000000000e-10 -3.040456856306e-01 + 5.628000000000e-10 -2.514865398019e-01 + 5.728000000000e-10 -1.543455010081e-01 + 5.828000000000e-10 -3.286780649422e-02 + 5.928000000000e-10 8.487071769529e-02 + 6.028000000000e-10 1.772120847555e-01 + 6.128000000000e-10 2.405506532865e-01 + 6.228000000000e-10 2.794557736074e-01 + 6.328000000000e-10 3.024581955274e-01 + 6.428000000000e-10 3.145521515255e-01 + 6.528000000000e-10 3.039990633934e-01 + 6.628000000000e-10 2.513709142203e-01 + 6.728000000000e-10 1.543241408079e-01 + 6.828000000000e-10 3.278555364704e-02 + 6.928000000000e-10 -8.486327141666e-02 + 7.028000000000e-10 -1.772689800248e-01 + 7.128000000000e-10 -2.405282060865e-01 + 7.228000000000e-10 -2.795021370136e-01 + 7.328000000000e-10 -3.024278022377e-01 + 7.428000000000e-10 -3.145896170200e-01 + 7.528000000000e-10 -3.039617953787e-01 + 7.628000000000e-10 -2.514004690324e-01 + 7.728000000000e-10 -1.542820043229e-01 + 7.828000000000e-10 -3.281110337775e-02 + 7.928000000000e-10 8.490436306023e-02 + 8.028000000000e-10 1.772446330839e-01 + 8.128000000000e-10 2.405674335146e-01 + 8.228000000000e-10 2.794761963085e-01 + 8.328000000000e-10 3.024650976088e-01 + 8.428000000000e-10 3.145632644585e-01 + 8.528000000000e-10 3.039968961590e-01 + 8.628000000000e-10 2.513733111446e-01 + 8.728000000000e-10 1.543150179356e-01 + 8.828000000000e-10 3.278304586331e-02 + 8.928000000000e-10 -8.487456857602e-02 + 9.028000000000e-10 -1.772725618584e-01 + 9.128000000000e-10 -2.405389250041e-01 + 9.228000000000e-10 -2.795045102279e-01 + 9.328000000000e-10 -3.024372521320e-01 + 9.428000000000e-10 -3.145911572553e-01 + 9.528000000000e-10 -3.039701598993e-01 + 9.628000000000e-10 -2.514009218164e-01 + 9.728000000000e-10 -1.542887967264e-01 + 9.828000000000e-10 -3.280979517783e-02 + 9.928000000000e-10 8.489941508642e-02 + 1.000000000000e-09 1.544118489485e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/conditions.yaml new file mode 100644 index 00000000..adbbf12b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 7 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_07 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/CML_core_tb.sch new file mode 100644 index 00000000..da7eb663 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/CML_core_tb_8.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/CML_core_tb_8.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/CML_core_tb_8.data new file mode 100644 index 00000000..b4ed17dd --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/CML_core_tb_8.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.722799425151e-01 + 1.728000000000e-10 -1.701277707773e-01 + 1.828000000000e-10 -4.252496989706e-02 + 1.928000000000e-10 8.092536896213e-02 + 2.028000000000e-10 1.785199933375e-01 + 2.128000000000e-10 2.463984181452e-01 + 2.228000000000e-10 2.885755113271e-01 + 2.328000000000e-10 3.131967480955e-01 + 2.428000000000e-10 3.255285716483e-01 + 2.528000000000e-10 3.143820454109e-01 + 2.628000000000e-10 2.595824958850e-01 + 2.728000000000e-10 1.585585813323e-01 + 2.828000000000e-10 3.254606172598e-02 + 2.928000000000e-10 -8.921916265210e-02 + 3.028000000000e-10 -1.857143058967e-01 + 3.128000000000e-10 -2.524588707093e-01 + 3.228000000000e-10 -2.937876617757e-01 + 3.328000000000e-10 -3.173655773168e-01 + 3.428000000000e-10 -3.288566343508e-01 + 3.528000000000e-10 -3.166123605828e-01 + 3.628000000000e-10 -2.609360611345e-01 + 3.728000000000e-10 -1.589355414621e-01 + 3.828000000000e-10 -3.237621747627e-02 + 3.928000000000e-10 8.990939637816e-02 + 4.028000000000e-10 1.864994737191e-01 + 4.128000000000e-10 2.533636311879e-01 + 4.228000000000e-10 2.945633129641e-01 + 4.328000000000e-10 3.182197832362e-01 + 4.428000000000e-10 3.296245618008e-01 + 4.528000000000e-10 3.174841059207e-01 + 4.628000000000e-10 2.616780558587e-01 + 4.728000000000e-10 1.596622360522e-01 + 4.828000000000e-10 3.287681921596e-02 + 4.928000000000e-10 -8.943999963453e-02 + 5.028000000000e-10 -1.862066308093e-01 + 5.128000000000e-10 -2.530527908612e-01 + 5.228000000000e-10 -2.943931136832e-01 + 5.328000000000e-10 -3.180152021024e-01 + 5.428000000000e-10 -3.295545667130e-01 + 5.528000000000e-10 -3.173812952412e-01 + 5.628000000000e-10 -2.617027726155e-01 + 5.728000000000e-10 -1.596411992093e-01 + 5.828000000000e-10 -3.295895028258e-02 + 5.928000000000e-10 8.942267434718e-02 + 6.028000000000e-10 1.861105403656e-01 + 6.128000000000e-10 2.530344325895e-01 + 6.228000000000e-10 2.943051008579e-01 + 6.328000000000e-10 3.180051485103e-01 + 6.428000000000e-10 3.294737915539e-01 + 6.528000000000e-10 3.173744791022e-01 + 6.628000000000e-10 2.616291881364e-01 + 6.728000000000e-10 1.596450333001e-01 + 6.828000000000e-10 3.290088244348e-02 + 6.928000000000e-10 -8.940659470005e-02 + 7.028000000000e-10 -1.861562133447e-01 + 7.128000000000e-10 -2.530116656482e-01 + 7.228000000000e-10 -2.943454309811e-01 + 7.328000000000e-10 -3.179780561670e-01 + 7.428000000000e-10 -3.295087969733e-01 + 7.528000000000e-10 -3.173438661274e-01 + 7.628000000000e-10 -2.616591955397e-01 + 7.728000000000e-10 -1.596115565426e-01 + 7.828000000000e-10 -3.292790237402e-02 + 7.928000000000e-10 8.943927261705e-02 + 8.028000000000e-10 1.861310420114e-01 + 8.128000000000e-10 2.530433655174e-01 + 8.228000000000e-10 2.943195630770e-01 + 8.328000000000e-10 3.180088285378e-01 + 8.428000000000e-10 3.294832118435e-01 + 8.528000000000e-10 3.173732295072e-01 + 8.628000000000e-10 2.616337486722e-01 + 8.728000000000e-10 1.596399004289e-01 + 8.828000000000e-10 3.290244884503e-02 + 8.928000000000e-10 -8.941301350766e-02 + 9.028000000000e-10 -1.861557185261e-01 + 9.128000000000e-10 -2.530180139920e-01 + 9.228000000000e-10 -2.943444772306e-01 + 9.328000000000e-10 -3.179838696148e-01 + 9.428000000000e-10 -3.295076633013e-01 + 9.528000000000e-10 -3.173492560727e-01 + 9.628000000000e-10 -2.616577755083e-01 + 9.728000000000e-10 -1.596163947717e-01 + 9.828000000000e-10 -3.292583900074e-02 + 9.928000000000e-10 8.943518431692e-02 + 1.000000000000e-09 1.621529465729e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/conditions.yaml new file mode 100644 index 00000000..26daba71 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 8 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_08 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/CML_core_tb.sch new file mode 100644 index 00000000..1a87694e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/CML_core_tb_9.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/CML_core_tb_9.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/CML_core_tb_9.data new file mode 100644 index 00000000..6b24d1d6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/CML_core_tb_9.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.622644182692e-01 + 1.728000000000e-10 -1.962653738736e-01 + 1.828000000000e-10 -5.712895575235e-03 + 1.928000000000e-10 1.510345047594e-01 + 2.028000000000e-10 2.432775412534e-01 + 2.128000000000e-10 2.772000132926e-01 + 2.228000000000e-10 3.161630086256e-01 + 2.328000000000e-10 3.654121904616e-01 + 2.428000000000e-10 4.070200809677e-01 + 2.528000000000e-10 4.211809118313e-01 + 2.628000000000e-10 3.552666659990e-01 + 2.728000000000e-10 1.954111420719e-01 + 2.828000000000e-10 7.499275151763e-03 + 2.928000000000e-10 -1.488912332472e-01 + 3.028000000000e-10 -2.420325529570e-01 + 3.128000000000e-10 -2.768171400503e-01 + 3.228000000000e-10 -3.164103191401e-01 + 3.328000000000e-10 -3.656815561297e-01 + 3.428000000000e-10 -4.072561733660e-01 + 3.528000000000e-10 -4.210637971044e-01 + 3.628000000000e-10 -3.548415521036e-01 + 3.728000000000e-10 -1.946286859654e-01 + 3.828000000000e-10 -6.746438981043e-03 + 3.928000000000e-10 1.496127957227e-01 + 4.028000000000e-10 2.425057762271e-01 + 4.128000000000e-10 2.772590268750e-01 + 4.228000000000e-10 3.167075169816e-01 + 4.328000000000e-10 3.660182242119e-01 + 4.428000000000e-10 4.074726111052e-01 + 4.528000000000e-10 4.212975956202e-01 + 4.628000000000e-10 3.549573822535e-01 + 4.728000000000e-10 1.947835560361e-01 + 4.828000000000e-10 6.801482567115e-03 + 4.928000000000e-10 -1.495086456760e-01 + 5.028000000000e-10 -2.424863730465e-01 + 5.128000000000e-10 -2.771744431737e-01 + 5.228000000000e-10 -3.166940000076e-01 + 5.328000000000e-10 -3.659398771497e-01 + 5.428000000000e-10 -4.074689465730e-01 + 5.528000000000e-10 -4.212394549000e-01 + 5.628000000000e-10 -3.549741510035e-01 + 5.728000000000e-10 -1.947436351784e-01 + 5.828000000000e-10 -6.830080160870e-03 + 5.928000000000e-10 1.495407150967e-01 + 6.028000000000e-10 2.424570295697e-01 + 6.128000000000e-10 2.772066160972e-01 + 6.228000000000e-10 3.166654934082e-01 + 6.328000000000e-10 3.659723864247e-01 + 6.428000000000e-10 4.074416211051e-01 + 6.528000000000e-10 4.212697301261e-01 + 6.628000000000e-10 3.549467093259e-01 + 6.728000000000e-10 1.947718238583e-01 + 6.828000000000e-10 6.800951177238e-03 + 6.928000000000e-10 -1.495148390529e-01 + 7.028000000000e-10 -2.424852043575e-01 + 7.128000000000e-10 -2.771809105751e-01 + 7.228000000000e-10 -3.166930947909e-01 + 7.328000000000e-10 -3.659459016360e-01 + 7.428000000000e-10 -4.074677461547e-01 + 7.528000000000e-10 -4.212442717757e-01 + 7.628000000000e-10 -3.549717520551e-01 + 7.728000000000e-10 -1.947463263521e-01 + 7.828000000000e-10 -6.825916545420e-03 + 7.928000000000e-10 1.495385751436e-01 + 8.028000000000e-10 2.424609931904e-01 + 8.128000000000e-10 2.772040406871e-01 + 8.228000000000e-10 3.166687905139e-01 + 8.328000000000e-10 3.659694951712e-01 + 8.428000000000e-10 4.074447010218e-01 + 8.528000000000e-10 4.212671408417e-01 + 8.628000000000e-10 3.549498827484e-01 + 8.728000000000e-10 1.947689363825e-01 + 8.828000000000e-10 6.803756635994e-03 + 8.928000000000e-10 -1.495176738691e-01 + 9.028000000000e-10 -2.424825342063e-01 + 9.128000000000e-10 -2.771836734306e-01 + 9.228000000000e-10 -3.166902103892e-01 + 9.328000000000e-10 -3.659485359213e-01 + 9.428000000000e-10 -4.074650210911e-01 + 9.528000000000e-10 -4.212469657833e-01 + 9.628000000000e-10 -3.549694058275e-01 + 9.728000000000e-10 -1.947487958951e-01 + 9.828000000000e-10 -6.823236278537e-03 + 9.928000000000e-10 1.495363177485e-01 + 1.000000000000e-09 2.250264100511e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/conditions.yaml new file mode 100644 index 00000000..a359e7f5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 9 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_09 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/CML_core_tb.sch new file mode 100644 index 00000000..53f7e781 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/CML_core_tb_10.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/CML_core_tb_10.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/CML_core_tb_10.data new file mode 100644 index 00000000..f64d27bb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/CML_core_tb_10.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.621881537650e-01 + 1.728000000000e-10 -1.984429143572e-01 + 1.828000000000e-10 -1.024381876325e-02 + 1.928000000000e-10 1.456486678579e-01 + 2.028000000000e-10 2.379497773075e-01 + 2.128000000000e-10 2.714724605336e-01 + 2.228000000000e-10 3.108042897090e-01 + 2.328000000000e-10 3.600441003378e-01 + 2.428000000000e-10 4.020596908788e-01 + 2.528000000000e-10 4.176332246346e-01 + 2.628000000000e-10 3.534480183483e-01 + 2.728000000000e-10 1.957884716864e-01 + 2.828000000000e-10 1.048070619246e-02 + 2.928000000000e-10 -1.446967472000e-01 + 3.028000000000e-10 -2.375576326508e-01 + 3.128000000000e-10 -2.717915022579e-01 + 3.228000000000e-10 -3.116603869888e-01 + 3.328000000000e-10 -3.608573425706e-01 + 3.428000000000e-10 -4.027490548925e-01 + 3.528000000000e-10 -4.178578104758e-01 + 3.628000000000e-10 -3.532507313188e-01 + 3.728000000000e-10 -1.951536666098e-01 + 3.828000000000e-10 -9.813336101525e-03 + 3.928000000000e-10 1.453604720604e-01 + 4.028000000000e-10 2.379857130154e-01 + 4.128000000000e-10 2.721818635676e-01 + 4.228000000000e-10 3.119088225778e-01 + 4.328000000000e-10 3.611475798924e-01 + 4.428000000000e-10 4.029304727738e-01 + 4.528000000000e-10 4.180700216423e-01 + 4.628000000000e-10 3.533627988360e-01 + 4.728000000000e-10 1.953149158213e-01 + 4.828000000000e-10 9.881134950277e-03 + 4.928000000000e-10 -1.452466419838e-01 + 5.028000000000e-10 -2.379576224969e-01 + 5.128000000000e-10 -2.720935242692e-01 + 5.228000000000e-10 -3.118909714313e-01 + 5.328000000000e-10 -3.610674239906e-01 + 5.428000000000e-10 -4.029229661263e-01 + 5.528000000000e-10 -4.180098057029e-01 + 5.628000000000e-10 -3.533753449283e-01 + 5.728000000000e-10 -1.952727841385e-01 + 5.828000000000e-10 -9.906008920915e-03 + 5.928000000000e-10 1.452800172029e-01 + 6.028000000000e-10 2.379306740359e-01 + 6.128000000000e-10 2.721261300904e-01 + 6.228000000000e-10 3.118646486801e-01 + 6.328000000000e-10 3.611003417151e-01 + 6.428000000000e-10 4.028972890619e-01 + 6.528000000000e-10 4.180401129989e-01 + 6.628000000000e-10 3.533488930459e-01 + 6.728000000000e-10 1.953007885397e-01 + 6.828000000000e-10 9.878072761317e-03 + 6.928000000000e-10 -1.452545395230e-01 + 7.028000000000e-10 -2.379578117562e-01 + 7.128000000000e-10 -2.721008877684e-01 + 7.228000000000e-10 -3.118914026492e-01 + 7.328000000000e-10 -3.610744602697e-01 + 7.428000000000e-10 -4.029226014194e-01 + 7.528000000000e-10 -4.180151483436e-01 + 7.628000000000e-10 -3.533732531474e-01 + 7.728000000000e-10 -1.952759500525e-01 + 7.828000000000e-10 -9.902411226855e-03 + 7.928000000000e-10 1.452776462046e-01 + 8.028000000000e-10 2.379341379884e-01 + 8.128000000000e-10 2.721234101956e-01 + 8.228000000000e-10 3.118677116052e-01 + 8.328000000000e-10 3.610975209728e-01 + 8.428000000000e-10 4.029000595077e-01 + 8.528000000000e-10 4.180375331400e-01 + 8.628000000000e-10 3.533517750284e-01 + 8.728000000000e-10 1.952981248182e-01 + 8.828000000000e-10 9.880873061622e-03 + 8.928000000000e-10 -1.452571579233e-01 + 9.028000000000e-10 -2.379551078725e-01 + 9.128000000000e-10 -2.721034614056e-01 + 9.228000000000e-10 -3.118886463518e-01 + 9.328000000000e-10 -3.610770519544e-01 + 9.428000000000e-10 -4.029199107687e-01 + 9.528000000000e-10 -4.180177452829e-01 + 9.628000000000e-10 -3.533708821878e-01 + 9.728000000000e-10 -1.952784134813e-01 + 9.828000000000e-10 -9.899898542678e-03 + 9.928000000000e-10 1.452754037376e-01 + 1.000000000000e-09 2.207322871295e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/conditions.yaml new file mode 100644 index 00000000..04b6ac79 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 10 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_10 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/CML_core_tb.sch new file mode 100644 index 00000000..582610e2 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/CML_core_tb_11.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/CML_core_tb_11.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/CML_core_tb_11.data new file mode 100644 index 00000000..1453012b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/CML_core_tb_11.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.668500025046e-01 + 1.728000000000e-10 -1.978704758130e-01 + 1.828000000000e-10 -3.069550951996e-03 + 1.928000000000e-10 1.561389387989e-01 + 2.028000000000e-10 2.488697408913e-01 + 2.128000000000e-10 2.833379270136e-01 + 2.228000000000e-10 3.221467647695e-01 + 2.328000000000e-10 3.723176028273e-01 + 2.428000000000e-10 4.147931582649e-01 + 2.528000000000e-10 4.286646301121e-01 + 2.628000000000e-10 3.614677855799e-01 + 2.728000000000e-10 1.982726052647e-01 + 2.828000000000e-10 5.580533140739e-03 + 2.928000000000e-10 -1.536551403474e-01 + 3.028000000000e-10 -2.474729097395e-01 + 3.128000000000e-10 -2.827981749211e-01 + 3.228000000000e-10 -3.222400643179e-01 + 3.328000000000e-10 -3.724510578191e-01 + 3.428000000000e-10 -4.149487937489e-01 + 3.528000000000e-10 -4.285094572794e-01 + 3.628000000000e-10 -3.610716711123e-01 + 3.728000000000e-10 -1.975613483211e-01 + 3.828000000000e-10 -4.936396792217e-03 + 3.928000000000e-10 1.542720670721e-01 + 4.028000000000e-10 2.478554934965e-01 + 4.128000000000e-10 2.831768205427e-01 + 4.228000000000e-10 3.224764565266e-01 + 4.328000000000e-10 3.727376628527e-01 + 4.428000000000e-10 4.151128450004e-01 + 4.528000000000e-10 4.287030398326e-01 + 4.628000000000e-10 3.611465460996e-01 + 4.728000000000e-10 1.976871290976e-01 + 4.828000000000e-10 4.962067120498e-03 + 4.928000000000e-10 -1.541857483448e-01 + 5.028000000000e-10 -2.478549856990e-01 + 5.128000000000e-10 -2.831031432303e-01 + 5.228000000000e-10 -3.224786212940e-01 + 5.328000000000e-10 -3.726675199031e-01 + 5.428000000000e-10 -4.151222726988e-01 + 5.528000000000e-10 -4.286496175832e-01 + 5.628000000000e-10 -3.611719348809e-01 + 5.728000000000e-10 -1.976471175954e-01 + 5.828000000000e-10 -4.995016715658e-03 + 5.928000000000e-10 1.542195273485e-01 + 6.028000000000e-10 2.478226151197e-01 + 6.128000000000e-10 2.831371441394e-01 + 6.228000000000e-10 3.224465270882e-01 + 6.328000000000e-10 3.727020829784e-01 + 6.428000000000e-10 4.150919188021e-01 + 6.528000000000e-10 4.286821395136e-01 + 6.628000000000e-10 3.611419365066e-01 + 6.728000000000e-10 1.976777927703e-01 + 6.828000000000e-10 4.963507878799e-03 + 6.928000000000e-10 -1.541913949207e-01 + 7.028000000000e-10 -2.478529800499e-01 + 7.128000000000e-10 -2.831092109235e-01 + 7.228000000000e-10 -3.224762894768e-01 + 7.328000000000e-10 -3.726728668334e-01 + 7.428000000000e-10 -4.151201370880e-01 + 7.528000000000e-10 -4.286543531433e-01 + 7.628000000000e-10 -3.611692599178e-01 + 7.728000000000e-10 -1.976499135935e-01 + 7.828000000000e-10 -4.990471824028e-03 + 7.928000000000e-10 1.542171227717e-01 + 8.028000000000e-10 2.478269854332e-01 + 8.128000000000e-10 2.831343470853e-01 + 8.228000000000e-10 3.224500362551e-01 + 8.328000000000e-10 3.726987138014e-01 + 8.428000000000e-10 4.150953468135e-01 + 8.528000000000e-10 4.286792233560e-01 + 8.628000000000e-10 3.611455588852e-01 + 8.728000000000e-10 1.976743961081e-01 + 8.828000000000e-10 4.966432661841e-03 + 8.928000000000e-10 -1.541946484524e-01 + 9.028000000000e-10 -2.478502288236e-01 + 9.128000000000e-10 -2.831123474050e-01 + 9.228000000000e-10 -3.224731331421e-01 + 9.328000000000e-10 -3.726757720747e-01 + 9.428000000000e-10 -4.151172388981e-01 + 9.528000000000e-10 -4.286573581279e-01 + 9.628000000000e-10 -3.611667698498e-01 + 9.728000000000e-10 -1.976525646923e-01 + 9.828000000000e-10 -4.987471597641e-03 + 9.928000000000e-10 1.542147143463e-01 + 1.000000000000e-09 2.301006397866e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/conditions.yaml new file mode 100644 index 00000000..e5fb07dc --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 11 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_11 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/CML_core_tb.sch new file mode 100644 index 00000000..82545e8d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/CML_core_tb_12.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/CML_core_tb_12.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/CML_core_tb_12.data new file mode 100644 index 00000000..3b0782c6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/CML_core_tb_12.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.388323931118e-01 + 1.728000000000e-10 -1.851651732117e-01 + 1.828000000000e-10 -4.985209728467e-03 + 1.928000000000e-10 1.464303664236e-01 + 2.028000000000e-10 2.390890865534e-01 + 2.128000000000e-10 2.778147857521e-01 + 2.228000000000e-10 3.140298283994e-01 + 2.328000000000e-10 3.564486269316e-01 + 2.428000000000e-10 3.920777300126e-01 + 2.528000000000e-10 4.026431485981e-01 + 2.628000000000e-10 3.407818057760e-01 + 2.728000000000e-10 1.919413521399e-01 + 2.828000000000e-10 1.380608162301e-02 + 2.928000000000e-10 -1.377275777470e-01 + 3.028000000000e-10 -2.320727525709e-01 + 3.128000000000e-10 -2.723718882130e-01 + 3.228000000000e-10 -3.097195919600e-01 + 3.328000000000e-10 -3.525356430610e-01 + 3.428000000000e-10 -3.885938438581e-01 + 3.528000000000e-10 -3.995683250409e-01 + 3.628000000000e-10 -3.382392747069e-01 + 3.728000000000e-10 -1.897685835172e-01 + 3.828000000000e-10 -1.211190537496e-02 + 3.928000000000e-10 1.391365825109e-01 + 4.028000000000e-10 2.331433172305e-01 + 4.128000000000e-10 2.733678679410e-01 + 4.228000000000e-10 3.105714733021e-01 + 4.328000000000e-10 3.533708758772e-01 + 4.428000000000e-10 3.892622592719e-01 + 4.528000000000e-10 4.001272859757e-01 + 4.628000000000e-10 3.385642563623e-01 + 4.728000000000e-10 1.899916781684e-01 + 4.828000000000e-10 1.218033620775e-02 + 4.928000000000e-10 -1.390656421002e-01 + 5.028000000000e-10 -2.331398693887e-01 + 5.128000000000e-10 -2.733037181082e-01 + 5.228000000000e-10 -3.105518491305e-01 + 5.328000000000e-10 -3.533032068815e-01 + 5.428000000000e-10 -3.892531494066e-01 + 5.528000000000e-10 -4.000849100741e-01 + 5.628000000000e-10 -3.385845178207e-01 + 5.728000000000e-10 -1.899774211598e-01 + 5.828000000000e-10 -1.221996984529e-02 + 5.928000000000e-10 1.390720456320e-01 + 6.028000000000e-10 2.331027694491e-01 + 6.128000000000e-10 2.733156842718e-01 + 6.228000000000e-10 3.105197170718e-01 + 6.328000000000e-10 3.533171034352e-01 + 6.428000000000e-10 3.892243222051e-01 + 6.528000000000e-10 4.000997182403e-01 + 6.628000000000e-10 3.385594083538e-01 + 6.728000000000e-10 1.899934277570e-01 + 6.828000000000e-10 1.219466050150e-02 + 6.928000000000e-10 -1.390553921853e-01 + 7.028000000000e-10 -2.331263672195e-01 + 7.128000000000e-10 -2.732987102222e-01 + 7.228000000000e-10 -3.105421090081e-01 + 7.328000000000e-10 -3.532994962925e-01 + 7.428000000000e-10 -3.892451651423e-01 + 7.528000000000e-10 -4.000824543639e-01 + 7.628000000000e-10 -3.385783830881e-01 + 7.728000000000e-10 -1.899748483052e-01 + 7.828000000000e-10 -1.221334688082e-02 + 7.928000000000e-10 1.390733351530e-01 + 8.028000000000e-10 2.331082732353e-01 + 8.128000000000e-10 2.733160005972e-01 + 8.228000000000e-10 3.105237742784e-01 + 8.328000000000e-10 3.533165556732e-01 + 8.428000000000e-10 3.892279285214e-01 + 8.528000000000e-10 4.000991009611e-01 + 8.628000000000e-10 3.385625511294e-01 + 8.728000000000e-10 1.899914169425e-01 + 8.828000000000e-10 1.219669858142e-02 + 8.928000000000e-10 -1.390576717936e-01 + 9.028000000000e-10 -2.331245304799e-01 + 9.128000000000e-10 -2.733009677599e-01 + 9.228000000000e-10 -3.105397739050e-01 + 9.328000000000e-10 -3.533012749995e-01 + 9.428000000000e-10 -3.892430673555e-01 + 9.528000000000e-10 -4.000844420176e-01 + 9.628000000000e-10 -3.385768441038e-01 + 9.728000000000e-10 -1.899764612955e-01 + 9.828000000000e-10 -1.221122328152e-02 + 9.928000000000e-10 1.390717643268e-01 + 1.000000000000e-09 2.142511381663e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/conditions.yaml new file mode 100644 index 00000000..a16247e5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 12 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_12 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/CML_core_tb.sch new file mode 100644 index 00000000..25de1bfb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/CML_core_tb_13.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/CML_core_tb_13.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/CML_core_tb_13.data new file mode 100644 index 00000000..36de6040 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/CML_core_tb_13.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.406999838743e-01 + 1.728000000000e-10 -1.879936990253e-01 + 1.828000000000e-10 -9.262901303246e-03 + 1.928000000000e-10 1.413611635485e-01 + 2.028000000000e-10 2.336775345801e-01 + 2.128000000000e-10 2.717294842894e-01 + 2.228000000000e-10 3.082620487639e-01 + 2.328000000000e-10 3.509422339502e-01 + 2.428000000000e-10 3.871053596645e-01 + 2.528000000000e-10 3.988940820744e-01 + 2.628000000000e-10 3.384312270542e-01 + 2.728000000000e-10 1.913281233779e-01 + 2.828000000000e-10 1.537343295661e-02 + 2.928000000000e-10 -1.347916275204e-01 + 3.028000000000e-10 -2.283419665374e-01 + 3.128000000000e-10 -2.677291408127e-01 + 3.228000000000e-10 -3.052231075401e-01 + 3.328000000000e-10 -3.481601477547e-01 + 3.428000000000e-10 -3.845854123080e-01 + 3.528000000000e-10 -3.965379624605e-01 + 3.628000000000e-10 -3.363314255870e-01 + 3.728000000000e-10 -1.893723794407e-01 + 3.828000000000e-10 -1.375643865463e-02 + 3.928000000000e-10 1.361849816757e-01 + 4.028000000000e-10 2.294005939140e-01 + 4.128000000000e-10 2.686949729273e-01 + 4.228000000000e-10 3.060328157788e-01 + 4.328000000000e-10 3.489590274886e-01 + 4.428000000000e-10 3.852266672724e-01 + 4.528000000000e-10 3.970921187630e-01 + 4.628000000000e-10 3.366736237881e-01 + 4.728000000000e-10 1.896320772426e-01 + 4.828000000000e-10 1.386475371506e-02 + 4.928000000000e-10 -1.360753156283e-01 + 5.028000000000e-10 -2.293675908871e-01 + 5.128000000000e-10 -2.686062530832e-01 + 5.228000000000e-10 -3.059945800423e-01 + 5.328000000000e-10 -3.488729675224e-01 + 5.428000000000e-10 -3.852026785029e-01 + 5.528000000000e-10 -3.970350594993e-01 + 5.628000000000e-10 -3.366834486256e-01 + 5.728000000000e-10 -1.896077423819e-01 + 5.828000000000e-10 -1.389840122586e-02 + 5.928000000000e-10 1.360876217327e-01 + 6.028000000000e-10 2.293336021557e-01 + 6.128000000000e-10 2.686225622920e-01 + 6.228000000000e-10 3.059648098566e-01 + 6.328000000000e-10 3.488907093130e-01 + 6.428000000000e-10 3.851753633828e-01 + 6.528000000000e-10 3.970526526302e-01 + 6.628000000000e-10 3.366583891048e-01 + 6.728000000000e-10 1.896251667832e-01 + 6.828000000000e-10 1.387242911077e-02 + 6.928000000000e-10 -1.360702314024e-01 + 7.028000000000e-10 -2.293580006158e-01 + 7.128000000000e-10 -2.686047945045e-01 + 7.228000000000e-10 -3.059879182353e-01 + 7.328000000000e-10 -3.488722408399e-01 + 7.428000000000e-10 -3.851969589401e-01 + 7.528000000000e-10 -3.970345404264e-01 + 7.628000000000e-10 -3.366782708831e-01 + 7.728000000000e-10 -1.896058621860e-01 + 7.828000000000e-10 -1.389192450355e-02 + 7.928000000000e-10 1.360888260036e-01 + 8.028000000000e-10 2.293391038565e-01 + 8.128000000000e-10 2.686227634282e-01 + 8.228000000000e-10 3.059688096850e-01 + 8.328000000000e-10 3.488900661997e-01 + 8.428000000000e-10 3.851789257250e-01 + 8.528000000000e-10 3.970519764807e-01 + 8.628000000000e-10 3.366616134215e-01 + 8.728000000000e-10 1.896231972496e-01 + 8.828000000000e-10 1.387461571983e-02 + 8.928000000000e-10 -1.360724758723e-01 + 9.028000000000e-10 -2.293560182270e-01 + 9.128000000000e-10 -2.686070528237e-01 + 9.228000000000e-10 -3.059854790954e-01 + 9.328000000000e-10 -3.488740842624e-01 + 9.428000000000e-10 -3.851947329758e-01 + 9.528000000000e-10 -3.970365843841e-01 + 9.628000000000e-10 -3.366766115599e-01 + 9.728000000000e-10 -1.896075309897e-01 + 9.828000000000e-10 -1.388973786858e-02 + 9.928000000000e-10 1.360872156510e-01 + 1.000000000000e-09 2.108297225004e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/conditions.yaml new file mode 100644 index 00000000..a1f0e95c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 13 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_13 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/CML_core_tb.sch new file mode 100644 index 00000000..579ef1c1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/CML_core_tb_14.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/CML_core_tb_14.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/CML_core_tb_14.data new file mode 100644 index 00000000..73c31d13 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/CML_core_tb_14.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.445927026449e-01 + 1.728000000000e-10 -1.889320969581e-01 + 1.828000000000e-10 -5.355234564888e-03 + 1.928000000000e-10 1.489911128277e-01 + 2.028000000000e-10 2.434822449071e-01 + 2.128000000000e-10 2.838702060450e-01 + 2.228000000000e-10 3.202156401988e-01 + 2.328000000000e-10 3.629401474789e-01 + 2.428000000000e-10 3.990998051164e-01 + 2.528000000000e-10 4.099063275401e-01 + 2.628000000000e-10 3.477923521709e-01 + 2.728000000000e-10 1.968519788675e-01 + 2.828000000000e-10 1.493750763318e-02 + 2.928000000000e-10 -1.398437743336e-01 + 3.028000000000e-10 -2.362338093992e-01 + 3.128000000000e-10 -2.782887085314e-01 + 3.228000000000e-10 -3.158910292643e-01 + 3.328000000000e-10 -3.590893499920e-01 + 3.428000000000e-10 -3.957248346768e-01 + 3.528000000000e-10 -4.069627998073e-01 + 3.628000000000e-10 -3.454070734708e-01 + 3.728000000000e-10 -1.948243362004e-01 + 3.828000000000e-10 -1.337926088934e-02 + 3.928000000000e-10 1.411472162204e-01 + 4.028000000000e-10 2.372231231196e-01 + 4.128000000000e-10 2.792284454069e-01 + 4.228000000000e-10 3.166817589057e-01 + 4.328000000000e-10 3.598702175634e-01 + 4.428000000000e-10 3.963375250752e-01 + 4.528000000000e-10 4.074753309124e-01 + 4.628000000000e-10 3.456854225481e-01 + 4.728000000000e-10 1.950177434222e-01 + 4.828000000000e-10 1.342430394201e-02 + 4.928000000000e-10 -1.410850608466e-01 + 5.028000000000e-10 -2.372286880899e-01 + 5.128000000000e-10 -2.791659662153e-01 + 5.228000000000e-10 -3.166689293508e-01 + 5.328000000000e-10 -3.598026374101e-01 + 5.428000000000e-10 -3.963331138013e-01 + 5.528000000000e-10 -4.074316676804e-01 + 5.628000000000e-10 -3.457088001737e-01 + 5.728000000000e-10 -1.950000158899e-01 + 5.828000000000e-10 -1.346504722293e-02 + 5.928000000000e-10 1.410957635246e-01 + 6.028000000000e-10 2.371909425038e-01 + 6.128000000000e-10 2.791817404178e-01 + 6.228000000000e-10 3.166356138828e-01 + 6.328000000000e-10 3.598203377806e-01 + 6.428000000000e-10 3.963033609435e-01 + 6.528000000000e-10 4.074499160221e-01 + 6.628000000000e-10 3.456826167292e-01 + 6.728000000000e-10 1.950190841630e-01 + 6.828000000000e-10 1.343803454206e-02 + 6.928000000000e-10 -1.410764950259e-01 + 7.028000000000e-10 -2.372163265848e-01 + 7.128000000000e-10 -2.791624229651e-01 + 7.228000000000e-10 -3.166599225368e-01 + 7.328000000000e-10 -3.598002455584e-01 + 7.428000000000e-10 -3.963259615583e-01 + 7.528000000000e-10 -4.074304662079e-01 + 7.628000000000e-10 -3.457033629648e-01 + 7.728000000000e-10 -1.949983704767e-01 + 7.828000000000e-10 -1.345872104163e-02 + 7.928000000000e-10 1.410962716693e-01 + 8.028000000000e-10 2.371963808526e-01 + 8.128000000000e-10 2.791814500218e-01 + 8.228000000000e-10 3.166396456569e-01 + 8.328000000000e-10 3.598191409746e-01 + 8.428000000000e-10 3.963069790813e-01 + 8.528000000000e-10 4.074488078929e-01 + 8.628000000000e-10 3.456858987705e-01 + 8.728000000000e-10 1.950166421641e-01 + 8.828000000000e-10 1.344025602045e-02 + 8.928000000000e-10 -1.410790665154e-01 + 9.028000000000e-10 -2.372142995262e-01 + 9.128000000000e-10 -2.791649325552e-01 + 9.228000000000e-10 -3.166573514474e-01 + 9.328000000000e-10 -3.598022359716e-01 + 9.428000000000e-10 -3.963236588924e-01 + 9.528000000000e-10 -4.074326778223e-01 + 9.628000000000e-10 -3.457016440453e-01 + 9.728000000000e-10 -1.950001702792e-01 + 9.828000000000e-10 -1.345633761364e-02 + 9.928000000000e-10 1.410945129066e-01 + 1.000000000000e-09 2.176807579100e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/conditions.yaml new file mode 100644 index 00000000..da3f3f71 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 14 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_14 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/CML_core_tb.sch new file mode 100644 index 00000000..c82cd7b5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/CML_core_tb_15.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/CML_core_tb_15.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/CML_core_tb_15.data new file mode 100644 index 00000000..6f87c434 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/CML_core_tb_15.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.831577979118e-01 + 1.728000000000e-10 -1.548331321524e-01 + 1.828000000000e-10 2.954507991941e-03 + 1.928000000000e-10 1.412083661187e-01 + 2.028000000000e-10 2.303947789211e-01 + 2.128000000000e-10 2.725788032239e-01 + 2.228000000000e-10 3.064646814943e-01 + 2.328000000000e-10 3.412898568956e-01 + 2.428000000000e-10 3.692979025942e-01 + 2.528000000000e-10 3.751979264520e-01 + 2.628000000000e-10 3.186495551608e-01 + 2.728000000000e-10 1.849115684226e-01 + 2.828000000000e-10 2.146912258403e-02 + 2.928000000000e-10 -1.215319416200e-01 + 3.028000000000e-10 -2.147336364713e-01 + 3.128000000000e-10 -2.593628319189e-01 + 3.228000000000e-10 -2.947919001104e-01 + 3.328000000000e-10 -3.306034656465e-01 + 3.428000000000e-10 -3.598903423599e-01 + 3.528000000000e-10 -3.674806029527e-01 + 3.628000000000e-10 -3.131864519443e-01 + 3.728000000000e-10 -1.816607205648e-01 + 3.828000000000e-10 -2.002885045896e-02 + 3.928000000000e-10 1.219326732879e-01 + 4.028000000000e-10 2.146583452252e-01 + 4.128000000000e-10 2.593288859790e-01 + 4.228000000000e-10 2.947836961551e-01 + 4.328000000000e-10 3.305873089453e-01 + 4.428000000000e-10 3.597520160348e-01 + 4.528000000000e-10 3.672634041173e-01 + 4.628000000000e-10 3.128292575731e-01 + 4.728000000000e-10 1.812525079401e-01 + 4.828000000000e-10 1.956255085056e-02 + 4.928000000000e-10 -1.223539241893e-01 + 5.028000000000e-10 -2.150587893921e-01 + 5.128000000000e-10 -2.596440912838e-01 + 5.228000000000e-10 -2.950896959018e-01 + 5.328000000000e-10 -3.308452440946e-01 + 5.428000000000e-10 -3.600168265621e-01 + 5.528000000000e-10 -3.674687038170e-01 + 5.628000000000e-10 -3.130140501398e-01 + 5.728000000000e-10 -1.813584327872e-01 + 5.828000000000e-10 -1.965159115909e-02 + 5.928000000000e-10 1.223212864923e-01 + 6.028000000000e-10 2.150157103205e-01 + 6.128000000000e-10 2.596318060931e-01 + 6.228000000000e-10 2.950524078153e-01 + 6.328000000000e-10 3.308363963911e-01 + 6.428000000000e-10 3.599874022300e-01 + 6.528000000000e-10 3.674690181116e-01 + 6.628000000000e-10 3.129980588961e-01 + 6.728000000000e-10 1.813712653368e-01 + 6.828000000000e-10 1.964491680526e-02 + 6.928000000000e-10 -1.223023112353e-01 + 7.028000000000e-10 -2.150202483004e-01 + 7.128000000000e-10 -2.596144309164e-01 + 7.228000000000e-10 -2.950582886643e-01 + 7.328000000000e-10 -3.308199600200e-01 + 7.428000000000e-10 -3.599931640339e-01 + 7.528000000000e-10 -3.674538095645e-01 + 7.628000000000e-10 -3.130042913922e-01 + 7.728000000000e-10 -1.813570925598e-01 + 7.828000000000e-10 -1.965290666609e-02 + 7.928000000000e-10 1.223145971689e-01 + 8.028000000000e-10 2.150114430495e-01 + 8.128000000000e-10 2.596256780136e-01 + 8.228000000000e-10 2.950490452158e-01 + 8.328000000000e-10 3.308307530718e-01 + 8.428000000000e-10 3.599842799802e-01 + 8.528000000000e-10 3.674639698479e-01 + 8.628000000000e-10 3.129957925611e-01 + 8.728000000000e-10 1.813666711568e-01 + 8.828000000000e-10 1.964348030724e-02 + 8.928000000000e-10 -1.223056361887e-01 + 9.028000000000e-10 -2.150207890100e-01 + 9.128000000000e-10 -2.596171721225e-01 + 9.228000000000e-10 -2.950581404305e-01 + 9.328000000000e-10 -3.308221104591e-01 + 9.428000000000e-10 -3.599929167296e-01 + 9.528000000000e-10 -3.674557320782e-01 + 9.628000000000e-10 -3.130039671541e-01 + 9.728000000000e-10 -1.813582011282e-01 + 9.828000000000e-10 -1.965175786777e-02 + 9.928000000000e-10 1.223137237372e-01 + 1.000000000000e-09 1.953703252853e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/conditions.yaml new file mode 100644 index 00000000..9f850701 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 15 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_15 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/CML_core_tb.sch new file mode 100644 index 00000000..1db2b016 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/CML_core_tb_16.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/CML_core_tb_16.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/CML_core_tb_16.data new file mode 100644 index 00000000..c0c44c66 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/CML_core_tb_16.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.908214410229e-01 + 1.728000000000e-10 -1.609006026552e-01 + 1.828000000000e-10 -2.321243117629e-03 + 1.928000000000e-10 1.363185315112e-01 + 2.028000000000e-10 2.253864999197e-01 + 2.128000000000e-10 2.667546328680e-01 + 2.228000000000e-10 3.007016001191e-01 + 2.328000000000e-10 3.359037685855e-01 + 2.428000000000e-10 3.646369081917e-01 + 2.528000000000e-10 3.717564842409e-01 + 2.628000000000e-10 3.164681086559e-01 + 2.728000000000e-10 1.842122200319e-01 + 2.828000000000e-10 2.261788955655e-02 + 2.928000000000e-10 -1.190364341005e-01 + 3.028000000000e-10 -2.112326750882e-01 + 3.128000000000e-10 -2.547832728498e-01 + 3.228000000000e-10 -2.901354995194e-01 + 3.328000000000e-10 -3.261256516764e-01 + 3.428000000000e-10 -3.558916364396e-01 + 3.528000000000e-10 -3.643768878587e-01 + 3.628000000000e-10 -3.109660871267e-01 + 3.728000000000e-10 -1.806005122430e-01 + 3.828000000000e-10 -2.063463882859e-02 + 3.928000000000e-10 1.200417121301e-01 + 4.028000000000e-10 2.117115066678e-01 + 4.128000000000e-10 2.552245954862e-01 + 4.228000000000e-10 2.905358174314e-01 + 4.328000000000e-10 3.264964127076e-01 + 4.428000000000e-10 3.561164409890e-01 + 4.528000000000e-10 3.644937527082e-01 + 4.628000000000e-10 3.108863598347e-01 + 4.728000000000e-10 1.804066968471e-01 + 4.828000000000e-10 2.031749353463e-02 + 4.928000000000e-10 -1.203543467152e-01 + 5.028000000000e-10 -2.120338656010e-01 + 5.128000000000e-10 -2.554694201182e-01 + 5.228000000000e-10 -2.907816217466e-01 + 5.328000000000e-10 -3.266973931907e-01 + 5.428000000000e-10 -3.563354715244e-01 + 5.528000000000e-10 -3.646612654323e-01 + 5.628000000000e-10 -3.110514282819e-01 + 5.728000000000e-10 -1.805042989376e-01 + 5.828000000000e-10 -2.041198102925e-02 + 5.928000000000e-10 1.203139122453e-01 + 6.028000000000e-10 2.119789678115e-01 + 6.128000000000e-10 2.554499136191e-01 + 6.228000000000e-10 2.907352766216e-01 + 6.328000000000e-10 3.266827936599e-01 + 6.428000000000e-10 3.562972261563e-01 + 6.528000000000e-10 3.646559193667e-01 + 6.628000000000e-10 3.110272539685e-01 + 6.728000000000e-10 1.805126920434e-01 + 6.828000000000e-10 2.039901072518e-02 + 6.928000000000e-10 -1.202975671206e-01 + 7.028000000000e-10 -2.119881389434e-01 + 7.128000000000e-10 -2.554339974826e-01 + 7.228000000000e-10 -2.907449786827e-01 + 7.328000000000e-10 -3.266672756474e-01 + 7.428000000000e-10 -3.563063206496e-01 + 7.528000000000e-10 -3.646410588059e-01 + 7.628000000000e-10 -3.110359790738e-01 + 7.728000000000e-10 -1.804978632753e-01 + 7.828000000000e-10 -2.040852410596e-02 + 7.928000000000e-10 1.203110667878e-01 + 8.028000000000e-10 2.119781439274e-01 + 8.128000000000e-10 2.554465105638e-01 + 8.228000000000e-10 2.907345088651e-01 + 8.328000000000e-10 3.266793442083e-01 + 8.428000000000e-10 3.562962712815e-01 + 8.528000000000e-10 3.646525269207e-01 + 8.628000000000e-10 3.110264147595e-01 + 8.728000000000e-10 1.805087495738e-01 + 8.828000000000e-10 2.039807927138e-02 + 8.928000000000e-10 -1.203008828088e-01 + 9.028000000000e-10 -2.119885143169e-01 + 9.128000000000e-10 -2.554368509477e-01 + 9.228000000000e-10 -2.907446372900e-01 + 9.328000000000e-10 -3.266695427412e-01 + 9.428000000000e-10 -3.563059183968e-01 + 9.528000000000e-10 -3.646431522847e-01 + 9.628000000000e-10 -3.110356032735e-01 + 9.728000000000e-10 -1.804991631480e-01 + 9.828000000000e-10 -2.040735001275e-02 + 9.928000000000e-10 1.203099974113e-01 + 1.000000000000e-09 1.927324868168e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/conditions.yaml new file mode 100644 index 00000000..2bb1db93 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 16 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_16 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/CML_core_tb.sch new file mode 100644 index 00000000..412ffd3b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/CML_core_tb_17.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/CML_core_tb_17.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/CML_core_tb_17.data new file mode 100644 index 00000000..1e62d263 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/CML_core_tb_17.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.857852225245e-01 + 1.728000000000e-10 -1.572533595452e-01 + 1.828000000000e-10 2.540381659783e-03 + 1.928000000000e-10 1.434374080790e-01 + 2.028000000000e-10 2.351272809546e-01 + 2.128000000000e-10 2.797956268783e-01 + 2.228000000000e-10 3.144243918962e-01 + 2.328000000000e-10 3.493618787392e-01 + 2.428000000000e-10 3.773715695689e-01 + 2.528000000000e-10 3.831823569325e-01 + 2.628000000000e-10 3.264482498061e-01 + 2.728000000000e-10 1.910530045686e-01 + 2.828000000000e-10 2.436059711742e-02 + 2.928000000000e-10 -1.220220612332e-01 + 3.028000000000e-10 -2.180809390746e-01 + 3.128000000000e-10 -2.653775774444e-01 + 3.228000000000e-10 -3.017848824321e-01 + 3.328000000000e-10 -3.379021858146e-01 + 3.428000000000e-10 -3.673696540777e-01 + 3.528000000000e-10 -3.751149757425e-01 + 3.628000000000e-10 -3.209083740174e-01 + 3.728000000000e-10 -1.878979131572e-01 + 3.828000000000e-10 -2.307531260616e-02 + 3.928000000000e-10 1.222703025101e-01 + 4.028000000000e-10 2.179003509445e-01 + 4.128000000000e-10 2.652908784701e-01 + 4.228000000000e-10 3.017672646237e-01 + 4.328000000000e-10 3.378931599738e-01 + 4.428000000000e-10 3.672390198172e-01 + 4.528000000000e-10 3.748903812400e-01 + 4.628000000000e-10 3.205316331029e-01 + 4.728000000000e-10 1.874647700937e-01 + 4.828000000000e-10 2.258819957166e-02 + 4.928000000000e-10 -1.227112688171e-01 + 5.028000000000e-10 -2.183172764214e-01 + 5.128000000000e-10 -2.656203742551e-01 + 5.228000000000e-10 -3.020800906145e-01 + 5.328000000000e-10 -3.381553362553e-01 + 5.428000000000e-10 -3.675051891202e-01 + 5.528000000000e-10 -3.750972240389e-01 + 5.628000000000e-10 -3.207148935088e-01 + 5.728000000000e-10 -1.875700292984e-01 + 5.828000000000e-10 -2.267596999196e-02 + 5.928000000000e-10 1.226776663562e-01 + 6.028000000000e-10 2.182733434309e-01 + 6.128000000000e-10 2.656053081095e-01 + 6.228000000000e-10 3.020411985396e-01 + 6.328000000000e-10 3.381435634392e-01 + 6.428000000000e-10 3.674743818406e-01 + 6.528000000000e-10 3.750952532513e-01 + 6.628000000000e-10 3.206986438750e-01 + 6.728000000000e-10 1.875816736609e-01 + 6.828000000000e-10 2.266940437016e-02 + 6.928000000000e-10 -1.226596158426e-01 + 7.028000000000e-10 -2.182776851932e-01 + 7.128000000000e-10 -2.655888997029e-01 + 7.228000000000e-10 -3.020470638059e-01 + 7.328000000000e-10 -3.381282771084e-01 + 7.428000000000e-10 -3.674800981492e-01 + 7.528000000000e-10 -3.750811166601e-01 + 7.628000000000e-10 -3.207046174850e-01 + 7.728000000000e-10 -1.875682790354e-01 + 7.828000000000e-10 -2.267703281628e-02 + 7.928000000000e-10 1.226713327530e-01 + 8.028000000000e-10 2.182693863135e-01 + 8.128000000000e-10 2.655996099454e-01 + 8.228000000000e-10 3.020383466326e-01 + 8.328000000000e-10 3.381385294735e-01 + 8.428000000000e-10 3.674717742910e-01 + 8.528000000000e-10 3.750907045119e-01 + 8.628000000000e-10 3.206966644115e-01 + 8.728000000000e-10 1.875773616331e-01 + 8.828000000000e-10 2.266807684955e-02 + 8.928000000000e-10 -1.226628120211e-01 + 9.028000000000e-10 -2.182782381400e-01 + 9.128000000000e-10 -2.655915506047e-01 + 9.228000000000e-10 -3.020469590318e-01 + 9.328000000000e-10 -3.381303351991e-01 + 9.428000000000e-10 -3.674798958779e-01 + 9.528000000000e-10 -3.750829516380e-01 + 9.628000000000e-10 -3.207043265993e-01 + 9.728000000000e-10 -1.875693454762e-01 + 9.828000000000e-10 -2.267594148777e-02 + 9.928000000000e-10 1.226704651969e-01 + 1.000000000000e-09 1.977257563344e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/conditions.yaml new file mode 100644 index 00000000..caab2f97 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 17 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_17 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/CML_core_tb.sch new file mode 100644 index 00000000..db7b143c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/CML_core_tb_18.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/CML_core_tb_18.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/CML_core_tb_18.data new file mode 100644 index 00000000..16422ca1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/CML_core_tb_18.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.213526702696e-01 + 1.728000000000e-10 -1.557909441213e-01 + 1.828000000000e-10 3.476956205809e-02 + 1.928000000000e-10 1.811250151598e-01 + 2.028000000000e-10 2.596166993269e-01 + 2.128000000000e-10 2.853727091731e-01 + 2.228000000000e-10 3.254453264627e-01 + 2.328000000000e-10 3.792799604087e-01 + 2.428000000000e-10 4.176388066249e-01 + 2.528000000000e-10 4.205544301124e-01 + 2.628000000000e-10 3.463528198985e-01 + 2.728000000000e-10 1.792096076204e-01 + 2.828000000000e-10 -1.442396833933e-02 + 2.928000000000e-10 -1.649237711275e-01 + 3.028000000000e-10 -2.471596975948e-01 + 3.128000000000e-10 -2.748735614517e-01 + 3.228000000000e-10 -3.160128767795e-01 + 3.328000000000e-10 -3.707930594343e-01 + 3.428000000000e-10 -4.104823651943e-01 + 3.528000000000e-10 -4.153692056047e-01 + 3.628000000000e-10 -3.427931169871e-01 + 3.728000000000e-10 -1.769552164151e-01 + 3.828000000000e-10 1.590673093360e-02 + 3.928000000000e-10 1.658834812043e-01 + 4.028000000000e-10 2.479775600913e-01 + 4.128000000000e-10 2.756409688001e-01 + 4.228000000000e-10 3.168596600790e-01 + 4.328000000000e-10 3.715133147191e-01 + 4.428000000000e-10 4.111218222953e-01 + 4.528000000000e-10 4.157229971644e-01 + 4.628000000000e-10 3.430019798682e-01 + 4.728000000000e-10 1.769456026445e-01 + 4.828000000000e-10 -1.592886494610e-02 + 4.928000000000e-10 -1.659782283296e-01 + 5.028000000000e-10 -2.479947853664e-01 + 5.128000000000e-10 -2.756931315881e-01 + 5.228000000000e-10 -3.168416717549e-01 + 5.328000000000e-10 -3.715547211919e-01 + 5.428000000000e-10 -4.111034138799e-01 + 5.528000000000e-10 -4.157691346087e-01 + 5.628000000000e-10 -3.429925568898e-01 + 5.728000000000e-10 -1.770024985869e-01 + 5.828000000000e-10 1.592938202906e-02 + 5.928000000000e-10 1.659292038608e-01 + 6.028000000000e-10 2.480043512000e-01 + 6.128000000000e-10 2.756533285421e-01 + 6.228000000000e-10 3.168576585763e-01 + 6.328000000000e-10 3.715156583068e-01 + 6.428000000000e-10 4.111207690964e-01 + 6.528000000000e-10 4.157343976531e-01 + 6.628000000000e-10 3.430135347581e-01 + 6.728000000000e-10 1.769734665185e-01 + 6.828000000000e-10 -1.590652763180e-02 + 6.928000000000e-10 -1.659537152419e-01 + 7.028000000000e-10 -2.479812550746e-01 + 7.128000000000e-10 -2.756768834918e-01 + 7.228000000000e-10 -3.168350969677e-01 + 7.328000000000e-10 -3.715419152243e-01 + 7.428000000000e-10 -4.110983779981e-01 + 7.528000000000e-10 -4.157587194411e-01 + 7.628000000000e-10 -3.429901444601e-01 + 7.728000000000e-10 -1.769973775521e-01 + 7.828000000000e-10 1.592723735432e-02 + 7.928000000000e-10 1.659318535084e-01 + 8.028000000000e-10 2.480017799848e-01 + 8.128000000000e-10 2.756559811492e-01 + 8.228000000000e-10 3.168566227283e-01 + 8.328000000000e-10 3.715195500188e-01 + 8.428000000000e-10 4.111190536097e-01 + 8.528000000000e-10 4.157370668569e-01 + 8.628000000000e-10 3.430103710665e-01 + 8.728000000000e-10 1.769771675859e-01 + 8.828000000000e-10 -1.590770493918e-02 + 8.928000000000e-10 -1.659501582149e-01 + 9.028000000000e-10 -2.479827571068e-01 + 9.128000000000e-10 -2.756738772283e-01 + 9.228000000000e-10 -3.168377001445e-01 + 9.328000000000e-10 -3.715391180409e-01 + 9.428000000000e-10 -4.111007797151e-01 + 9.528000000000e-10 -4.157556639381e-01 + 9.628000000000e-10 -3.429919881202e-01 + 9.728000000000e-10 -1.769955652012e-01 + 9.828000000000e-10 1.592430721908e-02 + 9.928000000000e-10 1.659331850974e-01 + 1.000000000000e-09 2.332140069758e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/conditions.yaml new file mode 100644 index 00000000..02012398 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 18 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_18 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/CML_core_tb.sch new file mode 100644 index 00000000..186750d7 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/CML_core_tb_19.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/CML_core_tb_19.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/CML_core_tb_19.data new file mode 100644 index 00000000..6e384890 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/CML_core_tb_19.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.162777317791e-01 + 1.728000000000e-10 -1.528661974147e-01 + 1.828000000000e-10 3.474832458294e-02 + 1.928000000000e-10 1.787124308466e-01 + 2.028000000000e-10 2.559986610902e-01 + 2.128000000000e-10 2.810767408313e-01 + 2.228000000000e-10 3.219404824571e-01 + 2.328000000000e-10 3.760375868322e-01 + 2.428000000000e-10 4.141294975409e-01 + 2.528000000000e-10 4.175370858756e-01 + 2.628000000000e-10 3.443891646085e-01 + 2.728000000000e-10 1.786024667409e-01 + 2.828000000000e-10 -1.272368439666e-02 + 2.928000000000e-10 -1.612661145276e-01 + 3.028000000000e-10 -2.425558656005e-01 + 3.128000000000e-10 -2.696709375544e-01 + 3.228000000000e-10 -3.115976016931e-01 + 3.328000000000e-10 -3.666762080522e-01 + 3.428000000000e-10 -4.062269757432e-01 + 3.528000000000e-10 -4.117682170104e-01 + 3.628000000000e-10 -3.403932990270e-01 + 3.728000000000e-10 -1.760595961534e-01 + 3.828000000000e-10 1.438676142530e-02 + 3.928000000000e-10 1.623380571180e-01 + 4.028000000000e-10 2.434588647096e-01 + 4.128000000000e-10 2.705169080514e-01 + 4.228000000000e-10 3.125303134845e-01 + 4.328000000000e-10 3.674735521527e-01 + 4.428000000000e-10 4.069324770669e-01 + 4.528000000000e-10 4.121668816011e-01 + 4.628000000000e-10 3.406314536055e-01 + 4.728000000000e-10 1.760592839129e-01 + 4.828000000000e-10 -1.440702618479e-02 + 4.928000000000e-10 -1.624387020945e-01 + 5.028000000000e-10 -2.434775787799e-01 + 5.128000000000e-10 -2.705727170369e-01 + 5.228000000000e-10 -3.125119373252e-01 + 5.328000000000e-10 -3.675184828947e-01 + 5.428000000000e-10 -4.069140356329e-01 + 5.528000000000e-10 -4.122173977207e-01 + 5.628000000000e-10 -3.406230488723e-01 + 5.728000000000e-10 -1.761225643375e-01 + 5.828000000000e-10 1.440482600394e-02 + 5.928000000000e-10 1.623840500109e-01 + 6.028000000000e-10 2.434858819416e-01 + 6.128000000000e-10 2.705285901327e-01 + 6.228000000000e-10 3.125279242462e-01 + 6.328000000000e-10 3.674758375852e-01 + 6.428000000000e-10 4.069313048189e-01 + 6.528000000000e-10 4.121794941223e-01 + 6.628000000000e-10 3.406442721772e-01 + 6.728000000000e-10 1.760913923029e-01 + 6.828000000000e-10 -1.438048626859e-02 + 6.928000000000e-10 -1.624102913298e-01 + 7.028000000000e-10 -2.434611919520e-01 + 7.128000000000e-10 -2.705537859875e-01 + 7.228000000000e-10 -3.125040211699e-01 + 7.328000000000e-10 -3.675038904367e-01 + 7.428000000000e-10 -4.069074652851e-01 + 7.528000000000e-10 -4.122054838885e-01 + 7.628000000000e-10 -3.406192567768e-01 + 7.728000000000e-10 -1.761170868219e-01 + 7.828000000000e-10 1.440247036537e-02 + 7.928000000000e-10 1.623867436405e-01 + 8.028000000000e-10 2.434830143217e-01 + 8.128000000000e-10 2.705312548291e-01 + 8.228000000000e-10 3.125271394700e-01 + 8.328000000000e-10 3.674800931307e-01 + 8.428000000000e-10 4.069295144266e-01 + 8.528000000000e-10 4.121823557439e-01 + 8.628000000000e-10 3.406407407456e-01 + 8.728000000000e-10 1.760956573916e-01 + 8.828000000000e-10 -1.438135361500e-02 + 8.928000000000e-10 -1.624062315135e-01 + 9.028000000000e-10 -2.434625084707e-01 + 9.128000000000e-10 -2.705503455528e-01 + 9.228000000000e-10 -3.125068466958e-01 + 9.328000000000e-10 -3.675009271833e-01 + 9.428000000000e-10 -4.069098943042e-01 + 9.528000000000e-10 -4.122022218921e-01 + 9.628000000000e-10 -3.406210058100e-01 + 9.728000000000e-10 -1.761154015725e-01 + 9.828000000000e-10 1.439913133121e-02 + 9.928000000000e-10 1.623879640093e-01 + 1.000000000000e-09 2.290402036537e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/conditions.yaml new file mode 100644 index 00000000..7bd19f05 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 19 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_19 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/CML_core_tb.sch new file mode 100644 index 00000000..0ec0aa03 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/CML_core_tb_20.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/CML_core_tb_20.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/CML_core_tb_20.data new file mode 100644 index 00000000..3dfcf241 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/CML_core_tb_20.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.365386572536e-01 + 1.728000000000e-10 -1.657072094068e-01 + 1.828000000000e-10 3.099865584261e-02 + 1.928000000000e-10 1.820426436768e-01 + 2.028000000000e-10 2.627018214462e-01 + 2.128000000000e-10 2.893736945719e-01 + 2.228000000000e-10 3.287984169352e-01 + 2.328000000000e-10 3.833334317825e-01 + 2.428000000000e-10 4.238785365972e-01 + 2.528000000000e-10 4.280322768716e-01 + 2.628000000000e-10 3.532409470363e-01 + 2.728000000000e-10 1.834641899168e-01 + 2.828000000000e-10 -1.474496205711e-02 + 2.928000000000e-10 -1.691349612478e-01 + 3.028000000000e-10 -2.530204867896e-01 + 3.128000000000e-10 -2.814070764654e-01 + 3.228000000000e-10 -3.218416847899e-01 + 3.328000000000e-10 -3.771799136100e-01 + 3.428000000000e-10 -4.187055626636e-01 + 3.528000000000e-10 -4.243036771430e-01 + 3.628000000000e-10 -3.506062035467e-01 + 3.728000000000e-10 -1.816763297909e-01 + 3.828000000000e-10 1.601938741723e-02 + 3.928000000000e-10 1.700087907901e-01 + 4.028000000000e-10 2.537596951165e-01 + 4.128000000000e-10 2.820887501770e-01 + 4.228000000000e-10 3.225625541805e-01 + 4.328000000000e-10 3.777928583784e-01 + 4.428000000000e-10 4.192485534625e-01 + 4.528000000000e-10 4.246080285894e-01 + 4.628000000000e-10 3.507916132015e-01 + 4.728000000000e-10 1.816929452641e-01 + 4.828000000000e-10 -1.601075067965e-02 + 4.928000000000e-10 -1.700562644838e-01 + 5.028000000000e-10 -2.537513990380e-01 + 5.128000000000e-10 -2.821086741965e-01 + 5.228000000000e-10 -3.225309737549e-01 + 5.328000000000e-10 -3.778081660132e-01 + 5.428000000000e-10 -4.192196231589e-01 + 5.528000000000e-10 -4.246325132019e-01 + 5.628000000000e-10 -3.507765562578e-01 + 5.728000000000e-10 -1.817315603141e-01 + 5.828000000000e-10 1.601468821266e-02 + 5.928000000000e-10 1.700220210141e-01 + 6.028000000000e-10 2.537612841477e-01 + 6.128000000000e-10 2.820810469197e-01 + 6.228000000000e-10 3.225454957468e-01 + 6.328000000000e-10 3.777800822765e-01 + 6.428000000000e-10 4.192350742948e-01 + 6.528000000000e-10 4.246071005326e-01 + 6.628000000000e-10 3.507940665347e-01 + 6.728000000000e-10 1.817094337521e-01 + 6.828000000000e-10 -1.599736953115e-02 + 6.928000000000e-10 -1.700405869499e-01 + 7.028000000000e-10 -2.537437685408e-01 + 7.128000000000e-10 -2.820988428465e-01 + 7.228000000000e-10 -3.225283133162e-01 + 7.328000000000e-10 -3.778004844844e-01 + 7.428000000000e-10 -4.192180216890e-01 + 7.528000000000e-10 -4.246257635725e-01 + 7.628000000000e-10 -3.507760422929e-01 + 7.728000000000e-10 -1.817278922025e-01 + 7.828000000000e-10 1.601285231965e-02 + 7.928000000000e-10 1.700238629540e-01 + 8.028000000000e-10 2.537592487741e-01 + 8.128000000000e-10 2.820829438407e-01 + 8.228000000000e-10 3.225445511573e-01 + 8.328000000000e-10 3.777829985044e-01 + 8.428000000000e-10 4.192337708379e-01 + 8.528000000000e-10 4.246090234999e-01 + 8.628000000000e-10 3.507916632731e-01 + 8.728000000000e-10 1.817122417436e-01 + 8.828000000000e-10 -1.599824136343e-02 + 8.928000000000e-10 -1.700377849177e-01 + 9.028000000000e-10 -2.537449127629e-01 + 9.128000000000e-10 -2.820965585668e-01 + 9.228000000000e-10 -3.225302446360e-01 + 9.328000000000e-10 -3.777982010874e-01 + 9.428000000000e-10 -4.192199753705e-01 + 9.528000000000e-10 -4.246232587341e-01 + 9.628000000000e-10 -3.507775800865e-01 + 9.728000000000e-10 -1.817263367247e-01 + 9.828000000000e-10 1.601066647660e-02 + 9.928000000000e-10 1.700248857455e-01 + 1.000000000000e-09 2.385375784000e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/conditions.yaml new file mode 100644 index 00000000..d93cfdf6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 20 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_20 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/CML_core_tb.sch new file mode 100644 index 00000000..18b81367 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/CML_core_tb_21.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/CML_core_tb_21.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/CML_core_tb_21.data new file mode 100644 index 00000000..86f9b023 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/CML_core_tb_21.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.747912795524e-01 + 1.728000000000e-10 -1.327955908449e-01 + 1.828000000000e-10 3.931332790349e-02 + 1.928000000000e-10 1.782957289495e-01 + 2.028000000000e-10 2.573194188668e-01 + 2.128000000000e-10 2.870254911902e-01 + 2.228000000000e-10 3.228650321442e-01 + 2.328000000000e-10 3.690575149088e-01 + 2.428000000000e-10 4.023791308175e-01 + 2.528000000000e-10 4.034409994944e-01 + 2.628000000000e-10 3.332295993533e-01 + 2.728000000000e-10 1.767123870243e-01 + 2.828000000000e-10 -7.574880255958e-03 + 2.928000000000e-10 -1.550892096227e-01 + 3.028000000000e-10 -2.394679486139e-01 + 3.128000000000e-10 -2.715465054757e-01 + 3.228000000000e-10 -3.085580168164e-01 + 3.328000000000e-10 -3.560821219044e-01 + 3.428000000000e-10 -3.914831036325e-01 + 3.528000000000e-10 -3.956717314322e-01 + 3.628000000000e-10 -3.285929470428e-01 + 3.728000000000e-10 -1.747908753666e-01 + 3.828000000000e-10 7.882784627431e-03 + 3.928000000000e-10 1.545893087045e-01 + 4.028000000000e-10 2.389887597051e-01 + 4.128000000000e-10 2.712307710628e-01 + 4.228000000000e-10 3.085047043395e-01 + 4.328000000000e-10 3.559448484744e-01 + 4.428000000000e-10 3.913507819782e-01 + 4.528000000000e-10 3.953547803018e-01 + 4.628000000000e-10 3.282585464854e-01 + 4.728000000000e-10 1.743078825018e-01 + 4.828000000000e-10 -8.291328068348e-03 + 4.928000000000e-10 -1.550293895867e-01 + 5.028000000000e-10 -2.392804293874e-01 + 5.128000000000e-10 -2.715405217782e-01 + 5.228000000000e-10 -3.087067361985e-01 + 5.328000000000e-10 -3.562070457914e-01 + 5.428000000000e-10 -3.915132320474e-01 + 5.528000000000e-10 -3.955548280332e-01 + 5.628000000000e-10 -3.283427048941e-01 + 5.728000000000e-10 -1.744282326244e-01 + 5.828000000000e-10 8.270645751064e-03 + 5.928000000000e-10 1.549582711486e-01 + 6.028000000000e-10 2.392860039329e-01 + 6.128000000000e-10 2.714820836214e-01 + 6.228000000000e-10 3.087161022039e-01 + 6.328000000000e-10 3.561494137047e-01 + 6.428000000000e-10 3.915273490759e-01 + 6.528000000000e-10 3.955079501007e-01 + 6.628000000000e-10 3.283677191723e-01 + 6.728000000000e-10 1.743944727908e-01 + 6.828000000000e-10 -8.238033211244e-03 + 6.928000000000e-10 -1.549849820320e-01 + 7.028000000000e-10 -2.392533741503e-01 + 7.128000000000e-10 -2.715088112944e-01 + 7.228000000000e-10 -3.086845279612e-01 + 7.328000000000e-10 -3.561786907982e-01 + 7.428000000000e-10 -3.914967682891e-01 + 7.528000000000e-10 -3.955360247734e-01 + 7.628000000000e-10 -3.283379458960e-01 + 7.728000000000e-10 -1.744219452106e-01 + 7.828000000000e-10 8.266285029230e-03 + 7.928000000000e-10 1.549592969714e-01 + 8.028000000000e-10 2.392805186707e-01 + 8.128000000000e-10 2.714837558368e-01 + 8.228000000000e-10 3.087120651005e-01 + 8.328000000000e-10 3.561520690508e-01 + 8.428000000000e-10 3.915233230940e-01 + 8.528000000000e-10 3.955100606400e-01 + 8.628000000000e-10 3.283632493206e-01 + 8.728000000000e-10 1.743968536756e-01 + 8.828000000000e-10 -8.241845610385e-03 + 8.928000000000e-10 -1.549825747228e-01 + 9.028000000000e-10 -2.392568734068e-01 + 9.128000000000e-10 -2.715063119250e-01 + 9.228000000000e-10 -3.086881712182e-01 + 9.328000000000e-10 -3.561760305782e-01 + 9.428000000000e-10 -3.915002731039e-01 + 9.528000000000e-10 -3.955331724158e-01 + 9.628000000000e-10 -3.283409163093e-01 + 9.728000000000e-10 -1.744193777973e-01 + 9.828000000000e-10 8.263272108901e-03 + 9.928000000000e-10 1.549616575981e-01 + 1.000000000000e-09 2.229820050464e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/conditions.yaml new file mode 100644 index 00000000..2779604e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 21 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_21 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/CML_core_tb.sch new file mode 100644 index 00000000..2006b916 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/CML_core_tb_22.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/CML_core_tb_22.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/CML_core_tb_22.data new file mode 100644 index 00000000..ef0e6c8e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/CML_core_tb_22.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.701426652476e-01 + 1.728000000000e-10 -1.295079168872e-01 + 1.828000000000e-10 4.028305902420e-02 + 1.928000000000e-10 1.769160181627e-01 + 2.028000000000e-10 2.543038782058e-01 + 2.128000000000e-10 2.828787064062e-01 + 2.228000000000e-10 3.193333275112e-01 + 2.328000000000e-10 3.660596632426e-01 + 2.428000000000e-10 3.993599084345e-01 + 2.528000000000e-10 4.007883413226e-01 + 2.628000000000e-10 3.312419521143e-01 + 2.728000000000e-10 1.754810620333e-01 + 2.828000000000e-10 -7.142746942805e-03 + 2.928000000000e-10 -1.527779354444e-01 + 3.028000000000e-10 -2.358001938178e-01 + 3.128000000000e-10 -2.668485168237e-01 + 3.228000000000e-10 -3.044746718514e-01 + 3.328000000000e-10 -3.525545062341e-01 + 3.428000000000e-10 -3.880254364838e-01 + 3.528000000000e-10 -3.926522183008e-01 + 3.628000000000e-10 -3.262954780243e-01 + 3.728000000000e-10 -1.733443838482e-01 + 3.828000000000e-10 7.573790689709e-03 + 3.928000000000e-10 1.523487073311e-01 + 4.028000000000e-10 2.353677758316e-01 + 4.128000000000e-10 2.665695097895e-01 + 4.228000000000e-10 3.044490522149e-01 + 4.328000000000e-10 3.524353166192e-01 + 4.428000000000e-10 3.879041587545e-01 + 4.528000000000e-10 3.923389296672e-01 + 4.628000000000e-10 3.259554596391e-01 + 4.728000000000e-10 1.728458619818e-01 + 4.828000000000e-10 -8.002573892585e-03 + 4.928000000000e-10 -1.528088090159e-01 + 5.028000000000e-10 -2.356747724378e-01 + 5.128000000000e-10 -2.668925685814e-01 + 5.228000000000e-10 -3.046638401901e-01 + 5.328000000000e-10 -3.527112223433e-01 + 5.428000000000e-10 -3.880786380631e-01 + 5.528000000000e-10 -3.925506229445e-01 + 5.628000000000e-10 -3.260495799326e-01 + 5.728000000000e-10 -1.729761662154e-01 + 5.828000000000e-10 7.974498187451e-03 + 5.928000000000e-10 1.527311696558e-01 + 6.028000000000e-10 2.356760074325e-01 + 6.128000000000e-10 2.668297167568e-01 + 6.228000000000e-10 3.046702367069e-01 + 6.328000000000e-10 3.526500635637e-01 + 6.428000000000e-10 3.880902250634e-01 + 6.528000000000e-10 3.925010528185e-01 + 6.628000000000e-10 3.260730653917e-01 + 6.728000000000e-10 1.729410953112e-01 + 6.828000000000e-10 -7.941970684065e-03 + 6.928000000000e-10 -1.527585341072e-01 + 7.028000000000e-10 -2.356430884825e-01 + 7.128000000000e-10 -2.668569558480e-01 + 7.228000000000e-10 -3.046384985761e-01 + 7.328000000000e-10 -3.526798341051e-01 + 7.428000000000e-10 -3.880593641809e-01 + 7.528000000000e-10 -3.925295324367e-01 + 7.628000000000e-10 -3.260427874257e-01 + 7.728000000000e-10 -1.729689796013e-01 + 7.828000000000e-10 7.970639231343e-03 + 7.928000000000e-10 1.527324506408e-01 + 8.028000000000e-10 2.356706370408e-01 + 8.128000000000e-10 2.668314718812e-01 + 8.228000000000e-10 3.046665550415e-01 + 8.328000000000e-10 3.526529348742e-01 + 8.428000000000e-10 3.880863283995e-01 + 8.528000000000e-10 3.925032166540e-01 + 8.628000000000e-10 3.260684590033e-01 + 8.728000000000e-10 1.729436324779e-01 + 8.828000000000e-10 -7.945691115533e-03 + 8.928000000000e-10 -1.527560420249e-01 + 9.028000000000e-10 -2.356465048672e-01 + 9.128000000000e-10 -2.668543449819e-01 + 9.228000000000e-10 -3.046422495200e-01 + 9.328000000000e-10 -3.526772110923e-01 + 9.428000000000e-10 -3.880628732866e-01 + 9.528000000000e-10 -3.925266759429e-01 + 9.628000000000e-10 -3.260456785141e-01 + 9.728000000000e-10 -1.729665660062e-01 + 9.828000000000e-10 7.967487161613e-03 + 9.928000000000e-10 1.527347010769e-01 + 1.000000000000e-09 2.198236907112e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/conditions.yaml new file mode 100644 index 00000000..0119210d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 22 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_22 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/CML_core_tb.sch new file mode 100644 index 00000000..67aff21a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/CML_core_tb_23.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/CML_core_tb_23.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/CML_core_tb_23.data new file mode 100644 index 00000000..7b2e7ab2 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/CML_core_tb_23.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.957054612407e-01 + 1.728000000000e-10 -1.475216919691e-01 + 1.828000000000e-10 3.196996632833e-02 + 1.928000000000e-10 1.773696584526e-01 + 2.028000000000e-10 2.602670445343e-01 + 2.128000000000e-10 2.919684489720e-01 + 2.228000000000e-10 3.273690981683e-01 + 2.328000000000e-10 3.736661732429e-01 + 2.428000000000e-10 4.086769482098e-01 + 2.528000000000e-10 4.113258498473e-01 + 2.628000000000e-10 3.414272197123e-01 + 2.728000000000e-10 1.833836328070e-01 + 2.828000000000e-10 -4.501363849837e-03 + 2.928000000000e-10 -1.562318489881e-01 + 3.028000000000e-10 -2.435570784568e-01 + 3.128000000000e-10 -2.775386220390e-01 + 3.228000000000e-10 -3.142878056355e-01 + 3.328000000000e-10 -3.618442790176e-01 + 3.428000000000e-10 -3.986028140213e-01 + 3.528000000000e-10 -4.040381865127e-01 + 3.628000000000e-10 -3.369104214062e-01 + 3.728000000000e-10 -1.811830752063e-01 + 3.828000000000e-10 5.355128083595e-03 + 3.928000000000e-10 1.563630270676e-01 + 4.028000000000e-10 2.436522664355e-01 + 4.128000000000e-10 2.777202130414e-01 + 4.228000000000e-10 3.146716935396e-01 + 4.328000000000e-10 3.621309165835e-01 + 4.428000000000e-10 3.988648293319e-01 + 4.528000000000e-10 4.040567761896e-01 + 4.628000000000e-10 3.368362274946e-01 + 4.728000000000e-10 1.809052635954e-01 + 4.828000000000e-10 -5.606347307292e-03 + 4.928000000000e-10 -1.566747533637e-01 + 5.028000000000e-10 -2.438438929936e-01 + 5.128000000000e-10 -2.779365198916e-01 + 5.228000000000e-10 -3.147868656031e-01 + 5.328000000000e-10 -3.623069078218e-01 + 5.428000000000e-10 -3.989546307961e-01 + 5.528000000000e-10 -4.041975741324e-01 + 5.628000000000e-10 -3.368831845243e-01 + 5.728000000000e-10 -1.810020824460e-01 + 5.828000000000e-10 5.593858826262e-03 + 5.928000000000e-10 1.566090374935e-01 + 6.028000000000e-10 2.438493522755e-01 + 6.128000000000e-10 2.778818285943e-01 + 6.228000000000e-10 3.147972496077e-01 + 6.328000000000e-10 3.622530927659e-01 + 6.428000000000e-10 3.989689895438e-01 + 6.528000000000e-10 4.041528360847e-01 + 6.628000000000e-10 3.369065350765e-01 + 6.728000000000e-10 1.809679655825e-01 + 6.828000000000e-10 -5.565139497590e-03 + 6.928000000000e-10 -1.566366178225e-01 + 7.028000000000e-10 -2.438204188033e-01 + 7.128000000000e-10 -2.779089356335e-01 + 7.228000000000e-10 -3.147686522157e-01 + 7.328000000000e-10 -3.622826637804e-01 + 7.428000000000e-10 -3.989411843085e-01 + 7.528000000000e-10 -4.041807678845e-01 + 7.628000000000e-10 -3.368790616195e-01 + 7.728000000000e-10 -1.809947630224e-01 + 7.828000000000e-10 5.591512634984e-03 + 7.928000000000e-10 1.566120178189e-01 + 8.028000000000e-10 2.438458933358e-01 + 8.128000000000e-10 2.778849719194e-01 + 8.228000000000e-10 3.147945034671e-01 + 8.328000000000e-10 3.622568751046e-01 + 8.428000000000e-10 3.989662140554e-01 + 8.528000000000e-10 4.041558823701e-01 + 8.628000000000e-10 3.369030769235e-01 + 8.728000000000e-10 1.809706945647e-01 + 8.828000000000e-10 -5.568483515763e-03 + 8.928000000000e-10 -1.566340912711e-01 + 9.028000000000e-10 -2.438236181184e-01 + 9.128000000000e-10 -2.779064153414e-01 + 9.228000000000e-10 -3.147718720666e-01 + 9.328000000000e-10 -3.622798572716e-01 + 9.428000000000e-10 -3.989444036153e-01 + 9.528000000000e-10 -4.041778978449e-01 + 9.628000000000e-10 -3.368819513246e-01 + 9.728000000000e-10 -1.809921012276e-01 + 9.828000000000e-10 5.588724287086e-03 + 9.928000000000e-10 1.566143682128e-01 + 1.000000000000e-09 2.267750497136e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/conditions.yaml new file mode 100644 index 00000000..b643cd45 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 23 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_23 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/CML_core_tb.sch new file mode 100644 index 00000000..d0cf47f8 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/CML_core_tb_24.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/CML_core_tb_24.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/CML_core_tb_24.data new file mode 100644 index 00000000..a01deb89 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/CML_core_tb_24.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -1.908985659112e-01 + 1.728000000000e-10 -9.049079150817e-02 + 1.828000000000e-10 3.945873683219e-02 + 1.928000000000e-10 1.521437177417e-01 + 2.028000000000e-10 2.220068772324e-01 + 2.128000000000e-10 2.535092334052e-01 + 2.228000000000e-10 2.861973397174e-01 + 2.328000000000e-10 3.239843013312e-01 + 2.428000000000e-10 3.520113017607e-01 + 2.528000000000e-10 3.540468115658e-01 + 2.628000000000e-10 2.949447709683e-01 + 2.728000000000e-10 1.587983397866e-01 + 2.828000000000e-10 -6.865354773069e-03 + 2.928000000000e-10 -1.448078480843e-01 + 3.028000000000e-10 -2.275605338030e-01 + 3.128000000000e-10 -2.625604064747e-01 + 3.228000000000e-10 -2.958552078644e-01 + 3.328000000000e-10 -3.351711406638e-01 + 3.428000000000e-10 -3.644984224381e-01 + 3.528000000000e-10 -3.669950471097e-01 + 3.628000000000e-10 -3.072796408874e-01 + 3.728000000000e-10 -1.699866077827e-01 + 3.828000000000e-10 -2.842045316933e-03 + 3.928000000000e-10 1.365086891956e-01 + 4.028000000000e-10 2.207869920157e-01 + 4.128000000000e-10 2.567713461579e-01 + 4.228000000000e-10 2.907030026757e-01 + 4.328000000000e-10 3.302687598301e-01 + 4.428000000000e-10 3.600803190405e-01 + 4.528000000000e-10 3.632331450943e-01 + 4.628000000000e-10 3.045482678871e-01 + 4.728000000000e-10 1.682698274629e-01 + 4.828000000000e-10 2.058504292284e-03 + 4.928000000000e-10 -1.367871396964e-01 + 5.028000000000e-10 -2.207717990252e-01 + 5.128000000000e-10 -2.567684885934e-01 + 5.228000000000e-10 -2.906651825463e-01 + 5.328000000000e-10 -3.302494358660e-01 + 5.428000000000e-10 -3.599712284157e-01 + 5.528000000000e-10 -3.631239508150e-01 + 5.628000000000e-10 -3.043584109358e-01 + 5.728000000000e-10 -1.680958385636e-01 + 5.828000000000e-10 -1.834034512727e-03 + 5.928000000000e-10 1.369613450439e-01 + 6.028000000000e-10 2.209618957221e-01 + 6.128000000000e-10 2.568952536478e-01 + 6.228000000000e-10 2.908171185353e-01 + 6.328000000000e-10 3.303549214919e-01 + 6.428000000000e-10 3.601082390759e-01 + 6.528000000000e-10 3.632059905221e-01 + 6.628000000000e-10 3.044557238628e-01 + 6.728000000000e-10 1.681292777859e-01 + 6.828000000000e-10 1.882442241730e-03 + 6.928000000000e-10 -1.369637862409e-01 + 7.028000000000e-10 -2.209363992802e-01 + 7.128000000000e-10 -2.569065829626e-01 + 7.228000000000e-10 -2.907936706940e-01 + 7.328000000000e-10 -3.303682701482e-01 + 7.428000000000e-10 -3.600879594395e-01 + 7.528000000000e-10 -3.632220959958e-01 + 7.628000000000e-10 -3.044401007882e-01 + 7.728000000000e-10 -1.681486407544e-01 + 7.828000000000e-10 -1.870004957548e-03 + 7.928000000000e-10 1.369437070838e-01 + 8.028000000000e-10 2.209481957039e-01 + 8.128000000000e-10 2.568879030180e-01 + 8.228000000000e-10 2.908064848389e-01 + 8.328000000000e-10 3.303493303219e-01 + 8.428000000000e-10 3.601006147126e-01 + 8.528000000000e-10 3.632041339109e-01 + 8.628000000000e-10 3.044528281549e-01 + 8.728000000000e-10 1.681322760827e-01 + 8.828000000000e-10 1.883536763259e-03 + 8.928000000000e-10 -1.369582535540e-01 + 9.028000000000e-10 -2.209346296842e-01 + 9.128000000000e-10 -2.569016830366e-01 + 9.228000000000e-10 -2.907925936742e-01 + 9.328000000000e-10 -3.303636164667e-01 + 9.428000000000e-10 -3.600871302257e-01 + 9.528000000000e-10 -3.632178492939e-01 + 9.628000000000e-10 -3.044398392752e-01 + 9.728000000000e-10 -1.681454261603e-01 + 9.828000000000e-10 -1.870628705438e-03 + 9.928000000000e-10 1.369459433541e-01 + 1.000000000000e-09 2.037746084522e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/conditions.yaml new file mode 100644 index 00000000..732b12b0 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 24 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_24 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/CML_core_tb.sch new file mode 100644 index 00000000..bbf3946c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/CML_core_tb_25.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/CML_core_tb_25.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/CML_core_tb_25.data new file mode 100644 index 00000000..182746dc --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/CML_core_tb_25.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -1.878715792581e-01 + 1.728000000000e-10 -8.812036120597e-02 + 1.828000000000e-10 4.046526586524e-02 + 1.928000000000e-10 1.515705626527e-01 + 2.028000000000e-10 2.200566198342e-01 + 2.128000000000e-10 2.503583455541e-01 + 2.228000000000e-10 2.832914205797e-01 + 2.328000000000e-10 3.216696186231e-01 + 2.428000000000e-10 3.500303926946e-01 + 2.528000000000e-10 3.524815741411e-01 + 2.628000000000e-10 2.936462106779e-01 + 2.728000000000e-10 1.576219496242e-01 + 2.828000000000e-10 -7.121462127754e-03 + 2.928000000000e-10 -1.436071598858e-01 + 3.028000000000e-10 -2.249496922999e-01 + 3.128000000000e-10 -2.586592240194e-01 + 3.228000000000e-10 -2.922419569702e-01 + 3.328000000000e-10 -3.321983211521e-01 + 3.428000000000e-10 -3.618684381611e-01 + 3.528000000000e-10 -3.648249016007e-01 + 3.628000000000e-10 -3.055379959953e-01 + 3.728000000000e-10 -1.686105488568e-01 + 3.828000000000e-10 -2.582643774162e-03 + 3.928000000000e-10 1.352182085241e-01 + 4.028000000000e-10 2.180702244722e-01 + 4.128000000000e-10 2.527783389641e-01 + 4.228000000000e-10 2.869845016096e-01 + 4.328000000000e-10 3.271697550530e-01 + 4.428000000000e-10 3.573213651505e-01 + 4.528000000000e-10 3.609341509143e-01 + 4.628000000000e-10 3.026708512688e-01 + 4.728000000000e-10 1.667591862946e-01 + 4.828000000000e-10 1.676053368052e-03 + 4.928000000000e-10 -1.356064331336e-01 + 5.028000000000e-10 -2.181494577446e-01 + 5.128000000000e-10 -2.528581012316e-01 + 5.228000000000e-10 -2.870203472690e-01 + 5.328000000000e-10 -3.272198972187e-01 + 5.428000000000e-10 -3.572767955086e-01 + 5.528000000000e-10 -3.608816832152e-01 + 5.628000000000e-10 -3.025243774497e-01 + 5.728000000000e-10 -1.666129730216e-01 + 5.828000000000e-10 -1.465204057357e-03 + 5.928000000000e-10 1.357749931272e-01 + 6.028000000000e-10 2.183376260095e-01 + 6.128000000000e-10 2.529831758691e-01 + 6.228000000000e-10 2.871716452249e-01 + 6.328000000000e-10 3.273254918206e-01 + 6.428000000000e-10 3.574148326524e-01 + 6.528000000000e-10 3.609652866209e-01 + 6.628000000000e-10 3.026246199120e-01 + 6.728000000000e-10 1.666502220733e-01 + 6.828000000000e-10 1.518129196282e-03 + 6.928000000000e-10 -1.357732099566e-01 + 7.028000000000e-10 -2.183080403425e-01 + 7.128000000000e-10 -2.529912058397e-01 + 7.228000000000e-10 -2.871450109118e-01 + 7.328000000000e-10 -3.273360198503e-01 + 7.428000000000e-10 -3.573916245859e-01 + 7.528000000000e-10 -3.609790664977e-01 + 7.628000000000e-10 -3.026068066478e-01 + 7.728000000000e-10 -1.666683959674e-01 + 7.828000000000e-10 -1.504711775466e-03 + 7.928000000000e-10 1.357534602326e-01 + 8.028000000000e-10 2.183202914392e-01 + 8.128000000000e-10 2.529726082081e-01 + 8.228000000000e-10 2.871582302084e-01 + 8.328000000000e-10 3.273171284192e-01 + 8.428000000000e-10 3.574045685766e-01 + 8.528000000000e-10 3.609610284998e-01 + 8.628000000000e-10 3.026196909841e-01 + 8.728000000000e-10 1.666518528053e-01 + 8.828000000000e-10 1.518315117290e-03 + 8.928000000000e-10 -1.357682747942e-01 + 9.028000000000e-10 -2.183066580359e-01 + 9.128000000000e-10 -2.529866332266e-01 + 9.228000000000e-10 -2.871442829871e-01 + 9.328000000000e-10 -3.273316607928e-01 + 9.428000000000e-10 -3.573910212469e-01 + 9.528000000000e-10 -3.609749965926e-01 + 9.628000000000e-10 -3.026065830591e-01 + 9.728000000000e-10 -1.666652414066e-01 + 9.828000000000e-10 -1.505286118034e-03 + 9.928000000000e-10 1.357557668798e-01 + 1.000000000000e-09 2.016242513907e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/conditions.yaml new file mode 100644 index 00000000..9845abaf --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 25 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_25 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/CML_core_tb.sch new file mode 100644 index 00000000..b7b8186b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/CML_core_tb_26.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/CML_core_tb_26.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/CML_core_tb_26.data new file mode 100644 index 00000000..c21b093d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/CML_core_tb_26.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.135873679018e-01 + 1.728000000000e-10 -1.054229355639e-01 + 1.828000000000e-10 3.485798650969e-02 + 1.928000000000e-10 1.569675139767e-01 + 2.028000000000e-10 2.330635404696e-01 + 2.128000000000e-10 2.680443549179e-01 + 2.228000000000e-10 3.014044829899e-01 + 2.328000000000e-10 3.394080314353e-01 + 2.428000000000e-10 3.679529618424e-01 + 2.528000000000e-10 3.700593040123e-01 + 2.628000000000e-10 3.097824620429e-01 + 2.728000000000e-10 1.706514675999e-01 + 2.828000000000e-10 3.558070014658e-04 + 2.928000000000e-10 -1.428409974599e-01 + 3.028000000000e-10 -2.298289579719e-01 + 3.128000000000e-10 -2.678794741753e-01 + 3.228000000000e-10 -3.017454056957e-01 + 3.328000000000e-10 -3.410620518407e-01 + 3.428000000000e-10 -3.712405389398e-01 + 3.528000000000e-10 -3.749327973471e-01 + 3.628000000000e-10 -3.157484466493e-01 + 3.728000000000e-10 -1.773087198166e-01 + 3.828000000000e-10 -7.070252178339e-03 + 3.928000000000e-10 1.364462941621e-01 + 4.028000000000e-10 2.243241068758e-01 + 4.128000000000e-10 2.631279769125e-01 + 4.228000000000e-10 2.976097246349e-01 + 4.328000000000e-10 3.371159716785e-01 + 4.428000000000e-10 3.676405775058e-01 + 4.528000000000e-10 3.717787254056e-01 + 4.628000000000e-10 3.133854979421e-01 + 4.728000000000e-10 1.756870158595e-01 + 4.828000000000e-10 6.171257018760e-03 + 4.928000000000e-10 -1.369680995621e-01 + 5.028000000000e-10 -2.245781248931e-01 + 5.128000000000e-10 -2.633829468620e-01 + 5.228000000000e-10 -2.978042748481e-01 + 5.328000000000e-10 -3.373348877854e-01 + 5.428000000000e-10 -3.677584906255e-01 + 5.528000000000e-10 -3.718812762918e-01 + 5.628000000000e-10 -3.133649557524e-01 + 5.728000000000e-10 -1.756479312047e-01 + 5.828000000000e-10 -6.040608056278e-03 + 5.928000000000e-10 1.370690415770e-01 + 6.028000000000e-10 2.247181767783e-01 + 6.128000000000e-10 2.634617265965e-01 + 6.228000000000e-10 2.979157296699e-01 + 6.328000000000e-10 3.373958940353e-01 + 6.428000000000e-10 3.678612954525e-01 + 6.528000000000e-10 3.719309221475e-01 + 6.628000000000e-10 3.134447453066e-01 + 6.728000000000e-10 1.756687688086e-01 + 6.828000000000e-10 6.090200135509e-03 + 6.928000000000e-10 -1.370702307281e-01 + 7.028000000000e-10 -2.246847420648e-01 + 7.128000000000e-10 -2.634701196121e-01 + 7.228000000000e-10 -2.978849158722e-01 + 7.328000000000e-10 -3.374068878437e-01 + 7.428000000000e-10 -3.678336110941e-01 + 7.528000000000e-10 -3.719446503824e-01 + 7.628000000000e-10 -3.134227431793e-01 + 7.728000000000e-10 -1.756868885858e-01 + 7.828000000000e-10 -6.072676723321e-03 + 7.928000000000e-10 1.370503070743e-01 + 8.028000000000e-10 2.247004966695e-01 + 8.128000000000e-10 2.634509722982e-01 + 8.228000000000e-10 2.979013793804e-01 + 8.328000000000e-10 3.373870921905e-01 + 8.428000000000e-10 3.678495602861e-01 + 8.528000000000e-10 3.719256264749e-01 + 8.628000000000e-10 3.134381864470e-01 + 8.728000000000e-10 1.756688935561e-01 + 8.828000000000e-10 6.088345643719e-03 + 8.928000000000e-10 -1.370666831053e-01 + 9.028000000000e-10 -2.246851372638e-01 + 9.128000000000e-10 -2.634666121684e-01 + 9.228000000000e-10 -2.978856025968e-01 + 9.328000000000e-10 -3.374033621769e-01 + 9.428000000000e-10 -3.678342837151e-01 + 9.528000000000e-10 -3.719412125322e-01 + 9.628000000000e-10 -3.134235677100e-01 + 9.728000000000e-10 -1.756838495744e-01 + 9.828000000000e-10 -6.073781243164e-03 + 9.928000000000e-10 1.370527135588e-01 + 1.000000000000e-09 2.065229990524e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/conditions.yaml new file mode 100644 index 00000000..dc7ab87e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 26 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/run_26 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/simulation_summary.csv b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/simulation_summary.csv new file mode 100644 index 00000000..6598603d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/simulation_summary.csv @@ -0,0 +1,28 @@ +run,corner,temperature,vdd,time,vo_diff,amplitude +run_00,tt,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.111e-01, -1.870e-01, -3.563e-02, …]",0.382 +run_01,ff,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.099e-01, -1.895e-01, -4.060e-02, …]",0.377 +run_02,ss,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.163e-01, -1.876e-01, -3.217e-02, …]",0.390 +run_03,tt,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.915e-01, -1.780e-01, -3.803e-02, …]",0.357 +run_04,ff,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.909e-01, -1.806e-01, -4.276e-02, …]",0.353 +run_05,ss,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.959e-01, -1.792e-01, -3.599e-02, …]",0.366 +run_06,tt,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.689e-01, -1.692e-01, -4.423e-02, …]",0.319 +run_07,ff,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.694e-01, -1.722e-01, -4.907e-02, …]",0.315 +run_08,ss,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.723e-01, -1.701e-01, -4.252e-02, …]",0.330 +run_09,tt,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.623e-01, -1.963e-01, -5.713e-03, …]",0.421 +run_10,ff,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.622e-01, -1.984e-01, -1.024e-02, …]",0.418 +run_11,ss,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.669e-01, -1.979e-01, -3.070e-03, …]",0.429 +run_12,tt,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.388e-01, -1.852e-01, -4.985e-03, …]",0.401 +run_13,ff,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.407e-01, -1.880e-01, -9.263e-03, …]",0.398 +run_14,ss,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.446e-01, -1.889e-01, -5.355e-03, …]",0.409 +run_15,tt,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.832e-01, -1.548e-01, 2.955e-03, …]",0.371 +run_16,ff,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.908e-01, -1.609e-01, -2.321e-03, …]",0.368 +run_17,ss,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.858e-01, -1.573e-01, 2.540e-03, …]",0.379 +run_18,tt,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.214e-01, -1.558e-01, 3.477e-02, …]",0.418 +run_19,ff,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.163e-01, -1.529e-01, 3.475e-02, …]",0.415 +run_20,ss,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.365e-01, -1.657e-01, 3.100e-02, …]",0.426 +run_21,tt,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.748e-01, -1.328e-01, 3.931e-02, …]",0.400 +run_22,ff,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.701e-01, -1.295e-01, 4.028e-02, …]",0.397 +run_23,ss,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.957e-01, -1.475e-01, 3.197e-02, …]",0.408 +run_24,tt,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-1.909e-01, -9.049e-02, 3.946e-02, …]",0.365 +run_25,ff,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-1.879e-01, -8.812e-02, 4.047e-02, …]",0.363 +run_26,ss,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.136e-01, -1.054e-01, 3.486e-02, …]",0.373 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/simulation_summary.md b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/simulation_summary.md new file mode 100644 index 00000000..f9fdc781 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Amplitude/simulation_summary.md @@ -0,0 +1,31 @@ +# Simulation Summary for Amplitude + +| run | corner | temperature | vdd | time | vo_diff | amplitude | +| :-- | -----: | ----------: | --: | ---: | ------: | --------: | +| run_00 | tt | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.111e-01, -1.870e-01, -3.563e-02, …] | 0.382 | +| run_01 | ff | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.099e-01, -1.895e-01, -4.060e-02, …] | 0.377 | +| run_02 | ss | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.163e-01, -1.876e-01, -3.217e-02, …] | 0.390 | +| run_03 | tt | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.915e-01, -1.780e-01, -3.803e-02, …] | 0.357 | +| run_04 | ff | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.909e-01, -1.806e-01, -4.276e-02, …] | 0.353 | +| run_05 | ss | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.959e-01, -1.792e-01, -3.599e-02, …] | 0.366 | +| run_06 | tt | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.689e-01, -1.692e-01, -4.423e-02, …] | 0.319 | +| run_07 | ff | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.694e-01, -1.722e-01, -4.907e-02, …] | 0.315 | +| run_08 | ss | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.723e-01, -1.701e-01, -4.252e-02, …] | 0.330 | +| run_09 | tt | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.623e-01, -1.963e-01, -5.713e-03, …] | 0.421 | +| run_10 | ff | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.622e-01, -1.984e-01, -1.024e-02, …] | 0.418 | +| run_11 | ss | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.669e-01, -1.979e-01, -3.070e-03, …] | 0.429 | +| run_12 | tt | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.388e-01, -1.852e-01, -4.985e-03, …] | 0.401 | +| run_13 | ff | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.407e-01, -1.880e-01, -9.263e-03, …] | 0.398 | +| run_14 | ss | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.446e-01, -1.889e-01, -5.355e-03, …] | 0.409 | +| run_15 | tt | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.832e-01, -1.548e-01, 2.955e-03, …] | 0.371 | +| run_16 | ff | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.908e-01, -1.609e-01, -2.321e-03, …] | 0.368 | +| run_17 | ss | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.858e-01, -1.573e-01, 2.540e-03, …] | 0.379 | +| run_18 | tt | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.214e-01, -1.558e-01, 3.477e-02, …] | 0.418 | +| run_19 | ff | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.163e-01, -1.529e-01, 3.475e-02, …] | 0.415 | +| run_20 | ss | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.365e-01, -1.657e-01, 3.100e-02, …] | 0.426 | +| run_21 | tt | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.748e-01, -1.328e-01, 3.931e-02, …] | 0.400 | +| run_22 | ff | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.701e-01, -1.295e-01, 4.028e-02, …] | 0.397 | +| run_23 | ss | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.957e-01, -1.475e-01, 3.197e-02, …] | 0.408 | +| run_24 | tt | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-1.909e-01, -9.049e-02, 3.946e-02, …] | 0.365 | +| run_25 | ff | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-1.879e-01, -8.812e-02, 4.047e-02, …] | 0.363 | +| run_26 | ss | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.136e-01, -1.054e-01, 3.486e-02, …] | 0.373 | diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/CML_core_tb.sch new file mode 100644 index 00000000..48f6f0bb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=CACE\{vdd\} savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/frequency.png b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/frequency.png new file mode 100644 index 0000000000000000000000000000000000000000..e4b0a21a410ea45152b21e69092b27c4fd38834f GIT binary patch literal 187075 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�wTWw%38sW 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 t6~vlD*Y&45GNmD literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/CML_core_tb.sch new file mode 100644 index 00000000..f7566d3a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/CML_core_tb_0.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/CML_core_tb_0.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/CML_core_tb_0.data new file mode 100644 index 00000000..4cb5b399 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/CML_core_tb_0.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.110742996065e-01 + 1.728000000000e-10 -1.869505717284e-01 + 1.828000000000e-10 -3.563037101706e-02 + 1.928000000000e-10 1.056708524540e-01 + 2.028000000000e-10 2.100393804445e-01 + 2.128000000000e-10 2.784249297688e-01 + 2.228000000000e-10 3.224310579067e-01 + 2.328000000000e-10 3.548600651170e-01 + 2.428000000000e-10 3.792482005271e-01 + 2.528000000000e-10 3.740820324036e-01 + 2.628000000000e-10 3.079440308227e-01 + 2.728000000000e-10 1.813826171807e-01 + 2.828000000000e-10 2.923027813912e-02 + 2.928000000000e-10 -1.118282325615e-01 + 3.028000000000e-10 -2.157337068367e-01 + 3.128000000000e-10 -2.829033176767e-01 + 3.228000000000e-10 -3.260714502323e-01 + 3.328000000000e-10 -3.577361248183e-01 + 3.428000000000e-10 -3.819104006606e-01 + 3.528000000000e-10 -3.764730474160e-01 + 3.628000000000e-10 -3.102968359246e-01 + 3.728000000000e-10 -1.832608913655e-01 + 3.828000000000e-10 -3.084931437320e-02 + 3.928000000000e-10 1.106163095990e-01 + 4.028000000000e-10 2.145714971977e-01 + 4.128000000000e-10 2.819937231053e-01 + 4.228000000000e-10 3.251740998910e-01 + 4.328000000000e-10 3.570946969464e-01 + 4.428000000000e-10 3.813004444382e-01 + 4.528000000000e-10 3.761230596147e-01 + 4.628000000000e-10 3.099646053412e-01 + 4.728000000000e-10 1.831473345022e-01 + 4.828000000000e-10 3.069401022130e-02 + 4.928000000000e-10 -1.106258411343e-01 + 5.028000000000e-10 -2.146793601179e-01 + 5.128000000000e-10 -2.820035552799e-01 + 5.228000000000e-10 -3.252909243829e-01 + 5.328000000000e-10 -3.570986338553e-01 + 5.428000000000e-10 -3.813904658256e-01 + 5.528000000000e-10 -3.760889514061e-01 + 5.628000000000e-10 -3.100114096943e-01 + 5.728000000000e-10 -1.830827247194e-01 + 5.828000000000e-10 -3.072480545922e-02 + 5.928000000000e-10 1.106906463094e-01 + 6.028000000000e-10 2.146493837568e-01 + 6.128000000000e-10 2.820610673881e-01 + 6.228000000000e-10 3.252525482967e-01 + 6.328000000000e-10 3.571504708749e-01 + 6.428000000000e-10 3.813516648295e-01 + 6.528000000000e-10 3.761390656738e-01 + 6.628000000000e-10 3.099742259389e-01 + 6.728000000000e-10 1.831331110808e-01 + 6.828000000000e-10 3.068765829312e-02 + 6.928000000000e-10 -1.106445812930e-01 + 7.028000000000e-10 -2.146859050297e-01 + 7.128000000000e-10 -2.820172231683e-01 + 7.228000000000e-10 -3.252905125649e-01 + 7.328000000000e-10 -3.571078709926e-01 + 7.428000000000e-10 -3.813893177320e-01 + 7.528000000000e-10 -3.760986555866e-01 + 7.628000000000e-10 -3.100117776476e-01 + 7.728000000000e-10 -1.830935153198e-01 + 7.828000000000e-10 -3.072484475908e-02 + 7.928000000000e-10 1.106810594907e-01 + 8.028000000000e-10 2.146507312123e-01 + 8.128000000000e-10 2.820530370402e-01 + 8.228000000000e-10 3.252547871433e-01 + 8.328000000000e-10 3.571432636036e-01 + 8.428000000000e-10 3.813547544577e-01 + 8.528000000000e-10 3.761324372121e-01 + 8.628000000000e-10 3.099775475493e-01 + 8.728000000000e-10 1.831274535707e-01 + 8.828000000000e-10 3.069175078476e-02 + 8.928000000000e-10 -1.106491559136e-01 + 9.028000000000e-10 -2.146821655528e-01 + 9.128000000000e-10 -2.820218639330e-01 + 9.228000000000e-10 -3.252864642203e-01 + 9.328000000000e-10 -3.571122611941e-01 + 9.428000000000e-10 -3.813854215351e-01 + 9.528000000000e-10 -3.761024723822e-01 + 9.628000000000e-10 -3.100075395903e-01 + 9.728000000000e-10 -1.830975404653e-01 + 9.828000000000e-10 -3.072097080048e-02 + 9.928000000000e-10 1.106770531472e-01 + 1.000000000000e-09 1.895325033433e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/conditions.yaml new file mode 100644 index 00000000..62a942f3 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_00 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/CML_core_tb.sch new file mode 100644 index 00000000..ce2556fe --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/CML_core_tb_1.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/CML_core_tb_1.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/CML_core_tb_1.data new file mode 100644 index 00000000..2b8492c0 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/CML_core_tb_1.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.098686002716e-01 + 1.728000000000e-10 -1.894560696460e-01 + 1.828000000000e-10 -4.059695742871e-02 + 1.928000000000e-10 9.940964501315e-02 + 2.028000000000e-10 2.033133834097e-01 + 2.128000000000e-10 2.719620830710e-01 + 2.228000000000e-10 3.163098950569e-01 + 2.328000000000e-10 3.491513279687e-01 + 2.428000000000e-10 3.741332087119e-01 + 2.528000000000e-10 3.700254590965e-01 + 2.628000000000e-10 3.062168938694e-01 + 2.728000000000e-10 1.827341653261e-01 + 2.828000000000e-10 3.280764574542e-02 + 2.928000000000e-10 -1.069769977212e-01 + 3.028000000000e-10 -2.102924295592e-01 + 3.128000000000e-10 -2.774748738503e-01 + 3.228000000000e-10 -3.207751929169e-01 + 3.328000000000e-10 -3.527202709264e-01 + 3.428000000000e-10 -3.774342269369e-01 + 3.528000000000e-10 -3.730540733905e-01 + 3.628000000000e-10 -3.091949741363e-01 + 3.728000000000e-10 -1.851642002832e-01 + 3.828000000000e-10 -3.487935842603e-02 + 3.928000000000e-10 1.053970083053e-01 + 4.028000000000e-10 2.088131472734e-01 + 4.128000000000e-10 2.762908135843e-01 + 4.228000000000e-10 3.196385089100e-01 + 4.328000000000e-10 3.518763575372e-01 + 4.428000000000e-10 3.766558038448e-01 + 4.528000000000e-10 3.725714207051e-01 + 4.628000000000e-10 3.087619830708e-01 + 4.728000000000e-10 1.849833837695e-01 + 4.828000000000e-10 3.467977975354e-02 + 4.928000000000e-10 -1.054340839288e-01 + 5.028000000000e-10 -2.089448612506e-01 + 5.128000000000e-10 -2.763231704068e-01 + 5.228000000000e-10 -3.197791718821e-01 + 5.328000000000e-10 -3.518998659973e-01 + 5.428000000000e-10 -3.767613178326e-01 + 5.528000000000e-10 -3.725445308461e-01 + 5.628000000000e-10 -3.088109693961e-01 + 5.728000000000e-10 -1.849155432321e-01 + 5.828000000000e-10 -3.470667341543e-02 + 5.928000000000e-10 1.055048847061e-01 + 6.028000000000e-10 2.089187592091e-01 + 6.128000000000e-10 2.763849186823e-01 + 6.228000000000e-10 3.197425041182e-01 + 6.328000000000e-10 3.519544114659e-01 + 6.428000000000e-10 3.767237647599e-01 + 6.528000000000e-10 3.725977061828e-01 + 6.628000000000e-10 3.087755728399e-01 + 6.728000000000e-10 1.849692271918e-01 + 6.828000000000e-10 3.467099374312e-02 + 6.928000000000e-10 -1.054562384013e-01 + 7.028000000000e-10 -2.089544093361e-01 + 7.128000000000e-10 -2.763388509076e-01 + 7.228000000000e-10 -3.197800091948e-01 + 7.328000000000e-10 -3.519101110125e-01 + 7.428000000000e-10 -3.767612419697e-01 + 7.528000000000e-10 -3.725558598664e-01 + 7.628000000000e-10 -3.088133010441e-01 + 7.728000000000e-10 -1.849285593480e-01 + 7.828000000000e-10 -3.470862903587e-02 + 7.928000000000e-10 1.054936381918e-01 + 8.028000000000e-10 2.089186129636e-01 + 8.128000000000e-10 2.763755879874e-01 + 8.228000000000e-10 3.197437164625e-01 + 8.328000000000e-10 3.519463479929e-01 + 8.428000000000e-10 3.767260853907e-01 + 8.528000000000e-10 3.725904126785e-01 + 8.628000000000e-10 3.087783440951e-01 + 8.728000000000e-10 1.849632167070e-01 + 8.828000000000e-10 3.467482549783e-02 + 8.928000000000e-10 -1.054610682584e-01 + 9.028000000000e-10 -2.089507846182e-01 + 9.128000000000e-10 -2.763436586770e-01 + 9.228000000000e-10 -3.197760754687e-01 + 9.328000000000e-10 -3.519146615050e-01 + 9.428000000000e-10 -3.767573997120e-01 + 9.528000000000e-10 -3.725597535055e-01 + 9.628000000000e-10 -3.088090609970e-01 + 9.728000000000e-10 -1.849326628321e-01 + 9.828000000000e-10 -3.470475490247e-02 + 9.928000000000e-10 1.054896146910e-01 + 1.000000000000e-09 1.838520001242e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/conditions.yaml new file mode 100644 index 00000000..075641ac --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 1 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_01 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/CML_core_tb.sch new file mode 100644 index 00000000..bda4d5a9 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/CML_core_tb_2.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/CML_core_tb_2.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/CML_core_tb_2.data new file mode 100644 index 00000000..b332ca2c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/CML_core_tb_2.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.162797108708e-01 + 1.728000000000e-10 -1.875883768906e-01 + 1.828000000000e-10 -3.217177564589e-02 + 1.928000000000e-10 1.118453904517e-01 + 2.028000000000e-10 2.178869753922e-01 + 2.128000000000e-10 2.869187499571e-01 + 2.228000000000e-10 3.311831063176e-01 + 2.328000000000e-10 3.637965093552e-01 + 2.428000000000e-10 3.884475585753e-01 + 2.528000000000e-10 3.831703446637e-01 + 2.628000000000e-10 3.149426000366e-01 + 2.728000000000e-10 1.840825734866e-01 + 2.828000000000e-10 2.786370536806e-02 + 2.928000000000e-10 -1.159899232258e-01 + 3.028000000000e-10 -2.217323928122e-01 + 3.128000000000e-10 -2.897841810826e-01 + 3.228000000000e-10 -3.334256487170e-01 + 3.328000000000e-10 -3.654508602495e-01 + 3.428000000000e-10 -3.900407544937e-01 + 3.528000000000e-10 -3.846189534315e-01 + 3.628000000000e-10 -3.164922452622e-01 + 3.728000000000e-10 -1.853182634851e-01 + 3.828000000000e-10 -2.898615964086e-02 + 3.928000000000e-10 1.151710782521e-01 + 4.028000000000e-10 2.209054309263e-01 + 4.128000000000e-10 2.891817322742e-01 + 4.228000000000e-10 3.328077516782e-01 + 4.328000000000e-10 3.650515838921e-01 + 4.428000000000e-10 3.896233583948e-01 + 4.528000000000e-10 3.844074302627e-01 + 4.628000000000e-10 3.162448842688e-01 + 4.728000000000e-10 1.852475068120e-01 + 4.828000000000e-10 2.884623360652e-02 + 4.928000000000e-10 -1.151788252337e-01 + 5.028000000000e-10 -2.210147130581e-01 + 5.128000000000e-10 -2.891872658193e-01 + 5.228000000000e-10 -3.329167168088e-01 + 5.328000000000e-10 -3.650471930963e-01 + 5.428000000000e-10 -3.897100874545e-01 + 5.528000000000e-10 -3.843762306477e-01 + 5.628000000000e-10 -3.163013912188e-01 + 5.728000000000e-10 -1.851950213487e-01 + 5.828000000000e-10 -2.889036873678e-02 + 5.928000000000e-10 1.152312899162e-01 + 6.028000000000e-10 2.209735588305e-01 + 6.128000000000e-10 2.892357416511e-01 + 6.228000000000e-10 3.328707955285e-01 + 6.328000000000e-10 3.650931065031e-01 + 6.428000000000e-10 3.896657987149e-01 + 6.528000000000e-10 3.844215105032e-01 + 6.628000000000e-10 3.162596917265e-01 + 6.728000000000e-10 1.852417351036e-01 + 6.828000000000e-10 2.884992827621e-02 + 6.928000000000e-10 -1.151876679011e-01 + 7.028000000000e-10 -2.210123101756e-01 + 7.128000000000e-10 -2.891938845816e-01 + 7.228000000000e-10 -3.329106389600e-01 + 7.328000000000e-10 -3.650518039465e-01 + 7.428000000000e-10 -3.897047407363e-01 + 7.528000000000e-10 -3.843819858648e-01 + 7.628000000000e-10 -3.162978744015e-01 + 7.728000000000e-10 -1.852023753321e-01 + 7.828000000000e-10 -2.888743165850e-02 + 7.928000000000e-10 1.152240030808e-01 + 8.028000000000e-10 2.209771419031e-01 + 8.128000000000e-10 2.892295361788e-01 + 8.228000000000e-10 3.328747680971e-01 + 8.328000000000e-10 3.650871456099e-01 + 8.428000000000e-10 3.896701175780e-01 + 8.528000000000e-10 3.844156912621e-01 + 8.628000000000e-10 3.162637401476e-01 + 8.728000000000e-10 1.852363586492e-01 + 8.828000000000e-10 2.885434112124e-02 + 8.928000000000e-10 -1.151920978903e-01 + 9.028000000000e-10 -2.210084087345e-01 + 9.128000000000e-10 -2.891984388712e-01 + 9.228000000000e-10 -3.329064027155e-01 + 9.328000000000e-10 -3.650560988894e-01 + 9.428000000000e-10 -3.897007143418e-01 + 9.528000000000e-10 -3.843858173814e-01 + 9.628000000000e-10 -3.162935974835e-01 + 9.728000000000e-10 -1.852064424274e-01 + 9.828000000000e-10 -2.888350905479e-02 + 9.928000000000e-10 1.152199079204e-01 + 1.000000000000e-09 1.954791142410e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/conditions.yaml new file mode 100644 index 00000000..03a4d140 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 2 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_02 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/CML_core_tb.sch new file mode 100644 index 00000000..41b0e418 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/CML_core_tb_3.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/CML_core_tb_3.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/CML_core_tb_3.data new file mode 100644 index 00000000..6dccbfd6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/CML_core_tb_3.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.914571027454e-01 + 1.728000000000e-10 -1.780117263272e-01 + 1.828000000000e-10 -3.802564096594e-02 + 1.928000000000e-10 9.479025580261e-02 + 2.028000000000e-10 1.961220444980e-01 + 2.128000000000e-10 2.643669322964e-01 + 2.228000000000e-10 3.071498875260e-01 + 2.328000000000e-10 3.351667250191e-01 + 2.428000000000e-10 3.529478733093e-01 + 2.528000000000e-10 3.439767079911e-01 + 2.628000000000e-10 2.827109934029e-01 + 2.728000000000e-10 1.683025534555e-01 + 2.828000000000e-10 2.843266655337e-02 + 2.928000000000e-10 -1.036223502576e-01 + 3.028000000000e-10 -2.042863713809e-01 + 3.128000000000e-10 -2.713818104821e-01 + 3.228000000000e-10 -3.132717880322e-01 + 3.328000000000e-10 -3.402903477971e-01 + 3.428000000000e-10 -3.574262556597e-01 + 3.528000000000e-10 -3.476240566503e-01 + 3.628000000000e-10 -2.857203755187e-01 + 3.728000000000e-10 -1.703849236420e-01 + 3.828000000000e-10 -2.994825869373e-02 + 3.928000000000e-10 1.026817167876e-01 + 4.028000000000e-10 2.034750084544e-01 + 4.128000000000e-10 2.707812081585e-01 + 4.228000000000e-10 3.126503625184e-01 + 4.328000000000e-10 3.399043734480e-01 + 4.428000000000e-10 3.571021595385e-01 + 4.528000000000e-10 3.475896983741e-01 + 4.628000000000e-10 2.857411927694e-01 + 4.728000000000e-10 1.706053611761e-01 + 4.828000000000e-10 3.010795594348e-02 + 4.928000000000e-10 -1.024135388755e-01 + 5.028000000000e-10 -2.033190471438e-01 + 5.128000000000e-10 -2.705615444577e-01 + 5.228000000000e-10 -3.125558523975e-01 + 5.328000000000e-10 -3.397330193449e-01 + 5.428000000000e-10 -3.570354300338e-01 + 5.528000000000e-10 -3.474353611027e-01 + 5.628000000000e-10 -2.856876769732e-01 + 5.728000000000e-10 -1.704760895977e-01 + 5.828000000000e-10 -3.008641427314e-02 + 5.928000000000e-10 1.025087996136e-01 + 6.028000000000e-10 2.033209986443e-01 + 6.128000000000e-10 2.706412375819e-01 + 6.228000000000e-10 3.125457575810e-01 + 6.328000000000e-10 3.398008382665e-01 + 6.428000000000e-10 3.570145583479e-01 + 6.528000000000e-10 3.474888598072e-01 + 6.628000000000e-10 2.856551852535e-01 + 6.728000000000e-10 1.705188293935e-01 + 6.828000000000e-10 3.004736925580e-02 + 6.928000000000e-10 -1.024728514478e-01 + 7.028000000000e-10 -2.033602328622e-01 + 7.128000000000e-10 -2.706061106716e-01 + 7.228000000000e-10 -3.125843283316e-01 + 7.328000000000e-10 -3.397655433228e-01 + 7.428000000000e-10 -3.570523646632e-01 + 7.528000000000e-10 -3.474554820929e-01 + 7.628000000000e-10 -2.856929985560e-01 + 7.728000000000e-10 -1.704859799650e-01 + 7.828000000000e-10 -3.008383757896e-02 + 7.928000000000e-10 1.025039608177e-01 + 8.028000000000e-10 2.033261442763e-01 + 8.128000000000e-10 2.706371082838e-01 + 8.228000000000e-10 3.125504649737e-01 + 8.328000000000e-10 3.397966066528e-01 + 8.428000000000e-10 3.570198965640e-01 + 8.528000000000e-10 3.474857187206e-01 + 8.628000000000e-10 2.856614378232e-01 + 8.728000000000e-10 1.705164607562e-01 + 8.828000000000e-10 3.005354621749e-02 + 8.928000000000e-10 -1.024749769036e-01 + 9.028000000000e-10 -2.033548454455e-01 + 9.128000000000e-10 -2.706087008930e-01 + 9.228000000000e-10 -3.125792630790e-01 + 9.328000000000e-10 -3.397683901773e-01 + 9.428000000000e-10 -3.570478314069e-01 + 9.528000000000e-10 -3.474583427153e-01 + 9.628000000000e-10 -2.856887110961e-01 + 9.728000000000e-10 -1.704892548593e-01 + 9.828000000000e-10 -3.008001356704e-02 + 9.928000000000e-10 1.025005080892e-01 + 1.000000000000e-09 1.786649040194e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/conditions.yaml new file mode 100644 index 00000000..e3645c5e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 3 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_03 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/CML_core_tb.sch new file mode 100644 index 00000000..9a826220 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/CML_core_tb_4.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/CML_core_tb_4.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/CML_core_tb_4.data new file mode 100644 index 00000000..3efc8a54 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/CML_core_tb_4.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.908886906683e-01 + 1.728000000000e-10 -1.805890382926e-01 + 1.828000000000e-10 -4.276329247682e-02 + 1.928000000000e-10 8.882407595099e-02 + 2.028000000000e-10 1.894983505466e-01 + 2.128000000000e-10 2.576242567207e-01 + 2.228000000000e-10 3.005212718886e-01 + 2.328000000000e-10 3.289546768723e-01 + 2.428000000000e-10 3.474240530436e-01 + 2.528000000000e-10 3.394794629215e-01 + 2.628000000000e-10 2.802266193594e-01 + 2.728000000000e-10 1.685520573893e-01 + 2.828000000000e-10 3.081792474830e-02 + 2.928000000000e-10 -9.985913249602e-02 + 3.028000000000e-10 -1.996535082954e-01 + 3.128000000000e-10 -2.663519845580e-01 + 3.228000000000e-10 -3.081166100610e-01 + 3.328000000000e-10 -3.353557582557e-01 + 3.428000000000e-10 -3.530339682910e-01 + 3.528000000000e-10 -3.441234226063e-01 + 3.628000000000e-10 -2.840838930007e-01 + 3.728000000000e-10 -1.712890179908e-01 + 3.828000000000e-10 -3.280692441870e-02 + 3.928000000000e-10 9.858702888345e-02 + 4.028000000000e-10 1.985844458095e-01 + 4.128000000000e-10 2.655374220709e-01 + 4.228000000000e-10 3.073092043222e-01 + 4.328000000000e-10 3.348254361967e-01 + 4.428000000000e-10 3.526065806553e-01 + 4.528000000000e-10 3.440384505411e-01 + 4.628000000000e-10 2.840943593119e-01 + 4.728000000000e-10 1.715352376725e-01 + 4.828000000000e-10 3.300625747524e-02 + 4.928000000000e-10 -9.826793525126e-02 + 5.028000000000e-10 -1.983826392696e-01 + 5.128000000000e-10 -2.652748957302e-01 + 5.228000000000e-10 -3.071819372703e-01 + 5.328000000000e-10 -3.346211766496e-01 + 5.428000000000e-10 -3.525115401756e-01 + 5.528000000000e-10 -3.438520776438e-01 + 5.628000000000e-10 -2.840132934403e-01 + 5.728000000000e-10 -1.713783534881e-01 + 5.828000000000e-10 -3.296528839742e-02 + 5.928000000000e-10 9.838210726041e-02 + 6.028000000000e-10 1.983970962128e-01 + 6.128000000000e-10 2.653685996210e-01 + 6.228000000000e-10 3.071805271474e-01 + 6.328000000000e-10 3.346994451143e-01 + 6.428000000000e-10 3.524959527178e-01 + 6.528000000000e-10 3.439124816552e-01 + 6.628000000000e-10 2.839825148385e-01 + 6.728000000000e-10 1.714247364616e-01 + 6.828000000000e-10 3.292536702304e-02 + 6.928000000000e-10 -9.834444145178e-02 + 7.028000000000e-10 -1.984381153623e-01 + 7.128000000000e-10 -2.653318964793e-01 + 7.228000000000e-10 -3.072207693265e-01 + 7.328000000000e-10 -3.346627011511e-01 + 7.428000000000e-10 -3.525355719541e-01 + 7.528000000000e-10 -3.438780517049e-01 + 7.628000000000e-10 -2.840226095914e-01 + 7.728000000000e-10 -1.713910964736e-01 + 7.828000000000e-10 -3.296406429130e-02 + 7.928000000000e-10 9.837645950128e-02 + 8.028000000000e-10 1.984019833998e-01 + 8.128000000000e-10 2.653640104122e-01 + 8.228000000000e-10 3.071850636337e-01 + 8.328000000000e-10 3.346949515146e-01 + 8.428000000000e-10 3.525014052751e-01 + 8.528000000000e-10 3.439095067618e-01 + 8.628000000000e-10 2.839893402731e-01 + 8.728000000000e-10 1.714228569780e-01 + 8.828000000000e-10 3.293222880403e-02 + 8.928000000000e-10 -9.834616516704e-02 + 9.028000000000e-10 -1.984321208293e-01 + 9.128000000000e-10 -2.653341991167e-01 + 9.228000000000e-10 -3.072152380466e-01 + 9.328000000000e-10 -3.346653803170e-01 + 9.428000000000e-10 -3.525306496503e-01 + 9.528000000000e-10 -3.438807929682e-01 + 9.628000000000e-10 -2.840179937834e-01 + 9.728000000000e-10 -1.713943425416e-01 + 9.828000000000e-10 -3.296001530074e-02 + 9.928000000000e-10 9.837298926970e-02 + 1.000000000000e-09 1.738955459088e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/conditions.yaml new file mode 100644 index 00000000..3dbeec10 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 4 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_04 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/CML_core_tb.sch new file mode 100644 index 00000000..1e05865b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/CML_core_tb_5.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/CML_core_tb_5.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/CML_core_tb_5.data new file mode 100644 index 00000000..0cc77d23 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/CML_core_tb_5.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.958574299710e-01 + 1.728000000000e-10 -1.791897212785e-01 + 1.828000000000e-10 -3.599075048614e-02 + 1.928000000000e-10 9.946703268478e-02 + 2.028000000000e-10 2.032502871016e-01 + 2.128000000000e-10 2.733994094958e-01 + 2.228000000000e-10 3.172845988123e-01 + 2.328000000000e-10 3.455609123691e-01 + 2.428000000000e-10 3.630923957132e-01 + 2.528000000000e-10 3.534419450967e-01 + 2.628000000000e-10 2.903663934708e-01 + 2.728000000000e-10 1.726743312860e-01 + 2.828000000000e-10 2.930291139472e-02 + 2.928000000000e-10 -1.057514312075e-01 + 3.028000000000e-10 -2.091913834589e-01 + 3.128000000000e-10 -2.784696434768e-01 + 3.228000000000e-10 -3.216873931074e-01 + 3.328000000000e-10 -3.491870426412e-01 + 3.428000000000e-10 -3.662894191498e-01 + 3.528000000000e-10 -3.560374131806e-01 + 3.628000000000e-10 -2.925719059469e-01 + 3.728000000000e-10 -1.742159787839e-01 + 3.828000000000e-10 -3.049391935212e-02 + 3.928000000000e-10 1.049756016137e-01 + 4.028000000000e-10 2.084672065617e-01 + 4.128000000000e-10 2.779301238417e-01 + 4.228000000000e-10 3.211180618030e-01 + 4.328000000000e-10 3.488255023686e-01 + 4.428000000000e-10 3.659572542624e-01 + 4.528000000000e-10 3.559493947967e-01 + 4.628000000000e-10 2.925058094407e-01 + 4.728000000000e-10 1.743267017008e-01 + 4.828000000000e-10 3.054314172764e-02 + 4.928000000000e-10 -1.048175245910e-01 + 5.028000000000e-10 -2.084096499031e-01 + 5.128000000000e-10 -2.777998408986e-01 + 5.228000000000e-10 -3.210985617265e-01 + 5.328000000000e-10 -3.487226120056e-01 + 5.428000000000e-10 -3.659481451181e-01 + 5.528000000000e-10 -3.558482598240e-01 + 5.628000000000e-10 -2.924942070749e-01 + 5.728000000000e-10 -1.742324941843e-01 + 5.828000000000e-10 -3.054486718364e-02 + 5.928000000000e-10 1.048934295445e-01 + 6.028000000000e-10 2.083991544976e-01 + 6.128000000000e-10 2.778660140822e-01 + 6.228000000000e-10 3.210794561497e-01 + 6.328000000000e-10 3.487805773205e-01 + 6.428000000000e-10 3.659226785140e-01 + 6.528000000000e-10 3.558970058340e-01 + 6.628000000000e-10 2.924624137185e-01 + 6.728000000000e-10 1.742748110039e-01 + 6.828000000000e-10 3.050920657876e-02 + 6.928000000000e-10 -1.048562048812e-01 + 7.028000000000e-10 -2.084343791218e-01 + 7.128000000000e-10 -2.778299623633e-01 + 7.228000000000e-10 -3.211147582115e-01 + 7.328000000000e-10 -3.487447461690e-01 + 7.428000000000e-10 -3.659575085549e-01 + 7.528000000000e-10 -3.558632428052e-01 + 7.628000000000e-10 -2.924972481137e-01 + 7.728000000000e-10 -1.742418088753e-01 + 7.828000000000e-10 -3.054328720193e-02 + 7.928000000000e-10 1.048870377838e-01 + 8.028000000000e-10 2.084024115537e-01 + 8.128000000000e-10 2.778603942564e-01 + 8.228000000000e-10 3.210827582845e-01 + 8.328000000000e-10 3.487751488045e-01 + 8.428000000000e-10 3.659266824704e-01 + 8.528000000000e-10 3.558925702991e-01 + 8.628000000000e-10 2.924671830422e-01 + 8.728000000000e-10 1.742711856894e-01 + 8.828000000000e-10 3.051417003050e-02 + 8.928000000000e-10 -1.048591994973e-01 + 9.028000000000e-10 -2.084299430076e-01 + 9.128000000000e-10 -2.778331783696e-01 + 9.228000000000e-10 -3.211104359655e-01 + 9.328000000000e-10 -3.487480244246e-01 + 9.428000000000e-10 -3.659535267111e-01 + 9.528000000000e-10 -3.558663548813e-01 + 9.628000000000e-10 -2.924933270906e-01 + 9.728000000000e-10 -1.742451324195e-01 + 9.828000000000e-10 -3.053963678018e-02 + 9.928000000000e-10 1.048836196344e-01 + 1.000000000000e-09 1.830293824662e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/conditions.yaml new file mode 100644 index 00000000..0d1d4faa --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 5 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_05 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/CML_core_tb.sch new file mode 100644 index 00000000..55e67d0d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/CML_core_tb_6.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/CML_core_tb_6.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/CML_core_tb_6.data new file mode 100644 index 00000000..38ffd8bf --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/CML_core_tb_6.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.689355033953e-01 + 1.728000000000e-10 -1.691728954892e-01 + 1.828000000000e-10 -4.423302134033e-02 + 1.928000000000e-10 7.663444207075e-02 + 2.028000000000e-10 1.714764750752e-01 + 2.128000000000e-10 2.368219567798e-01 + 2.228000000000e-10 2.772768132445e-01 + 2.328000000000e-10 3.013675537348e-01 + 2.428000000000e-10 3.140706479520e-01 + 2.528000000000e-10 3.038549886105e-01 + 2.628000000000e-10 2.508404086347e-01 + 2.728000000000e-10 1.528360605683e-01 + 2.828000000000e-10 3.040034809293e-02 + 2.928000000000e-10 -8.785381094258e-02 + 3.028000000000e-10 -1.808734961109e-01 + 3.128000000000e-10 -2.445795528199e-01 + 3.228000000000e-10 -2.838354337528e-01 + 3.328000000000e-10 -3.065800962400e-01 + 3.428000000000e-10 -3.181767360109e-01 + 3.528000000000e-10 -3.065752663659e-01 + 3.628000000000e-10 -2.523878800401e-01 + 3.728000000000e-10 -1.531173668737e-01 + 3.828000000000e-10 -2.992055538556e-02 + 3.928000000000e-10 8.900435641641e-02 + 4.028000000000e-10 1.821756238512e-01 + 4.128000000000e-10 2.460123650690e-01 + 4.228000000000e-10 2.851182310100e-01 + 4.328000000000e-10 3.079291995556e-01 + 4.428000000000e-10 3.194129911462e-01 + 4.528000000000e-10 3.078915366323e-01 + 4.628000000000e-10 2.535144344421e-01 + 4.728000000000e-10 1.541542026196e-01 + 4.828000000000e-10 3.063651583090e-02 + 4.928000000000e-10 -8.839161491074e-02 + 5.028000000000e-10 -1.817999659778e-01 + 5.128000000000e-10 -2.456456661989e-01 + 5.228000000000e-10 -2.849195350591e-01 + 5.328000000000e-10 -3.077091828990e-01 + 5.428000000000e-10 -3.193505374448e-01 + 5.528000000000e-10 -3.078081521678e-01 + 5.628000000000e-10 -2.535787813503e-01 + 5.728000000000e-10 -1.541764927596e-01 + 5.828000000000e-10 -3.077048554081e-02 + 5.928000000000e-10 8.832790620553e-02 + 6.028000000000e-10 1.816551916875e-01 + 6.128000000000e-10 2.455879975104e-01 + 6.228000000000e-10 2.847911932982e-01 + 6.328000000000e-10 3.076677363016e-01 + 6.428000000000e-10 3.192371229053e-01 + 6.528000000000e-10 3.077778412262e-01 + 6.628000000000e-10 2.534819327505e-01 + 6.728000000000e-10 1.541683138663e-01 + 6.828000000000e-10 3.070155435378e-02 + 6.928000000000e-10 -8.831320560130e-02 + 7.028000000000e-10 -1.817038543937e-01 + 7.128000000000e-10 -2.455619958387e-01 + 7.228000000000e-10 -2.848320347671e-01 + 7.328000000000e-10 -3.076358698550e-01 + 7.428000000000e-10 -3.192710667609e-01 + 7.528000000000e-10 -3.077409972388e-01 + 7.628000000000e-10 -2.535098012890e-01 + 7.728000000000e-10 -1.541282589474e-01 + 7.828000000000e-10 -3.072672689244e-02 + 7.928000000000e-10 8.835148526653e-02 + 8.028000000000e-10 1.816795669555e-01 + 8.128000000000e-10 2.455984246601e-01 + 8.228000000000e-10 2.848062931006e-01 + 8.328000000000e-10 3.076705916890e-01 + 8.428000000000e-10 3.192450073559e-01 + 8.528000000000e-10 3.077736319697e-01 + 8.628000000000e-10 2.534831121829e-01 + 8.728000000000e-10 1.541590953584e-01 + 8.828000000000e-10 3.069946612700e-02 + 8.928000000000e-10 -8.832341199891e-02 + 9.028000000000e-10 -1.817063952021e-01 + 9.128000000000e-10 -2.455714256322e-01 + 9.228000000000e-10 -2.848333922463e-01 + 9.328000000000e-10 -3.076440936715e-01 + 9.428000000000e-10 -3.192716274515e-01 + 9.528000000000e-10 -3.077481608676e-01 + 9.628000000000e-10 -2.535093614867e-01 + 9.728000000000e-10 -1.541340765567e-01 + 9.828000000000e-10 -3.072486745089e-02 + 9.928000000000e-10 8.834711873249e-02 + 1.000000000000e-09 1.586239577417e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/conditions.yaml new file mode 100644 index 00000000..817f52bc --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 6 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_06 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/CML_core_tb.sch new file mode 100644 index 00000000..201a3f16 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/CML_core_tb_7.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/CML_core_tb_7.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/CML_core_tb_7.data new file mode 100644 index 00000000..1cfe87b5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/CML_core_tb_7.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.694477874818e-01 + 1.728000000000e-10 -1.721829739194e-01 + 1.828000000000e-10 -4.906833766415e-02 + 1.928000000000e-10 7.069743134728e-02 + 2.028000000000e-10 1.648418946330e-01 + 2.128000000000e-10 2.298765389610e-01 + 2.228000000000e-10 2.702802052070e-01 + 2.328000000000e-10 2.947129455777e-01 + 2.428000000000e-10 3.081296602318e-01 + 2.528000000000e-10 2.990063012040e-01 + 2.628000000000e-10 2.478884705263e-01 + 2.728000000000e-10 1.524230846398e-01 + 2.828000000000e-10 3.216725009037e-02 + 2.928000000000e-10 -8.452884553171e-02 + 3.028000000000e-10 -1.764495371150e-01 + 3.128000000000e-10 -2.394951663999e-01 + 3.228000000000e-10 -2.784178156025e-01 + 3.328000000000e-10 -3.012580547427e-01 + 3.428000000000e-10 -3.133510931360e-01 + 3.528000000000e-10 -3.026055002423e-01 + 3.628000000000e-10 -2.500554574282e-01 + 3.728000000000e-10 -1.530444893437e-01 + 3.828000000000e-10 -3.179895766292e-02 + 3.928000000000e-10 8.573594509971e-02 + 4.028000000000e-10 1.778922744476e-01 + 4.128000000000e-10 2.411102030583e-01 + 4.228000000000e-10 2.798967112063e-01 + 4.328000000000e-10 3.028156837380e-01 + 4.428000000000e-10 3.148075876296e-01 + 4.528000000000e-10 3.041758344829e-01 + 4.628000000000e-10 2.514478797306e-01 + 4.728000000000e-10 1.543354303295e-01 + 4.828000000000e-10 3.272908827542e-02 + 4.928000000000e-10 -8.494488064942e-02 + 5.028000000000e-10 -1.773750790235e-01 + 5.128000000000e-10 -2.406241070550e-01 + 5.228000000000e-10 -2.796032327906e-01 + 5.328000000000e-10 -3.025154625175e-01 + 5.428000000000e-10 -3.146850050735e-01 + 5.528000000000e-10 -3.040456856306e-01 + 5.628000000000e-10 -2.514865398019e-01 + 5.728000000000e-10 -1.543455010081e-01 + 5.828000000000e-10 -3.286780649422e-02 + 5.928000000000e-10 8.487071769529e-02 + 6.028000000000e-10 1.772120847555e-01 + 6.128000000000e-10 2.405506532865e-01 + 6.228000000000e-10 2.794557736074e-01 + 6.328000000000e-10 3.024581955274e-01 + 6.428000000000e-10 3.145521515255e-01 + 6.528000000000e-10 3.039990633934e-01 + 6.628000000000e-10 2.513709142203e-01 + 6.728000000000e-10 1.543241408079e-01 + 6.828000000000e-10 3.278555364704e-02 + 6.928000000000e-10 -8.486327141666e-02 + 7.028000000000e-10 -1.772689800248e-01 + 7.128000000000e-10 -2.405282060865e-01 + 7.228000000000e-10 -2.795021370136e-01 + 7.328000000000e-10 -3.024278022377e-01 + 7.428000000000e-10 -3.145896170200e-01 + 7.528000000000e-10 -3.039617953787e-01 + 7.628000000000e-10 -2.514004690324e-01 + 7.728000000000e-10 -1.542820043229e-01 + 7.828000000000e-10 -3.281110337775e-02 + 7.928000000000e-10 8.490436306023e-02 + 8.028000000000e-10 1.772446330839e-01 + 8.128000000000e-10 2.405674335146e-01 + 8.228000000000e-10 2.794761963085e-01 + 8.328000000000e-10 3.024650976088e-01 + 8.428000000000e-10 3.145632644585e-01 + 8.528000000000e-10 3.039968961590e-01 + 8.628000000000e-10 2.513733111446e-01 + 8.728000000000e-10 1.543150179356e-01 + 8.828000000000e-10 3.278304586331e-02 + 8.928000000000e-10 -8.487456857602e-02 + 9.028000000000e-10 -1.772725618584e-01 + 9.128000000000e-10 -2.405389250041e-01 + 9.228000000000e-10 -2.795045102279e-01 + 9.328000000000e-10 -3.024372521320e-01 + 9.428000000000e-10 -3.145911572553e-01 + 9.528000000000e-10 -3.039701598993e-01 + 9.628000000000e-10 -2.514009218164e-01 + 9.728000000000e-10 -1.542887967264e-01 + 9.828000000000e-10 -3.280979517783e-02 + 9.928000000000e-10 8.489941508642e-02 + 1.000000000000e-09 1.544118489485e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/conditions.yaml new file mode 100644 index 00000000..08e8ff34 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 7 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_07 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/CML_core_tb.sch new file mode 100644 index 00000000..e3d0951d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/CML_core_tb_8.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/CML_core_tb_8.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/CML_core_tb_8.data new file mode 100644 index 00000000..b4ed17dd --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/CML_core_tb_8.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.722799425151e-01 + 1.728000000000e-10 -1.701277707773e-01 + 1.828000000000e-10 -4.252496989706e-02 + 1.928000000000e-10 8.092536896213e-02 + 2.028000000000e-10 1.785199933375e-01 + 2.128000000000e-10 2.463984181452e-01 + 2.228000000000e-10 2.885755113271e-01 + 2.328000000000e-10 3.131967480955e-01 + 2.428000000000e-10 3.255285716483e-01 + 2.528000000000e-10 3.143820454109e-01 + 2.628000000000e-10 2.595824958850e-01 + 2.728000000000e-10 1.585585813323e-01 + 2.828000000000e-10 3.254606172598e-02 + 2.928000000000e-10 -8.921916265210e-02 + 3.028000000000e-10 -1.857143058967e-01 + 3.128000000000e-10 -2.524588707093e-01 + 3.228000000000e-10 -2.937876617757e-01 + 3.328000000000e-10 -3.173655773168e-01 + 3.428000000000e-10 -3.288566343508e-01 + 3.528000000000e-10 -3.166123605828e-01 + 3.628000000000e-10 -2.609360611345e-01 + 3.728000000000e-10 -1.589355414621e-01 + 3.828000000000e-10 -3.237621747627e-02 + 3.928000000000e-10 8.990939637816e-02 + 4.028000000000e-10 1.864994737191e-01 + 4.128000000000e-10 2.533636311879e-01 + 4.228000000000e-10 2.945633129641e-01 + 4.328000000000e-10 3.182197832362e-01 + 4.428000000000e-10 3.296245618008e-01 + 4.528000000000e-10 3.174841059207e-01 + 4.628000000000e-10 2.616780558587e-01 + 4.728000000000e-10 1.596622360522e-01 + 4.828000000000e-10 3.287681921596e-02 + 4.928000000000e-10 -8.943999963453e-02 + 5.028000000000e-10 -1.862066308093e-01 + 5.128000000000e-10 -2.530527908612e-01 + 5.228000000000e-10 -2.943931136832e-01 + 5.328000000000e-10 -3.180152021024e-01 + 5.428000000000e-10 -3.295545667130e-01 + 5.528000000000e-10 -3.173812952412e-01 + 5.628000000000e-10 -2.617027726155e-01 + 5.728000000000e-10 -1.596411992093e-01 + 5.828000000000e-10 -3.295895028258e-02 + 5.928000000000e-10 8.942267434718e-02 + 6.028000000000e-10 1.861105403656e-01 + 6.128000000000e-10 2.530344325895e-01 + 6.228000000000e-10 2.943051008579e-01 + 6.328000000000e-10 3.180051485103e-01 + 6.428000000000e-10 3.294737915539e-01 + 6.528000000000e-10 3.173744791022e-01 + 6.628000000000e-10 2.616291881364e-01 + 6.728000000000e-10 1.596450333001e-01 + 6.828000000000e-10 3.290088244348e-02 + 6.928000000000e-10 -8.940659470005e-02 + 7.028000000000e-10 -1.861562133447e-01 + 7.128000000000e-10 -2.530116656482e-01 + 7.228000000000e-10 -2.943454309811e-01 + 7.328000000000e-10 -3.179780561670e-01 + 7.428000000000e-10 -3.295087969733e-01 + 7.528000000000e-10 -3.173438661274e-01 + 7.628000000000e-10 -2.616591955397e-01 + 7.728000000000e-10 -1.596115565426e-01 + 7.828000000000e-10 -3.292790237402e-02 + 7.928000000000e-10 8.943927261705e-02 + 8.028000000000e-10 1.861310420114e-01 + 8.128000000000e-10 2.530433655174e-01 + 8.228000000000e-10 2.943195630770e-01 + 8.328000000000e-10 3.180088285378e-01 + 8.428000000000e-10 3.294832118435e-01 + 8.528000000000e-10 3.173732295072e-01 + 8.628000000000e-10 2.616337486722e-01 + 8.728000000000e-10 1.596399004289e-01 + 8.828000000000e-10 3.290244884503e-02 + 8.928000000000e-10 -8.941301350766e-02 + 9.028000000000e-10 -1.861557185261e-01 + 9.128000000000e-10 -2.530180139920e-01 + 9.228000000000e-10 -2.943444772306e-01 + 9.328000000000e-10 -3.179838696148e-01 + 9.428000000000e-10 -3.295076633013e-01 + 9.528000000000e-10 -3.173492560727e-01 + 9.628000000000e-10 -2.616577755083e-01 + 9.728000000000e-10 -1.596163947717e-01 + 9.828000000000e-10 -3.292583900074e-02 + 9.928000000000e-10 8.943518431692e-02 + 1.000000000000e-09 1.621529465729e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/conditions.yaml new file mode 100644 index 00000000..25e239b1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 8 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_08 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/CML_core_tb.sch new file mode 100644 index 00000000..e903fb36 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/CML_core_tb_9.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/CML_core_tb_9.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/CML_core_tb_9.data new file mode 100644 index 00000000..6b24d1d6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/CML_core_tb_9.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.622644182692e-01 + 1.728000000000e-10 -1.962653738736e-01 + 1.828000000000e-10 -5.712895575235e-03 + 1.928000000000e-10 1.510345047594e-01 + 2.028000000000e-10 2.432775412534e-01 + 2.128000000000e-10 2.772000132926e-01 + 2.228000000000e-10 3.161630086256e-01 + 2.328000000000e-10 3.654121904616e-01 + 2.428000000000e-10 4.070200809677e-01 + 2.528000000000e-10 4.211809118313e-01 + 2.628000000000e-10 3.552666659990e-01 + 2.728000000000e-10 1.954111420719e-01 + 2.828000000000e-10 7.499275151763e-03 + 2.928000000000e-10 -1.488912332472e-01 + 3.028000000000e-10 -2.420325529570e-01 + 3.128000000000e-10 -2.768171400503e-01 + 3.228000000000e-10 -3.164103191401e-01 + 3.328000000000e-10 -3.656815561297e-01 + 3.428000000000e-10 -4.072561733660e-01 + 3.528000000000e-10 -4.210637971044e-01 + 3.628000000000e-10 -3.548415521036e-01 + 3.728000000000e-10 -1.946286859654e-01 + 3.828000000000e-10 -6.746438981043e-03 + 3.928000000000e-10 1.496127957227e-01 + 4.028000000000e-10 2.425057762271e-01 + 4.128000000000e-10 2.772590268750e-01 + 4.228000000000e-10 3.167075169816e-01 + 4.328000000000e-10 3.660182242119e-01 + 4.428000000000e-10 4.074726111052e-01 + 4.528000000000e-10 4.212975956202e-01 + 4.628000000000e-10 3.549573822535e-01 + 4.728000000000e-10 1.947835560361e-01 + 4.828000000000e-10 6.801482567115e-03 + 4.928000000000e-10 -1.495086456760e-01 + 5.028000000000e-10 -2.424863730465e-01 + 5.128000000000e-10 -2.771744431737e-01 + 5.228000000000e-10 -3.166940000076e-01 + 5.328000000000e-10 -3.659398771497e-01 + 5.428000000000e-10 -4.074689465730e-01 + 5.528000000000e-10 -4.212394549000e-01 + 5.628000000000e-10 -3.549741510035e-01 + 5.728000000000e-10 -1.947436351784e-01 + 5.828000000000e-10 -6.830080160870e-03 + 5.928000000000e-10 1.495407150967e-01 + 6.028000000000e-10 2.424570295697e-01 + 6.128000000000e-10 2.772066160972e-01 + 6.228000000000e-10 3.166654934082e-01 + 6.328000000000e-10 3.659723864247e-01 + 6.428000000000e-10 4.074416211051e-01 + 6.528000000000e-10 4.212697301261e-01 + 6.628000000000e-10 3.549467093259e-01 + 6.728000000000e-10 1.947718238583e-01 + 6.828000000000e-10 6.800951177238e-03 + 6.928000000000e-10 -1.495148390529e-01 + 7.028000000000e-10 -2.424852043575e-01 + 7.128000000000e-10 -2.771809105751e-01 + 7.228000000000e-10 -3.166930947909e-01 + 7.328000000000e-10 -3.659459016360e-01 + 7.428000000000e-10 -4.074677461547e-01 + 7.528000000000e-10 -4.212442717757e-01 + 7.628000000000e-10 -3.549717520551e-01 + 7.728000000000e-10 -1.947463263521e-01 + 7.828000000000e-10 -6.825916545420e-03 + 7.928000000000e-10 1.495385751436e-01 + 8.028000000000e-10 2.424609931904e-01 + 8.128000000000e-10 2.772040406871e-01 + 8.228000000000e-10 3.166687905139e-01 + 8.328000000000e-10 3.659694951712e-01 + 8.428000000000e-10 4.074447010218e-01 + 8.528000000000e-10 4.212671408417e-01 + 8.628000000000e-10 3.549498827484e-01 + 8.728000000000e-10 1.947689363825e-01 + 8.828000000000e-10 6.803756635994e-03 + 8.928000000000e-10 -1.495176738691e-01 + 9.028000000000e-10 -2.424825342063e-01 + 9.128000000000e-10 -2.771836734306e-01 + 9.228000000000e-10 -3.166902103892e-01 + 9.328000000000e-10 -3.659485359213e-01 + 9.428000000000e-10 -4.074650210911e-01 + 9.528000000000e-10 -4.212469657833e-01 + 9.628000000000e-10 -3.549694058275e-01 + 9.728000000000e-10 -1.947487958951e-01 + 9.828000000000e-10 -6.823236278537e-03 + 9.928000000000e-10 1.495363177485e-01 + 1.000000000000e-09 2.250264100511e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/conditions.yaml new file mode 100644 index 00000000..3bbed872 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 9 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_09 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/CML_core_tb.sch new file mode 100644 index 00000000..a7c357a8 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/CML_core_tb_10.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/CML_core_tb_10.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/CML_core_tb_10.data new file mode 100644 index 00000000..f64d27bb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/CML_core_tb_10.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.621881537650e-01 + 1.728000000000e-10 -1.984429143572e-01 + 1.828000000000e-10 -1.024381876325e-02 + 1.928000000000e-10 1.456486678579e-01 + 2.028000000000e-10 2.379497773075e-01 + 2.128000000000e-10 2.714724605336e-01 + 2.228000000000e-10 3.108042897090e-01 + 2.328000000000e-10 3.600441003378e-01 + 2.428000000000e-10 4.020596908788e-01 + 2.528000000000e-10 4.176332246346e-01 + 2.628000000000e-10 3.534480183483e-01 + 2.728000000000e-10 1.957884716864e-01 + 2.828000000000e-10 1.048070619246e-02 + 2.928000000000e-10 -1.446967472000e-01 + 3.028000000000e-10 -2.375576326508e-01 + 3.128000000000e-10 -2.717915022579e-01 + 3.228000000000e-10 -3.116603869888e-01 + 3.328000000000e-10 -3.608573425706e-01 + 3.428000000000e-10 -4.027490548925e-01 + 3.528000000000e-10 -4.178578104758e-01 + 3.628000000000e-10 -3.532507313188e-01 + 3.728000000000e-10 -1.951536666098e-01 + 3.828000000000e-10 -9.813336101525e-03 + 3.928000000000e-10 1.453604720604e-01 + 4.028000000000e-10 2.379857130154e-01 + 4.128000000000e-10 2.721818635676e-01 + 4.228000000000e-10 3.119088225778e-01 + 4.328000000000e-10 3.611475798924e-01 + 4.428000000000e-10 4.029304727738e-01 + 4.528000000000e-10 4.180700216423e-01 + 4.628000000000e-10 3.533627988360e-01 + 4.728000000000e-10 1.953149158213e-01 + 4.828000000000e-10 9.881134950277e-03 + 4.928000000000e-10 -1.452466419838e-01 + 5.028000000000e-10 -2.379576224969e-01 + 5.128000000000e-10 -2.720935242692e-01 + 5.228000000000e-10 -3.118909714313e-01 + 5.328000000000e-10 -3.610674239906e-01 + 5.428000000000e-10 -4.029229661263e-01 + 5.528000000000e-10 -4.180098057029e-01 + 5.628000000000e-10 -3.533753449283e-01 + 5.728000000000e-10 -1.952727841385e-01 + 5.828000000000e-10 -9.906008920915e-03 + 5.928000000000e-10 1.452800172029e-01 + 6.028000000000e-10 2.379306740359e-01 + 6.128000000000e-10 2.721261300904e-01 + 6.228000000000e-10 3.118646486801e-01 + 6.328000000000e-10 3.611003417151e-01 + 6.428000000000e-10 4.028972890619e-01 + 6.528000000000e-10 4.180401129989e-01 + 6.628000000000e-10 3.533488930459e-01 + 6.728000000000e-10 1.953007885397e-01 + 6.828000000000e-10 9.878072761317e-03 + 6.928000000000e-10 -1.452545395230e-01 + 7.028000000000e-10 -2.379578117562e-01 + 7.128000000000e-10 -2.721008877684e-01 + 7.228000000000e-10 -3.118914026492e-01 + 7.328000000000e-10 -3.610744602697e-01 + 7.428000000000e-10 -4.029226014194e-01 + 7.528000000000e-10 -4.180151483436e-01 + 7.628000000000e-10 -3.533732531474e-01 + 7.728000000000e-10 -1.952759500525e-01 + 7.828000000000e-10 -9.902411226855e-03 + 7.928000000000e-10 1.452776462046e-01 + 8.028000000000e-10 2.379341379884e-01 + 8.128000000000e-10 2.721234101956e-01 + 8.228000000000e-10 3.118677116052e-01 + 8.328000000000e-10 3.610975209728e-01 + 8.428000000000e-10 4.029000595077e-01 + 8.528000000000e-10 4.180375331400e-01 + 8.628000000000e-10 3.533517750284e-01 + 8.728000000000e-10 1.952981248182e-01 + 8.828000000000e-10 9.880873061622e-03 + 8.928000000000e-10 -1.452571579233e-01 + 9.028000000000e-10 -2.379551078725e-01 + 9.128000000000e-10 -2.721034614056e-01 + 9.228000000000e-10 -3.118886463518e-01 + 9.328000000000e-10 -3.610770519544e-01 + 9.428000000000e-10 -4.029199107687e-01 + 9.528000000000e-10 -4.180177452829e-01 + 9.628000000000e-10 -3.533708821878e-01 + 9.728000000000e-10 -1.952784134813e-01 + 9.828000000000e-10 -9.899898542678e-03 + 9.928000000000e-10 1.452754037376e-01 + 1.000000000000e-09 2.207322871295e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/conditions.yaml new file mode 100644 index 00000000..41e7da55 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 10 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_10 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/CML_core_tb.sch new file mode 100644 index 00000000..36ade9a1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/CML_core_tb_11.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/CML_core_tb_11.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/CML_core_tb_11.data new file mode 100644 index 00000000..1453012b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/CML_core_tb_11.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.668500025046e-01 + 1.728000000000e-10 -1.978704758130e-01 + 1.828000000000e-10 -3.069550951996e-03 + 1.928000000000e-10 1.561389387989e-01 + 2.028000000000e-10 2.488697408913e-01 + 2.128000000000e-10 2.833379270136e-01 + 2.228000000000e-10 3.221467647695e-01 + 2.328000000000e-10 3.723176028273e-01 + 2.428000000000e-10 4.147931582649e-01 + 2.528000000000e-10 4.286646301121e-01 + 2.628000000000e-10 3.614677855799e-01 + 2.728000000000e-10 1.982726052647e-01 + 2.828000000000e-10 5.580533140739e-03 + 2.928000000000e-10 -1.536551403474e-01 + 3.028000000000e-10 -2.474729097395e-01 + 3.128000000000e-10 -2.827981749211e-01 + 3.228000000000e-10 -3.222400643179e-01 + 3.328000000000e-10 -3.724510578191e-01 + 3.428000000000e-10 -4.149487937489e-01 + 3.528000000000e-10 -4.285094572794e-01 + 3.628000000000e-10 -3.610716711123e-01 + 3.728000000000e-10 -1.975613483211e-01 + 3.828000000000e-10 -4.936396792217e-03 + 3.928000000000e-10 1.542720670721e-01 + 4.028000000000e-10 2.478554934965e-01 + 4.128000000000e-10 2.831768205427e-01 + 4.228000000000e-10 3.224764565266e-01 + 4.328000000000e-10 3.727376628527e-01 + 4.428000000000e-10 4.151128450004e-01 + 4.528000000000e-10 4.287030398326e-01 + 4.628000000000e-10 3.611465460996e-01 + 4.728000000000e-10 1.976871290976e-01 + 4.828000000000e-10 4.962067120498e-03 + 4.928000000000e-10 -1.541857483448e-01 + 5.028000000000e-10 -2.478549856990e-01 + 5.128000000000e-10 -2.831031432303e-01 + 5.228000000000e-10 -3.224786212940e-01 + 5.328000000000e-10 -3.726675199031e-01 + 5.428000000000e-10 -4.151222726988e-01 + 5.528000000000e-10 -4.286496175832e-01 + 5.628000000000e-10 -3.611719348809e-01 + 5.728000000000e-10 -1.976471175954e-01 + 5.828000000000e-10 -4.995016715658e-03 + 5.928000000000e-10 1.542195273485e-01 + 6.028000000000e-10 2.478226151197e-01 + 6.128000000000e-10 2.831371441394e-01 + 6.228000000000e-10 3.224465270882e-01 + 6.328000000000e-10 3.727020829784e-01 + 6.428000000000e-10 4.150919188021e-01 + 6.528000000000e-10 4.286821395136e-01 + 6.628000000000e-10 3.611419365066e-01 + 6.728000000000e-10 1.976777927703e-01 + 6.828000000000e-10 4.963507878799e-03 + 6.928000000000e-10 -1.541913949207e-01 + 7.028000000000e-10 -2.478529800499e-01 + 7.128000000000e-10 -2.831092109235e-01 + 7.228000000000e-10 -3.224762894768e-01 + 7.328000000000e-10 -3.726728668334e-01 + 7.428000000000e-10 -4.151201370880e-01 + 7.528000000000e-10 -4.286543531433e-01 + 7.628000000000e-10 -3.611692599178e-01 + 7.728000000000e-10 -1.976499135935e-01 + 7.828000000000e-10 -4.990471824028e-03 + 7.928000000000e-10 1.542171227717e-01 + 8.028000000000e-10 2.478269854332e-01 + 8.128000000000e-10 2.831343470853e-01 + 8.228000000000e-10 3.224500362551e-01 + 8.328000000000e-10 3.726987138014e-01 + 8.428000000000e-10 4.150953468135e-01 + 8.528000000000e-10 4.286792233560e-01 + 8.628000000000e-10 3.611455588852e-01 + 8.728000000000e-10 1.976743961081e-01 + 8.828000000000e-10 4.966432661841e-03 + 8.928000000000e-10 -1.541946484524e-01 + 9.028000000000e-10 -2.478502288236e-01 + 9.128000000000e-10 -2.831123474050e-01 + 9.228000000000e-10 -3.224731331421e-01 + 9.328000000000e-10 -3.726757720747e-01 + 9.428000000000e-10 -4.151172388981e-01 + 9.528000000000e-10 -4.286573581279e-01 + 9.628000000000e-10 -3.611667698498e-01 + 9.728000000000e-10 -1.976525646923e-01 + 9.828000000000e-10 -4.987471597641e-03 + 9.928000000000e-10 1.542147143463e-01 + 1.000000000000e-09 2.301006397866e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/conditions.yaml new file mode 100644 index 00000000..88ded064 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 11 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_11 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/CML_core_tb.sch new file mode 100644 index 00000000..db33ed1d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/CML_core_tb_12.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/CML_core_tb_12.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/CML_core_tb_12.data new file mode 100644 index 00000000..3b0782c6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/CML_core_tb_12.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.388323931118e-01 + 1.728000000000e-10 -1.851651732117e-01 + 1.828000000000e-10 -4.985209728467e-03 + 1.928000000000e-10 1.464303664236e-01 + 2.028000000000e-10 2.390890865534e-01 + 2.128000000000e-10 2.778147857521e-01 + 2.228000000000e-10 3.140298283994e-01 + 2.328000000000e-10 3.564486269316e-01 + 2.428000000000e-10 3.920777300126e-01 + 2.528000000000e-10 4.026431485981e-01 + 2.628000000000e-10 3.407818057760e-01 + 2.728000000000e-10 1.919413521399e-01 + 2.828000000000e-10 1.380608162301e-02 + 2.928000000000e-10 -1.377275777470e-01 + 3.028000000000e-10 -2.320727525709e-01 + 3.128000000000e-10 -2.723718882130e-01 + 3.228000000000e-10 -3.097195919600e-01 + 3.328000000000e-10 -3.525356430610e-01 + 3.428000000000e-10 -3.885938438581e-01 + 3.528000000000e-10 -3.995683250409e-01 + 3.628000000000e-10 -3.382392747069e-01 + 3.728000000000e-10 -1.897685835172e-01 + 3.828000000000e-10 -1.211190537496e-02 + 3.928000000000e-10 1.391365825109e-01 + 4.028000000000e-10 2.331433172305e-01 + 4.128000000000e-10 2.733678679410e-01 + 4.228000000000e-10 3.105714733021e-01 + 4.328000000000e-10 3.533708758772e-01 + 4.428000000000e-10 3.892622592719e-01 + 4.528000000000e-10 4.001272859757e-01 + 4.628000000000e-10 3.385642563623e-01 + 4.728000000000e-10 1.899916781684e-01 + 4.828000000000e-10 1.218033620775e-02 + 4.928000000000e-10 -1.390656421002e-01 + 5.028000000000e-10 -2.331398693887e-01 + 5.128000000000e-10 -2.733037181082e-01 + 5.228000000000e-10 -3.105518491305e-01 + 5.328000000000e-10 -3.533032068815e-01 + 5.428000000000e-10 -3.892531494066e-01 + 5.528000000000e-10 -4.000849100741e-01 + 5.628000000000e-10 -3.385845178207e-01 + 5.728000000000e-10 -1.899774211598e-01 + 5.828000000000e-10 -1.221996984529e-02 + 5.928000000000e-10 1.390720456320e-01 + 6.028000000000e-10 2.331027694491e-01 + 6.128000000000e-10 2.733156842718e-01 + 6.228000000000e-10 3.105197170718e-01 + 6.328000000000e-10 3.533171034352e-01 + 6.428000000000e-10 3.892243222051e-01 + 6.528000000000e-10 4.000997182403e-01 + 6.628000000000e-10 3.385594083538e-01 + 6.728000000000e-10 1.899934277570e-01 + 6.828000000000e-10 1.219466050150e-02 + 6.928000000000e-10 -1.390553921853e-01 + 7.028000000000e-10 -2.331263672195e-01 + 7.128000000000e-10 -2.732987102222e-01 + 7.228000000000e-10 -3.105421090081e-01 + 7.328000000000e-10 -3.532994962925e-01 + 7.428000000000e-10 -3.892451651423e-01 + 7.528000000000e-10 -4.000824543639e-01 + 7.628000000000e-10 -3.385783830881e-01 + 7.728000000000e-10 -1.899748483052e-01 + 7.828000000000e-10 -1.221334688082e-02 + 7.928000000000e-10 1.390733351530e-01 + 8.028000000000e-10 2.331082732353e-01 + 8.128000000000e-10 2.733160005972e-01 + 8.228000000000e-10 3.105237742784e-01 + 8.328000000000e-10 3.533165556732e-01 + 8.428000000000e-10 3.892279285214e-01 + 8.528000000000e-10 4.000991009611e-01 + 8.628000000000e-10 3.385625511294e-01 + 8.728000000000e-10 1.899914169425e-01 + 8.828000000000e-10 1.219669858142e-02 + 8.928000000000e-10 -1.390576717936e-01 + 9.028000000000e-10 -2.331245304799e-01 + 9.128000000000e-10 -2.733009677599e-01 + 9.228000000000e-10 -3.105397739050e-01 + 9.328000000000e-10 -3.533012749995e-01 + 9.428000000000e-10 -3.892430673555e-01 + 9.528000000000e-10 -4.000844420176e-01 + 9.628000000000e-10 -3.385768441038e-01 + 9.728000000000e-10 -1.899764612955e-01 + 9.828000000000e-10 -1.221122328152e-02 + 9.928000000000e-10 1.390717643268e-01 + 1.000000000000e-09 2.142511381663e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/conditions.yaml new file mode 100644 index 00000000..11003009 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 12 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_12 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/CML_core_tb.sch new file mode 100644 index 00000000..44208482 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/CML_core_tb_13.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/CML_core_tb_13.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/CML_core_tb_13.data new file mode 100644 index 00000000..36de6040 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/CML_core_tb_13.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.406999838743e-01 + 1.728000000000e-10 -1.879936990253e-01 + 1.828000000000e-10 -9.262901303246e-03 + 1.928000000000e-10 1.413611635485e-01 + 2.028000000000e-10 2.336775345801e-01 + 2.128000000000e-10 2.717294842894e-01 + 2.228000000000e-10 3.082620487639e-01 + 2.328000000000e-10 3.509422339502e-01 + 2.428000000000e-10 3.871053596645e-01 + 2.528000000000e-10 3.988940820744e-01 + 2.628000000000e-10 3.384312270542e-01 + 2.728000000000e-10 1.913281233779e-01 + 2.828000000000e-10 1.537343295661e-02 + 2.928000000000e-10 -1.347916275204e-01 + 3.028000000000e-10 -2.283419665374e-01 + 3.128000000000e-10 -2.677291408127e-01 + 3.228000000000e-10 -3.052231075401e-01 + 3.328000000000e-10 -3.481601477547e-01 + 3.428000000000e-10 -3.845854123080e-01 + 3.528000000000e-10 -3.965379624605e-01 + 3.628000000000e-10 -3.363314255870e-01 + 3.728000000000e-10 -1.893723794407e-01 + 3.828000000000e-10 -1.375643865463e-02 + 3.928000000000e-10 1.361849816757e-01 + 4.028000000000e-10 2.294005939140e-01 + 4.128000000000e-10 2.686949729273e-01 + 4.228000000000e-10 3.060328157788e-01 + 4.328000000000e-10 3.489590274886e-01 + 4.428000000000e-10 3.852266672724e-01 + 4.528000000000e-10 3.970921187630e-01 + 4.628000000000e-10 3.366736237881e-01 + 4.728000000000e-10 1.896320772426e-01 + 4.828000000000e-10 1.386475371506e-02 + 4.928000000000e-10 -1.360753156283e-01 + 5.028000000000e-10 -2.293675908871e-01 + 5.128000000000e-10 -2.686062530832e-01 + 5.228000000000e-10 -3.059945800423e-01 + 5.328000000000e-10 -3.488729675224e-01 + 5.428000000000e-10 -3.852026785029e-01 + 5.528000000000e-10 -3.970350594993e-01 + 5.628000000000e-10 -3.366834486256e-01 + 5.728000000000e-10 -1.896077423819e-01 + 5.828000000000e-10 -1.389840122586e-02 + 5.928000000000e-10 1.360876217327e-01 + 6.028000000000e-10 2.293336021557e-01 + 6.128000000000e-10 2.686225622920e-01 + 6.228000000000e-10 3.059648098566e-01 + 6.328000000000e-10 3.488907093130e-01 + 6.428000000000e-10 3.851753633828e-01 + 6.528000000000e-10 3.970526526302e-01 + 6.628000000000e-10 3.366583891048e-01 + 6.728000000000e-10 1.896251667832e-01 + 6.828000000000e-10 1.387242911077e-02 + 6.928000000000e-10 -1.360702314024e-01 + 7.028000000000e-10 -2.293580006158e-01 + 7.128000000000e-10 -2.686047945045e-01 + 7.228000000000e-10 -3.059879182353e-01 + 7.328000000000e-10 -3.488722408399e-01 + 7.428000000000e-10 -3.851969589401e-01 + 7.528000000000e-10 -3.970345404264e-01 + 7.628000000000e-10 -3.366782708831e-01 + 7.728000000000e-10 -1.896058621860e-01 + 7.828000000000e-10 -1.389192450355e-02 + 7.928000000000e-10 1.360888260036e-01 + 8.028000000000e-10 2.293391038565e-01 + 8.128000000000e-10 2.686227634282e-01 + 8.228000000000e-10 3.059688096850e-01 + 8.328000000000e-10 3.488900661997e-01 + 8.428000000000e-10 3.851789257250e-01 + 8.528000000000e-10 3.970519764807e-01 + 8.628000000000e-10 3.366616134215e-01 + 8.728000000000e-10 1.896231972496e-01 + 8.828000000000e-10 1.387461571983e-02 + 8.928000000000e-10 -1.360724758723e-01 + 9.028000000000e-10 -2.293560182270e-01 + 9.128000000000e-10 -2.686070528237e-01 + 9.228000000000e-10 -3.059854790954e-01 + 9.328000000000e-10 -3.488740842624e-01 + 9.428000000000e-10 -3.851947329758e-01 + 9.528000000000e-10 -3.970365843841e-01 + 9.628000000000e-10 -3.366766115599e-01 + 9.728000000000e-10 -1.896075309897e-01 + 9.828000000000e-10 -1.388973786858e-02 + 9.928000000000e-10 1.360872156510e-01 + 1.000000000000e-09 2.108297225004e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/conditions.yaml new file mode 100644 index 00000000..164a4242 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 13 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_13 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/CML_core_tb.sch new file mode 100644 index 00000000..56f9a390 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/CML_core_tb_14.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/CML_core_tb_14.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/CML_core_tb_14.data new file mode 100644 index 00000000..73c31d13 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/CML_core_tb_14.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.445927026449e-01 + 1.728000000000e-10 -1.889320969581e-01 + 1.828000000000e-10 -5.355234564888e-03 + 1.928000000000e-10 1.489911128277e-01 + 2.028000000000e-10 2.434822449071e-01 + 2.128000000000e-10 2.838702060450e-01 + 2.228000000000e-10 3.202156401988e-01 + 2.328000000000e-10 3.629401474789e-01 + 2.428000000000e-10 3.990998051164e-01 + 2.528000000000e-10 4.099063275401e-01 + 2.628000000000e-10 3.477923521709e-01 + 2.728000000000e-10 1.968519788675e-01 + 2.828000000000e-10 1.493750763318e-02 + 2.928000000000e-10 -1.398437743336e-01 + 3.028000000000e-10 -2.362338093992e-01 + 3.128000000000e-10 -2.782887085314e-01 + 3.228000000000e-10 -3.158910292643e-01 + 3.328000000000e-10 -3.590893499920e-01 + 3.428000000000e-10 -3.957248346768e-01 + 3.528000000000e-10 -4.069627998073e-01 + 3.628000000000e-10 -3.454070734708e-01 + 3.728000000000e-10 -1.948243362004e-01 + 3.828000000000e-10 -1.337926088934e-02 + 3.928000000000e-10 1.411472162204e-01 + 4.028000000000e-10 2.372231231196e-01 + 4.128000000000e-10 2.792284454069e-01 + 4.228000000000e-10 3.166817589057e-01 + 4.328000000000e-10 3.598702175634e-01 + 4.428000000000e-10 3.963375250752e-01 + 4.528000000000e-10 4.074753309124e-01 + 4.628000000000e-10 3.456854225481e-01 + 4.728000000000e-10 1.950177434222e-01 + 4.828000000000e-10 1.342430394201e-02 + 4.928000000000e-10 -1.410850608466e-01 + 5.028000000000e-10 -2.372286880899e-01 + 5.128000000000e-10 -2.791659662153e-01 + 5.228000000000e-10 -3.166689293508e-01 + 5.328000000000e-10 -3.598026374101e-01 + 5.428000000000e-10 -3.963331138013e-01 + 5.528000000000e-10 -4.074316676804e-01 + 5.628000000000e-10 -3.457088001737e-01 + 5.728000000000e-10 -1.950000158899e-01 + 5.828000000000e-10 -1.346504722293e-02 + 5.928000000000e-10 1.410957635246e-01 + 6.028000000000e-10 2.371909425038e-01 + 6.128000000000e-10 2.791817404178e-01 + 6.228000000000e-10 3.166356138828e-01 + 6.328000000000e-10 3.598203377806e-01 + 6.428000000000e-10 3.963033609435e-01 + 6.528000000000e-10 4.074499160221e-01 + 6.628000000000e-10 3.456826167292e-01 + 6.728000000000e-10 1.950190841630e-01 + 6.828000000000e-10 1.343803454206e-02 + 6.928000000000e-10 -1.410764950259e-01 + 7.028000000000e-10 -2.372163265848e-01 + 7.128000000000e-10 -2.791624229651e-01 + 7.228000000000e-10 -3.166599225368e-01 + 7.328000000000e-10 -3.598002455584e-01 + 7.428000000000e-10 -3.963259615583e-01 + 7.528000000000e-10 -4.074304662079e-01 + 7.628000000000e-10 -3.457033629648e-01 + 7.728000000000e-10 -1.949983704767e-01 + 7.828000000000e-10 -1.345872104163e-02 + 7.928000000000e-10 1.410962716693e-01 + 8.028000000000e-10 2.371963808526e-01 + 8.128000000000e-10 2.791814500218e-01 + 8.228000000000e-10 3.166396456569e-01 + 8.328000000000e-10 3.598191409746e-01 + 8.428000000000e-10 3.963069790813e-01 + 8.528000000000e-10 4.074488078929e-01 + 8.628000000000e-10 3.456858987705e-01 + 8.728000000000e-10 1.950166421641e-01 + 8.828000000000e-10 1.344025602045e-02 + 8.928000000000e-10 -1.410790665154e-01 + 9.028000000000e-10 -2.372142995262e-01 + 9.128000000000e-10 -2.791649325552e-01 + 9.228000000000e-10 -3.166573514474e-01 + 9.328000000000e-10 -3.598022359716e-01 + 9.428000000000e-10 -3.963236588924e-01 + 9.528000000000e-10 -4.074326778223e-01 + 9.628000000000e-10 -3.457016440453e-01 + 9.728000000000e-10 -1.950001702792e-01 + 9.828000000000e-10 -1.345633761364e-02 + 9.928000000000e-10 1.410945129066e-01 + 1.000000000000e-09 2.176807579100e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/conditions.yaml new file mode 100644 index 00000000..d3c752b5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 14 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_14 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/CML_core_tb.sch new file mode 100644 index 00000000..4bc025b8 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/CML_core_tb_15.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/CML_core_tb_15.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/CML_core_tb_15.data new file mode 100644 index 00000000..6f87c434 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/CML_core_tb_15.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.831577979118e-01 + 1.728000000000e-10 -1.548331321524e-01 + 1.828000000000e-10 2.954507991941e-03 + 1.928000000000e-10 1.412083661187e-01 + 2.028000000000e-10 2.303947789211e-01 + 2.128000000000e-10 2.725788032239e-01 + 2.228000000000e-10 3.064646814943e-01 + 2.328000000000e-10 3.412898568956e-01 + 2.428000000000e-10 3.692979025942e-01 + 2.528000000000e-10 3.751979264520e-01 + 2.628000000000e-10 3.186495551608e-01 + 2.728000000000e-10 1.849115684226e-01 + 2.828000000000e-10 2.146912258403e-02 + 2.928000000000e-10 -1.215319416200e-01 + 3.028000000000e-10 -2.147336364713e-01 + 3.128000000000e-10 -2.593628319189e-01 + 3.228000000000e-10 -2.947919001104e-01 + 3.328000000000e-10 -3.306034656465e-01 + 3.428000000000e-10 -3.598903423599e-01 + 3.528000000000e-10 -3.674806029527e-01 + 3.628000000000e-10 -3.131864519443e-01 + 3.728000000000e-10 -1.816607205648e-01 + 3.828000000000e-10 -2.002885045896e-02 + 3.928000000000e-10 1.219326732879e-01 + 4.028000000000e-10 2.146583452252e-01 + 4.128000000000e-10 2.593288859790e-01 + 4.228000000000e-10 2.947836961551e-01 + 4.328000000000e-10 3.305873089453e-01 + 4.428000000000e-10 3.597520160348e-01 + 4.528000000000e-10 3.672634041173e-01 + 4.628000000000e-10 3.128292575731e-01 + 4.728000000000e-10 1.812525079401e-01 + 4.828000000000e-10 1.956255085056e-02 + 4.928000000000e-10 -1.223539241893e-01 + 5.028000000000e-10 -2.150587893921e-01 + 5.128000000000e-10 -2.596440912838e-01 + 5.228000000000e-10 -2.950896959018e-01 + 5.328000000000e-10 -3.308452440946e-01 + 5.428000000000e-10 -3.600168265621e-01 + 5.528000000000e-10 -3.674687038170e-01 + 5.628000000000e-10 -3.130140501398e-01 + 5.728000000000e-10 -1.813584327872e-01 + 5.828000000000e-10 -1.965159115909e-02 + 5.928000000000e-10 1.223212864923e-01 + 6.028000000000e-10 2.150157103205e-01 + 6.128000000000e-10 2.596318060931e-01 + 6.228000000000e-10 2.950524078153e-01 + 6.328000000000e-10 3.308363963911e-01 + 6.428000000000e-10 3.599874022300e-01 + 6.528000000000e-10 3.674690181116e-01 + 6.628000000000e-10 3.129980588961e-01 + 6.728000000000e-10 1.813712653368e-01 + 6.828000000000e-10 1.964491680526e-02 + 6.928000000000e-10 -1.223023112353e-01 + 7.028000000000e-10 -2.150202483004e-01 + 7.128000000000e-10 -2.596144309164e-01 + 7.228000000000e-10 -2.950582886643e-01 + 7.328000000000e-10 -3.308199600200e-01 + 7.428000000000e-10 -3.599931640339e-01 + 7.528000000000e-10 -3.674538095645e-01 + 7.628000000000e-10 -3.130042913922e-01 + 7.728000000000e-10 -1.813570925598e-01 + 7.828000000000e-10 -1.965290666609e-02 + 7.928000000000e-10 1.223145971689e-01 + 8.028000000000e-10 2.150114430495e-01 + 8.128000000000e-10 2.596256780136e-01 + 8.228000000000e-10 2.950490452158e-01 + 8.328000000000e-10 3.308307530718e-01 + 8.428000000000e-10 3.599842799802e-01 + 8.528000000000e-10 3.674639698479e-01 + 8.628000000000e-10 3.129957925611e-01 + 8.728000000000e-10 1.813666711568e-01 + 8.828000000000e-10 1.964348030724e-02 + 8.928000000000e-10 -1.223056361887e-01 + 9.028000000000e-10 -2.150207890100e-01 + 9.128000000000e-10 -2.596171721225e-01 + 9.228000000000e-10 -2.950581404305e-01 + 9.328000000000e-10 -3.308221104591e-01 + 9.428000000000e-10 -3.599929167296e-01 + 9.528000000000e-10 -3.674557320782e-01 + 9.628000000000e-10 -3.130039671541e-01 + 9.728000000000e-10 -1.813582011282e-01 + 9.828000000000e-10 -1.965175786777e-02 + 9.928000000000e-10 1.223137237372e-01 + 1.000000000000e-09 1.953703252853e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/conditions.yaml new file mode 100644 index 00000000..4c7ed31b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 15 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_15 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/CML_core_tb.sch new file mode 100644 index 00000000..a6fe83e5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/CML_core_tb_16.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/CML_core_tb_16.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/CML_core_tb_16.data new file mode 100644 index 00000000..c0c44c66 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/CML_core_tb_16.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.908214410229e-01 + 1.728000000000e-10 -1.609006026552e-01 + 1.828000000000e-10 -2.321243117629e-03 + 1.928000000000e-10 1.363185315112e-01 + 2.028000000000e-10 2.253864999197e-01 + 2.128000000000e-10 2.667546328680e-01 + 2.228000000000e-10 3.007016001191e-01 + 2.328000000000e-10 3.359037685855e-01 + 2.428000000000e-10 3.646369081917e-01 + 2.528000000000e-10 3.717564842409e-01 + 2.628000000000e-10 3.164681086559e-01 + 2.728000000000e-10 1.842122200319e-01 + 2.828000000000e-10 2.261788955655e-02 + 2.928000000000e-10 -1.190364341005e-01 + 3.028000000000e-10 -2.112326750882e-01 + 3.128000000000e-10 -2.547832728498e-01 + 3.228000000000e-10 -2.901354995194e-01 + 3.328000000000e-10 -3.261256516764e-01 + 3.428000000000e-10 -3.558916364396e-01 + 3.528000000000e-10 -3.643768878587e-01 + 3.628000000000e-10 -3.109660871267e-01 + 3.728000000000e-10 -1.806005122430e-01 + 3.828000000000e-10 -2.063463882859e-02 + 3.928000000000e-10 1.200417121301e-01 + 4.028000000000e-10 2.117115066678e-01 + 4.128000000000e-10 2.552245954862e-01 + 4.228000000000e-10 2.905358174314e-01 + 4.328000000000e-10 3.264964127076e-01 + 4.428000000000e-10 3.561164409890e-01 + 4.528000000000e-10 3.644937527082e-01 + 4.628000000000e-10 3.108863598347e-01 + 4.728000000000e-10 1.804066968471e-01 + 4.828000000000e-10 2.031749353463e-02 + 4.928000000000e-10 -1.203543467152e-01 + 5.028000000000e-10 -2.120338656010e-01 + 5.128000000000e-10 -2.554694201182e-01 + 5.228000000000e-10 -2.907816217466e-01 + 5.328000000000e-10 -3.266973931907e-01 + 5.428000000000e-10 -3.563354715244e-01 + 5.528000000000e-10 -3.646612654323e-01 + 5.628000000000e-10 -3.110514282819e-01 + 5.728000000000e-10 -1.805042989376e-01 + 5.828000000000e-10 -2.041198102925e-02 + 5.928000000000e-10 1.203139122453e-01 + 6.028000000000e-10 2.119789678115e-01 + 6.128000000000e-10 2.554499136191e-01 + 6.228000000000e-10 2.907352766216e-01 + 6.328000000000e-10 3.266827936599e-01 + 6.428000000000e-10 3.562972261563e-01 + 6.528000000000e-10 3.646559193667e-01 + 6.628000000000e-10 3.110272539685e-01 + 6.728000000000e-10 1.805126920434e-01 + 6.828000000000e-10 2.039901072518e-02 + 6.928000000000e-10 -1.202975671206e-01 + 7.028000000000e-10 -2.119881389434e-01 + 7.128000000000e-10 -2.554339974826e-01 + 7.228000000000e-10 -2.907449786827e-01 + 7.328000000000e-10 -3.266672756474e-01 + 7.428000000000e-10 -3.563063206496e-01 + 7.528000000000e-10 -3.646410588059e-01 + 7.628000000000e-10 -3.110359790738e-01 + 7.728000000000e-10 -1.804978632753e-01 + 7.828000000000e-10 -2.040852410596e-02 + 7.928000000000e-10 1.203110667878e-01 + 8.028000000000e-10 2.119781439274e-01 + 8.128000000000e-10 2.554465105638e-01 + 8.228000000000e-10 2.907345088651e-01 + 8.328000000000e-10 3.266793442083e-01 + 8.428000000000e-10 3.562962712815e-01 + 8.528000000000e-10 3.646525269207e-01 + 8.628000000000e-10 3.110264147595e-01 + 8.728000000000e-10 1.805087495738e-01 + 8.828000000000e-10 2.039807927138e-02 + 8.928000000000e-10 -1.203008828088e-01 + 9.028000000000e-10 -2.119885143169e-01 + 9.128000000000e-10 -2.554368509477e-01 + 9.228000000000e-10 -2.907446372900e-01 + 9.328000000000e-10 -3.266695427412e-01 + 9.428000000000e-10 -3.563059183968e-01 + 9.528000000000e-10 -3.646431522847e-01 + 9.628000000000e-10 -3.110356032735e-01 + 9.728000000000e-10 -1.804991631480e-01 + 9.828000000000e-10 -2.040735001275e-02 + 9.928000000000e-10 1.203099974113e-01 + 1.000000000000e-09 1.927324868168e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/conditions.yaml new file mode 100644 index 00000000..91a94e2b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 16 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_16 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/CML_core_tb.sch new file mode 100644 index 00000000..a433649c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/CML_core_tb_17.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/CML_core_tb_17.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/CML_core_tb_17.data new file mode 100644 index 00000000..1e62d263 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/CML_core_tb_17.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.857852225245e-01 + 1.728000000000e-10 -1.572533595452e-01 + 1.828000000000e-10 2.540381659783e-03 + 1.928000000000e-10 1.434374080790e-01 + 2.028000000000e-10 2.351272809546e-01 + 2.128000000000e-10 2.797956268783e-01 + 2.228000000000e-10 3.144243918962e-01 + 2.328000000000e-10 3.493618787392e-01 + 2.428000000000e-10 3.773715695689e-01 + 2.528000000000e-10 3.831823569325e-01 + 2.628000000000e-10 3.264482498061e-01 + 2.728000000000e-10 1.910530045686e-01 + 2.828000000000e-10 2.436059711742e-02 + 2.928000000000e-10 -1.220220612332e-01 + 3.028000000000e-10 -2.180809390746e-01 + 3.128000000000e-10 -2.653775774444e-01 + 3.228000000000e-10 -3.017848824321e-01 + 3.328000000000e-10 -3.379021858146e-01 + 3.428000000000e-10 -3.673696540777e-01 + 3.528000000000e-10 -3.751149757425e-01 + 3.628000000000e-10 -3.209083740174e-01 + 3.728000000000e-10 -1.878979131572e-01 + 3.828000000000e-10 -2.307531260616e-02 + 3.928000000000e-10 1.222703025101e-01 + 4.028000000000e-10 2.179003509445e-01 + 4.128000000000e-10 2.652908784701e-01 + 4.228000000000e-10 3.017672646237e-01 + 4.328000000000e-10 3.378931599738e-01 + 4.428000000000e-10 3.672390198172e-01 + 4.528000000000e-10 3.748903812400e-01 + 4.628000000000e-10 3.205316331029e-01 + 4.728000000000e-10 1.874647700937e-01 + 4.828000000000e-10 2.258819957166e-02 + 4.928000000000e-10 -1.227112688171e-01 + 5.028000000000e-10 -2.183172764214e-01 + 5.128000000000e-10 -2.656203742551e-01 + 5.228000000000e-10 -3.020800906145e-01 + 5.328000000000e-10 -3.381553362553e-01 + 5.428000000000e-10 -3.675051891202e-01 + 5.528000000000e-10 -3.750972240389e-01 + 5.628000000000e-10 -3.207148935088e-01 + 5.728000000000e-10 -1.875700292984e-01 + 5.828000000000e-10 -2.267596999196e-02 + 5.928000000000e-10 1.226776663562e-01 + 6.028000000000e-10 2.182733434309e-01 + 6.128000000000e-10 2.656053081095e-01 + 6.228000000000e-10 3.020411985396e-01 + 6.328000000000e-10 3.381435634392e-01 + 6.428000000000e-10 3.674743818406e-01 + 6.528000000000e-10 3.750952532513e-01 + 6.628000000000e-10 3.206986438750e-01 + 6.728000000000e-10 1.875816736609e-01 + 6.828000000000e-10 2.266940437016e-02 + 6.928000000000e-10 -1.226596158426e-01 + 7.028000000000e-10 -2.182776851932e-01 + 7.128000000000e-10 -2.655888997029e-01 + 7.228000000000e-10 -3.020470638059e-01 + 7.328000000000e-10 -3.381282771084e-01 + 7.428000000000e-10 -3.674800981492e-01 + 7.528000000000e-10 -3.750811166601e-01 + 7.628000000000e-10 -3.207046174850e-01 + 7.728000000000e-10 -1.875682790354e-01 + 7.828000000000e-10 -2.267703281628e-02 + 7.928000000000e-10 1.226713327530e-01 + 8.028000000000e-10 2.182693863135e-01 + 8.128000000000e-10 2.655996099454e-01 + 8.228000000000e-10 3.020383466326e-01 + 8.328000000000e-10 3.381385294735e-01 + 8.428000000000e-10 3.674717742910e-01 + 8.528000000000e-10 3.750907045119e-01 + 8.628000000000e-10 3.206966644115e-01 + 8.728000000000e-10 1.875773616331e-01 + 8.828000000000e-10 2.266807684955e-02 + 8.928000000000e-10 -1.226628120211e-01 + 9.028000000000e-10 -2.182782381400e-01 + 9.128000000000e-10 -2.655915506047e-01 + 9.228000000000e-10 -3.020469590318e-01 + 9.328000000000e-10 -3.381303351991e-01 + 9.428000000000e-10 -3.674798958779e-01 + 9.528000000000e-10 -3.750829516380e-01 + 9.628000000000e-10 -3.207043265993e-01 + 9.728000000000e-10 -1.875693454762e-01 + 9.828000000000e-10 -2.267594148777e-02 + 9.928000000000e-10 1.226704651969e-01 + 1.000000000000e-09 1.977257563344e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/conditions.yaml new file mode 100644 index 00000000..f814a5c3 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 17 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_17 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/CML_core_tb.sch new file mode 100644 index 00000000..f656c9a1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/CML_core_tb_18.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/CML_core_tb_18.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/CML_core_tb_18.data new file mode 100644 index 00000000..16422ca1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/CML_core_tb_18.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.213526702696e-01 + 1.728000000000e-10 -1.557909441213e-01 + 1.828000000000e-10 3.476956205809e-02 + 1.928000000000e-10 1.811250151598e-01 + 2.028000000000e-10 2.596166993269e-01 + 2.128000000000e-10 2.853727091731e-01 + 2.228000000000e-10 3.254453264627e-01 + 2.328000000000e-10 3.792799604087e-01 + 2.428000000000e-10 4.176388066249e-01 + 2.528000000000e-10 4.205544301124e-01 + 2.628000000000e-10 3.463528198985e-01 + 2.728000000000e-10 1.792096076204e-01 + 2.828000000000e-10 -1.442396833933e-02 + 2.928000000000e-10 -1.649237711275e-01 + 3.028000000000e-10 -2.471596975948e-01 + 3.128000000000e-10 -2.748735614517e-01 + 3.228000000000e-10 -3.160128767795e-01 + 3.328000000000e-10 -3.707930594343e-01 + 3.428000000000e-10 -4.104823651943e-01 + 3.528000000000e-10 -4.153692056047e-01 + 3.628000000000e-10 -3.427931169871e-01 + 3.728000000000e-10 -1.769552164151e-01 + 3.828000000000e-10 1.590673093360e-02 + 3.928000000000e-10 1.658834812043e-01 + 4.028000000000e-10 2.479775600913e-01 + 4.128000000000e-10 2.756409688001e-01 + 4.228000000000e-10 3.168596600790e-01 + 4.328000000000e-10 3.715133147191e-01 + 4.428000000000e-10 4.111218222953e-01 + 4.528000000000e-10 4.157229971644e-01 + 4.628000000000e-10 3.430019798682e-01 + 4.728000000000e-10 1.769456026445e-01 + 4.828000000000e-10 -1.592886494610e-02 + 4.928000000000e-10 -1.659782283296e-01 + 5.028000000000e-10 -2.479947853664e-01 + 5.128000000000e-10 -2.756931315881e-01 + 5.228000000000e-10 -3.168416717549e-01 + 5.328000000000e-10 -3.715547211919e-01 + 5.428000000000e-10 -4.111034138799e-01 + 5.528000000000e-10 -4.157691346087e-01 + 5.628000000000e-10 -3.429925568898e-01 + 5.728000000000e-10 -1.770024985869e-01 + 5.828000000000e-10 1.592938202906e-02 + 5.928000000000e-10 1.659292038608e-01 + 6.028000000000e-10 2.480043512000e-01 + 6.128000000000e-10 2.756533285421e-01 + 6.228000000000e-10 3.168576585763e-01 + 6.328000000000e-10 3.715156583068e-01 + 6.428000000000e-10 4.111207690964e-01 + 6.528000000000e-10 4.157343976531e-01 + 6.628000000000e-10 3.430135347581e-01 + 6.728000000000e-10 1.769734665185e-01 + 6.828000000000e-10 -1.590652763180e-02 + 6.928000000000e-10 -1.659537152419e-01 + 7.028000000000e-10 -2.479812550746e-01 + 7.128000000000e-10 -2.756768834918e-01 + 7.228000000000e-10 -3.168350969677e-01 + 7.328000000000e-10 -3.715419152243e-01 + 7.428000000000e-10 -4.110983779981e-01 + 7.528000000000e-10 -4.157587194411e-01 + 7.628000000000e-10 -3.429901444601e-01 + 7.728000000000e-10 -1.769973775521e-01 + 7.828000000000e-10 1.592723735432e-02 + 7.928000000000e-10 1.659318535084e-01 + 8.028000000000e-10 2.480017799848e-01 + 8.128000000000e-10 2.756559811492e-01 + 8.228000000000e-10 3.168566227283e-01 + 8.328000000000e-10 3.715195500188e-01 + 8.428000000000e-10 4.111190536097e-01 + 8.528000000000e-10 4.157370668569e-01 + 8.628000000000e-10 3.430103710665e-01 + 8.728000000000e-10 1.769771675859e-01 + 8.828000000000e-10 -1.590770493918e-02 + 8.928000000000e-10 -1.659501582149e-01 + 9.028000000000e-10 -2.479827571068e-01 + 9.128000000000e-10 -2.756738772283e-01 + 9.228000000000e-10 -3.168377001445e-01 + 9.328000000000e-10 -3.715391180409e-01 + 9.428000000000e-10 -4.111007797151e-01 + 9.528000000000e-10 -4.157556639381e-01 + 9.628000000000e-10 -3.429919881202e-01 + 9.728000000000e-10 -1.769955652012e-01 + 9.828000000000e-10 1.592430721908e-02 + 9.928000000000e-10 1.659331850974e-01 + 1.000000000000e-09 2.332140069758e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/conditions.yaml new file mode 100644 index 00000000..bdb15e03 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 18 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_18 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/CML_core_tb.sch new file mode 100644 index 00000000..cc0a304c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/CML_core_tb_19.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/CML_core_tb_19.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/CML_core_tb_19.data new file mode 100644 index 00000000..6e384890 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/CML_core_tb_19.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.162777317791e-01 + 1.728000000000e-10 -1.528661974147e-01 + 1.828000000000e-10 3.474832458294e-02 + 1.928000000000e-10 1.787124308466e-01 + 2.028000000000e-10 2.559986610902e-01 + 2.128000000000e-10 2.810767408313e-01 + 2.228000000000e-10 3.219404824571e-01 + 2.328000000000e-10 3.760375868322e-01 + 2.428000000000e-10 4.141294975409e-01 + 2.528000000000e-10 4.175370858756e-01 + 2.628000000000e-10 3.443891646085e-01 + 2.728000000000e-10 1.786024667409e-01 + 2.828000000000e-10 -1.272368439666e-02 + 2.928000000000e-10 -1.612661145276e-01 + 3.028000000000e-10 -2.425558656005e-01 + 3.128000000000e-10 -2.696709375544e-01 + 3.228000000000e-10 -3.115976016931e-01 + 3.328000000000e-10 -3.666762080522e-01 + 3.428000000000e-10 -4.062269757432e-01 + 3.528000000000e-10 -4.117682170104e-01 + 3.628000000000e-10 -3.403932990270e-01 + 3.728000000000e-10 -1.760595961534e-01 + 3.828000000000e-10 1.438676142530e-02 + 3.928000000000e-10 1.623380571180e-01 + 4.028000000000e-10 2.434588647096e-01 + 4.128000000000e-10 2.705169080514e-01 + 4.228000000000e-10 3.125303134845e-01 + 4.328000000000e-10 3.674735521527e-01 + 4.428000000000e-10 4.069324770669e-01 + 4.528000000000e-10 4.121668816011e-01 + 4.628000000000e-10 3.406314536055e-01 + 4.728000000000e-10 1.760592839129e-01 + 4.828000000000e-10 -1.440702618479e-02 + 4.928000000000e-10 -1.624387020945e-01 + 5.028000000000e-10 -2.434775787799e-01 + 5.128000000000e-10 -2.705727170369e-01 + 5.228000000000e-10 -3.125119373252e-01 + 5.328000000000e-10 -3.675184828947e-01 + 5.428000000000e-10 -4.069140356329e-01 + 5.528000000000e-10 -4.122173977207e-01 + 5.628000000000e-10 -3.406230488723e-01 + 5.728000000000e-10 -1.761225643375e-01 + 5.828000000000e-10 1.440482600394e-02 + 5.928000000000e-10 1.623840500109e-01 + 6.028000000000e-10 2.434858819416e-01 + 6.128000000000e-10 2.705285901327e-01 + 6.228000000000e-10 3.125279242462e-01 + 6.328000000000e-10 3.674758375852e-01 + 6.428000000000e-10 4.069313048189e-01 + 6.528000000000e-10 4.121794941223e-01 + 6.628000000000e-10 3.406442721772e-01 + 6.728000000000e-10 1.760913923029e-01 + 6.828000000000e-10 -1.438048626859e-02 + 6.928000000000e-10 -1.624102913298e-01 + 7.028000000000e-10 -2.434611919520e-01 + 7.128000000000e-10 -2.705537859875e-01 + 7.228000000000e-10 -3.125040211699e-01 + 7.328000000000e-10 -3.675038904367e-01 + 7.428000000000e-10 -4.069074652851e-01 + 7.528000000000e-10 -4.122054838885e-01 + 7.628000000000e-10 -3.406192567768e-01 + 7.728000000000e-10 -1.761170868219e-01 + 7.828000000000e-10 1.440247036537e-02 + 7.928000000000e-10 1.623867436405e-01 + 8.028000000000e-10 2.434830143217e-01 + 8.128000000000e-10 2.705312548291e-01 + 8.228000000000e-10 3.125271394700e-01 + 8.328000000000e-10 3.674800931307e-01 + 8.428000000000e-10 4.069295144266e-01 + 8.528000000000e-10 4.121823557439e-01 + 8.628000000000e-10 3.406407407456e-01 + 8.728000000000e-10 1.760956573916e-01 + 8.828000000000e-10 -1.438135361500e-02 + 8.928000000000e-10 -1.624062315135e-01 + 9.028000000000e-10 -2.434625084707e-01 + 9.128000000000e-10 -2.705503455528e-01 + 9.228000000000e-10 -3.125068466958e-01 + 9.328000000000e-10 -3.675009271833e-01 + 9.428000000000e-10 -4.069098943042e-01 + 9.528000000000e-10 -4.122022218921e-01 + 9.628000000000e-10 -3.406210058100e-01 + 9.728000000000e-10 -1.761154015725e-01 + 9.828000000000e-10 1.439913133121e-02 + 9.928000000000e-10 1.623879640093e-01 + 1.000000000000e-09 2.290402036537e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/conditions.yaml new file mode 100644 index 00000000..3ff7992b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 19 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_19 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/CML_core_tb.sch new file mode 100644 index 00000000..3b08c6f4 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/CML_core_tb_20.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/CML_core_tb_20.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/CML_core_tb_20.data new file mode 100644 index 00000000..3dfcf241 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/CML_core_tb_20.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.365386572536e-01 + 1.728000000000e-10 -1.657072094068e-01 + 1.828000000000e-10 3.099865584261e-02 + 1.928000000000e-10 1.820426436768e-01 + 2.028000000000e-10 2.627018214462e-01 + 2.128000000000e-10 2.893736945719e-01 + 2.228000000000e-10 3.287984169352e-01 + 2.328000000000e-10 3.833334317825e-01 + 2.428000000000e-10 4.238785365972e-01 + 2.528000000000e-10 4.280322768716e-01 + 2.628000000000e-10 3.532409470363e-01 + 2.728000000000e-10 1.834641899168e-01 + 2.828000000000e-10 -1.474496205711e-02 + 2.928000000000e-10 -1.691349612478e-01 + 3.028000000000e-10 -2.530204867896e-01 + 3.128000000000e-10 -2.814070764654e-01 + 3.228000000000e-10 -3.218416847899e-01 + 3.328000000000e-10 -3.771799136100e-01 + 3.428000000000e-10 -4.187055626636e-01 + 3.528000000000e-10 -4.243036771430e-01 + 3.628000000000e-10 -3.506062035467e-01 + 3.728000000000e-10 -1.816763297909e-01 + 3.828000000000e-10 1.601938741723e-02 + 3.928000000000e-10 1.700087907901e-01 + 4.028000000000e-10 2.537596951165e-01 + 4.128000000000e-10 2.820887501770e-01 + 4.228000000000e-10 3.225625541805e-01 + 4.328000000000e-10 3.777928583784e-01 + 4.428000000000e-10 4.192485534625e-01 + 4.528000000000e-10 4.246080285894e-01 + 4.628000000000e-10 3.507916132015e-01 + 4.728000000000e-10 1.816929452641e-01 + 4.828000000000e-10 -1.601075067965e-02 + 4.928000000000e-10 -1.700562644838e-01 + 5.028000000000e-10 -2.537513990380e-01 + 5.128000000000e-10 -2.821086741965e-01 + 5.228000000000e-10 -3.225309737549e-01 + 5.328000000000e-10 -3.778081660132e-01 + 5.428000000000e-10 -4.192196231589e-01 + 5.528000000000e-10 -4.246325132019e-01 + 5.628000000000e-10 -3.507765562578e-01 + 5.728000000000e-10 -1.817315603141e-01 + 5.828000000000e-10 1.601468821266e-02 + 5.928000000000e-10 1.700220210141e-01 + 6.028000000000e-10 2.537612841477e-01 + 6.128000000000e-10 2.820810469197e-01 + 6.228000000000e-10 3.225454957468e-01 + 6.328000000000e-10 3.777800822765e-01 + 6.428000000000e-10 4.192350742948e-01 + 6.528000000000e-10 4.246071005326e-01 + 6.628000000000e-10 3.507940665347e-01 + 6.728000000000e-10 1.817094337521e-01 + 6.828000000000e-10 -1.599736953115e-02 + 6.928000000000e-10 -1.700405869499e-01 + 7.028000000000e-10 -2.537437685408e-01 + 7.128000000000e-10 -2.820988428465e-01 + 7.228000000000e-10 -3.225283133162e-01 + 7.328000000000e-10 -3.778004844844e-01 + 7.428000000000e-10 -4.192180216890e-01 + 7.528000000000e-10 -4.246257635725e-01 + 7.628000000000e-10 -3.507760422929e-01 + 7.728000000000e-10 -1.817278922025e-01 + 7.828000000000e-10 1.601285231965e-02 + 7.928000000000e-10 1.700238629540e-01 + 8.028000000000e-10 2.537592487741e-01 + 8.128000000000e-10 2.820829438407e-01 + 8.228000000000e-10 3.225445511573e-01 + 8.328000000000e-10 3.777829985044e-01 + 8.428000000000e-10 4.192337708379e-01 + 8.528000000000e-10 4.246090234999e-01 + 8.628000000000e-10 3.507916632731e-01 + 8.728000000000e-10 1.817122417436e-01 + 8.828000000000e-10 -1.599824136343e-02 + 8.928000000000e-10 -1.700377849177e-01 + 9.028000000000e-10 -2.537449127629e-01 + 9.128000000000e-10 -2.820965585668e-01 + 9.228000000000e-10 -3.225302446360e-01 + 9.328000000000e-10 -3.777982010874e-01 + 9.428000000000e-10 -4.192199753705e-01 + 9.528000000000e-10 -4.246232587341e-01 + 9.628000000000e-10 -3.507775800865e-01 + 9.728000000000e-10 -1.817263367247e-01 + 9.828000000000e-10 1.601066647660e-02 + 9.928000000000e-10 1.700248857455e-01 + 1.000000000000e-09 2.385375784000e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/conditions.yaml new file mode 100644 index 00000000..50bd287d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 20 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_20 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/CML_core_tb.sch new file mode 100644 index 00000000..51ef8f31 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/CML_core_tb_21.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/CML_core_tb_21.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/CML_core_tb_21.data new file mode 100644 index 00000000..86f9b023 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/CML_core_tb_21.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.747912795524e-01 + 1.728000000000e-10 -1.327955908449e-01 + 1.828000000000e-10 3.931332790349e-02 + 1.928000000000e-10 1.782957289495e-01 + 2.028000000000e-10 2.573194188668e-01 + 2.128000000000e-10 2.870254911902e-01 + 2.228000000000e-10 3.228650321442e-01 + 2.328000000000e-10 3.690575149088e-01 + 2.428000000000e-10 4.023791308175e-01 + 2.528000000000e-10 4.034409994944e-01 + 2.628000000000e-10 3.332295993533e-01 + 2.728000000000e-10 1.767123870243e-01 + 2.828000000000e-10 -7.574880255958e-03 + 2.928000000000e-10 -1.550892096227e-01 + 3.028000000000e-10 -2.394679486139e-01 + 3.128000000000e-10 -2.715465054757e-01 + 3.228000000000e-10 -3.085580168164e-01 + 3.328000000000e-10 -3.560821219044e-01 + 3.428000000000e-10 -3.914831036325e-01 + 3.528000000000e-10 -3.956717314322e-01 + 3.628000000000e-10 -3.285929470428e-01 + 3.728000000000e-10 -1.747908753666e-01 + 3.828000000000e-10 7.882784627431e-03 + 3.928000000000e-10 1.545893087045e-01 + 4.028000000000e-10 2.389887597051e-01 + 4.128000000000e-10 2.712307710628e-01 + 4.228000000000e-10 3.085047043395e-01 + 4.328000000000e-10 3.559448484744e-01 + 4.428000000000e-10 3.913507819782e-01 + 4.528000000000e-10 3.953547803018e-01 + 4.628000000000e-10 3.282585464854e-01 + 4.728000000000e-10 1.743078825018e-01 + 4.828000000000e-10 -8.291328068348e-03 + 4.928000000000e-10 -1.550293895867e-01 + 5.028000000000e-10 -2.392804293874e-01 + 5.128000000000e-10 -2.715405217782e-01 + 5.228000000000e-10 -3.087067361985e-01 + 5.328000000000e-10 -3.562070457914e-01 + 5.428000000000e-10 -3.915132320474e-01 + 5.528000000000e-10 -3.955548280332e-01 + 5.628000000000e-10 -3.283427048941e-01 + 5.728000000000e-10 -1.744282326244e-01 + 5.828000000000e-10 8.270645751064e-03 + 5.928000000000e-10 1.549582711486e-01 + 6.028000000000e-10 2.392860039329e-01 + 6.128000000000e-10 2.714820836214e-01 + 6.228000000000e-10 3.087161022039e-01 + 6.328000000000e-10 3.561494137047e-01 + 6.428000000000e-10 3.915273490759e-01 + 6.528000000000e-10 3.955079501007e-01 + 6.628000000000e-10 3.283677191723e-01 + 6.728000000000e-10 1.743944727908e-01 + 6.828000000000e-10 -8.238033211244e-03 + 6.928000000000e-10 -1.549849820320e-01 + 7.028000000000e-10 -2.392533741503e-01 + 7.128000000000e-10 -2.715088112944e-01 + 7.228000000000e-10 -3.086845279612e-01 + 7.328000000000e-10 -3.561786907982e-01 + 7.428000000000e-10 -3.914967682891e-01 + 7.528000000000e-10 -3.955360247734e-01 + 7.628000000000e-10 -3.283379458960e-01 + 7.728000000000e-10 -1.744219452106e-01 + 7.828000000000e-10 8.266285029230e-03 + 7.928000000000e-10 1.549592969714e-01 + 8.028000000000e-10 2.392805186707e-01 + 8.128000000000e-10 2.714837558368e-01 + 8.228000000000e-10 3.087120651005e-01 + 8.328000000000e-10 3.561520690508e-01 + 8.428000000000e-10 3.915233230940e-01 + 8.528000000000e-10 3.955100606400e-01 + 8.628000000000e-10 3.283632493206e-01 + 8.728000000000e-10 1.743968536756e-01 + 8.828000000000e-10 -8.241845610385e-03 + 8.928000000000e-10 -1.549825747228e-01 + 9.028000000000e-10 -2.392568734068e-01 + 9.128000000000e-10 -2.715063119250e-01 + 9.228000000000e-10 -3.086881712182e-01 + 9.328000000000e-10 -3.561760305782e-01 + 9.428000000000e-10 -3.915002731039e-01 + 9.528000000000e-10 -3.955331724158e-01 + 9.628000000000e-10 -3.283409163093e-01 + 9.728000000000e-10 -1.744193777973e-01 + 9.828000000000e-10 8.263272108901e-03 + 9.928000000000e-10 1.549616575981e-01 + 1.000000000000e-09 2.229820050464e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/conditions.yaml new file mode 100644 index 00000000..3d4d9340 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 21 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_21 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/CML_core_tb.sch new file mode 100644 index 00000000..3836095d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/CML_core_tb_22.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/CML_core_tb_22.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/CML_core_tb_22.data new file mode 100644 index 00000000..ef0e6c8e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/CML_core_tb_22.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.701426652476e-01 + 1.728000000000e-10 -1.295079168872e-01 + 1.828000000000e-10 4.028305902420e-02 + 1.928000000000e-10 1.769160181627e-01 + 2.028000000000e-10 2.543038782058e-01 + 2.128000000000e-10 2.828787064062e-01 + 2.228000000000e-10 3.193333275112e-01 + 2.328000000000e-10 3.660596632426e-01 + 2.428000000000e-10 3.993599084345e-01 + 2.528000000000e-10 4.007883413226e-01 + 2.628000000000e-10 3.312419521143e-01 + 2.728000000000e-10 1.754810620333e-01 + 2.828000000000e-10 -7.142746942805e-03 + 2.928000000000e-10 -1.527779354444e-01 + 3.028000000000e-10 -2.358001938178e-01 + 3.128000000000e-10 -2.668485168237e-01 + 3.228000000000e-10 -3.044746718514e-01 + 3.328000000000e-10 -3.525545062341e-01 + 3.428000000000e-10 -3.880254364838e-01 + 3.528000000000e-10 -3.926522183008e-01 + 3.628000000000e-10 -3.262954780243e-01 + 3.728000000000e-10 -1.733443838482e-01 + 3.828000000000e-10 7.573790689709e-03 + 3.928000000000e-10 1.523487073311e-01 + 4.028000000000e-10 2.353677758316e-01 + 4.128000000000e-10 2.665695097895e-01 + 4.228000000000e-10 3.044490522149e-01 + 4.328000000000e-10 3.524353166192e-01 + 4.428000000000e-10 3.879041587545e-01 + 4.528000000000e-10 3.923389296672e-01 + 4.628000000000e-10 3.259554596391e-01 + 4.728000000000e-10 1.728458619818e-01 + 4.828000000000e-10 -8.002573892585e-03 + 4.928000000000e-10 -1.528088090159e-01 + 5.028000000000e-10 -2.356747724378e-01 + 5.128000000000e-10 -2.668925685814e-01 + 5.228000000000e-10 -3.046638401901e-01 + 5.328000000000e-10 -3.527112223433e-01 + 5.428000000000e-10 -3.880786380631e-01 + 5.528000000000e-10 -3.925506229445e-01 + 5.628000000000e-10 -3.260495799326e-01 + 5.728000000000e-10 -1.729761662154e-01 + 5.828000000000e-10 7.974498187451e-03 + 5.928000000000e-10 1.527311696558e-01 + 6.028000000000e-10 2.356760074325e-01 + 6.128000000000e-10 2.668297167568e-01 + 6.228000000000e-10 3.046702367069e-01 + 6.328000000000e-10 3.526500635637e-01 + 6.428000000000e-10 3.880902250634e-01 + 6.528000000000e-10 3.925010528185e-01 + 6.628000000000e-10 3.260730653917e-01 + 6.728000000000e-10 1.729410953112e-01 + 6.828000000000e-10 -7.941970684065e-03 + 6.928000000000e-10 -1.527585341072e-01 + 7.028000000000e-10 -2.356430884825e-01 + 7.128000000000e-10 -2.668569558480e-01 + 7.228000000000e-10 -3.046384985761e-01 + 7.328000000000e-10 -3.526798341051e-01 + 7.428000000000e-10 -3.880593641809e-01 + 7.528000000000e-10 -3.925295324367e-01 + 7.628000000000e-10 -3.260427874257e-01 + 7.728000000000e-10 -1.729689796013e-01 + 7.828000000000e-10 7.970639231343e-03 + 7.928000000000e-10 1.527324506408e-01 + 8.028000000000e-10 2.356706370408e-01 + 8.128000000000e-10 2.668314718812e-01 + 8.228000000000e-10 3.046665550415e-01 + 8.328000000000e-10 3.526529348742e-01 + 8.428000000000e-10 3.880863283995e-01 + 8.528000000000e-10 3.925032166540e-01 + 8.628000000000e-10 3.260684590033e-01 + 8.728000000000e-10 1.729436324779e-01 + 8.828000000000e-10 -7.945691115533e-03 + 8.928000000000e-10 -1.527560420249e-01 + 9.028000000000e-10 -2.356465048672e-01 + 9.128000000000e-10 -2.668543449819e-01 + 9.228000000000e-10 -3.046422495200e-01 + 9.328000000000e-10 -3.526772110923e-01 + 9.428000000000e-10 -3.880628732866e-01 + 9.528000000000e-10 -3.925266759429e-01 + 9.628000000000e-10 -3.260456785141e-01 + 9.728000000000e-10 -1.729665660062e-01 + 9.828000000000e-10 7.967487161613e-03 + 9.928000000000e-10 1.527347010769e-01 + 1.000000000000e-09 2.198236907112e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/conditions.yaml new file mode 100644 index 00000000..f61c2d5f --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 22 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_22 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/CML_core_tb.sch new file mode 100644 index 00000000..bf76a047 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/CML_core_tb_23.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/CML_core_tb_23.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/CML_core_tb_23.data new file mode 100644 index 00000000..7b2e7ab2 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/CML_core_tb_23.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.957054612407e-01 + 1.728000000000e-10 -1.475216919691e-01 + 1.828000000000e-10 3.196996632833e-02 + 1.928000000000e-10 1.773696584526e-01 + 2.028000000000e-10 2.602670445343e-01 + 2.128000000000e-10 2.919684489720e-01 + 2.228000000000e-10 3.273690981683e-01 + 2.328000000000e-10 3.736661732429e-01 + 2.428000000000e-10 4.086769482098e-01 + 2.528000000000e-10 4.113258498473e-01 + 2.628000000000e-10 3.414272197123e-01 + 2.728000000000e-10 1.833836328070e-01 + 2.828000000000e-10 -4.501363849837e-03 + 2.928000000000e-10 -1.562318489881e-01 + 3.028000000000e-10 -2.435570784568e-01 + 3.128000000000e-10 -2.775386220390e-01 + 3.228000000000e-10 -3.142878056355e-01 + 3.328000000000e-10 -3.618442790176e-01 + 3.428000000000e-10 -3.986028140213e-01 + 3.528000000000e-10 -4.040381865127e-01 + 3.628000000000e-10 -3.369104214062e-01 + 3.728000000000e-10 -1.811830752063e-01 + 3.828000000000e-10 5.355128083595e-03 + 3.928000000000e-10 1.563630270676e-01 + 4.028000000000e-10 2.436522664355e-01 + 4.128000000000e-10 2.777202130414e-01 + 4.228000000000e-10 3.146716935396e-01 + 4.328000000000e-10 3.621309165835e-01 + 4.428000000000e-10 3.988648293319e-01 + 4.528000000000e-10 4.040567761896e-01 + 4.628000000000e-10 3.368362274946e-01 + 4.728000000000e-10 1.809052635954e-01 + 4.828000000000e-10 -5.606347307292e-03 + 4.928000000000e-10 -1.566747533637e-01 + 5.028000000000e-10 -2.438438929936e-01 + 5.128000000000e-10 -2.779365198916e-01 + 5.228000000000e-10 -3.147868656031e-01 + 5.328000000000e-10 -3.623069078218e-01 + 5.428000000000e-10 -3.989546307961e-01 + 5.528000000000e-10 -4.041975741324e-01 + 5.628000000000e-10 -3.368831845243e-01 + 5.728000000000e-10 -1.810020824460e-01 + 5.828000000000e-10 5.593858826262e-03 + 5.928000000000e-10 1.566090374935e-01 + 6.028000000000e-10 2.438493522755e-01 + 6.128000000000e-10 2.778818285943e-01 + 6.228000000000e-10 3.147972496077e-01 + 6.328000000000e-10 3.622530927659e-01 + 6.428000000000e-10 3.989689895438e-01 + 6.528000000000e-10 4.041528360847e-01 + 6.628000000000e-10 3.369065350765e-01 + 6.728000000000e-10 1.809679655825e-01 + 6.828000000000e-10 -5.565139497590e-03 + 6.928000000000e-10 -1.566366178225e-01 + 7.028000000000e-10 -2.438204188033e-01 + 7.128000000000e-10 -2.779089356335e-01 + 7.228000000000e-10 -3.147686522157e-01 + 7.328000000000e-10 -3.622826637804e-01 + 7.428000000000e-10 -3.989411843085e-01 + 7.528000000000e-10 -4.041807678845e-01 + 7.628000000000e-10 -3.368790616195e-01 + 7.728000000000e-10 -1.809947630224e-01 + 7.828000000000e-10 5.591512634984e-03 + 7.928000000000e-10 1.566120178189e-01 + 8.028000000000e-10 2.438458933358e-01 + 8.128000000000e-10 2.778849719194e-01 + 8.228000000000e-10 3.147945034671e-01 + 8.328000000000e-10 3.622568751046e-01 + 8.428000000000e-10 3.989662140554e-01 + 8.528000000000e-10 4.041558823701e-01 + 8.628000000000e-10 3.369030769235e-01 + 8.728000000000e-10 1.809706945647e-01 + 8.828000000000e-10 -5.568483515763e-03 + 8.928000000000e-10 -1.566340912711e-01 + 9.028000000000e-10 -2.438236181184e-01 + 9.128000000000e-10 -2.779064153414e-01 + 9.228000000000e-10 -3.147718720666e-01 + 9.328000000000e-10 -3.622798572716e-01 + 9.428000000000e-10 -3.989444036153e-01 + 9.528000000000e-10 -4.041778978449e-01 + 9.628000000000e-10 -3.368819513246e-01 + 9.728000000000e-10 -1.809921012276e-01 + 9.828000000000e-10 5.588724287086e-03 + 9.928000000000e-10 1.566143682128e-01 + 1.000000000000e-09 2.267750497136e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/conditions.yaml new file mode 100644 index 00000000..58ee4146 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 23 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_23 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/CML_core_tb.sch new file mode 100644 index 00000000..30e2fa1b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/CML_core_tb_24.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/CML_core_tb_24.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/CML_core_tb_24.data new file mode 100644 index 00000000..a01deb89 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/CML_core_tb_24.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -1.908985659112e-01 + 1.728000000000e-10 -9.049079150817e-02 + 1.828000000000e-10 3.945873683219e-02 + 1.928000000000e-10 1.521437177417e-01 + 2.028000000000e-10 2.220068772324e-01 + 2.128000000000e-10 2.535092334052e-01 + 2.228000000000e-10 2.861973397174e-01 + 2.328000000000e-10 3.239843013312e-01 + 2.428000000000e-10 3.520113017607e-01 + 2.528000000000e-10 3.540468115658e-01 + 2.628000000000e-10 2.949447709683e-01 + 2.728000000000e-10 1.587983397866e-01 + 2.828000000000e-10 -6.865354773069e-03 + 2.928000000000e-10 -1.448078480843e-01 + 3.028000000000e-10 -2.275605338030e-01 + 3.128000000000e-10 -2.625604064747e-01 + 3.228000000000e-10 -2.958552078644e-01 + 3.328000000000e-10 -3.351711406638e-01 + 3.428000000000e-10 -3.644984224381e-01 + 3.528000000000e-10 -3.669950471097e-01 + 3.628000000000e-10 -3.072796408874e-01 + 3.728000000000e-10 -1.699866077827e-01 + 3.828000000000e-10 -2.842045316933e-03 + 3.928000000000e-10 1.365086891956e-01 + 4.028000000000e-10 2.207869920157e-01 + 4.128000000000e-10 2.567713461579e-01 + 4.228000000000e-10 2.907030026757e-01 + 4.328000000000e-10 3.302687598301e-01 + 4.428000000000e-10 3.600803190405e-01 + 4.528000000000e-10 3.632331450943e-01 + 4.628000000000e-10 3.045482678871e-01 + 4.728000000000e-10 1.682698274629e-01 + 4.828000000000e-10 2.058504292284e-03 + 4.928000000000e-10 -1.367871396964e-01 + 5.028000000000e-10 -2.207717990252e-01 + 5.128000000000e-10 -2.567684885934e-01 + 5.228000000000e-10 -2.906651825463e-01 + 5.328000000000e-10 -3.302494358660e-01 + 5.428000000000e-10 -3.599712284157e-01 + 5.528000000000e-10 -3.631239508150e-01 + 5.628000000000e-10 -3.043584109358e-01 + 5.728000000000e-10 -1.680958385636e-01 + 5.828000000000e-10 -1.834034512727e-03 + 5.928000000000e-10 1.369613450439e-01 + 6.028000000000e-10 2.209618957221e-01 + 6.128000000000e-10 2.568952536478e-01 + 6.228000000000e-10 2.908171185353e-01 + 6.328000000000e-10 3.303549214919e-01 + 6.428000000000e-10 3.601082390759e-01 + 6.528000000000e-10 3.632059905221e-01 + 6.628000000000e-10 3.044557238628e-01 + 6.728000000000e-10 1.681292777859e-01 + 6.828000000000e-10 1.882442241730e-03 + 6.928000000000e-10 -1.369637862409e-01 + 7.028000000000e-10 -2.209363992802e-01 + 7.128000000000e-10 -2.569065829626e-01 + 7.228000000000e-10 -2.907936706940e-01 + 7.328000000000e-10 -3.303682701482e-01 + 7.428000000000e-10 -3.600879594395e-01 + 7.528000000000e-10 -3.632220959958e-01 + 7.628000000000e-10 -3.044401007882e-01 + 7.728000000000e-10 -1.681486407544e-01 + 7.828000000000e-10 -1.870004957548e-03 + 7.928000000000e-10 1.369437070838e-01 + 8.028000000000e-10 2.209481957039e-01 + 8.128000000000e-10 2.568879030180e-01 + 8.228000000000e-10 2.908064848389e-01 + 8.328000000000e-10 3.303493303219e-01 + 8.428000000000e-10 3.601006147126e-01 + 8.528000000000e-10 3.632041339109e-01 + 8.628000000000e-10 3.044528281549e-01 + 8.728000000000e-10 1.681322760827e-01 + 8.828000000000e-10 1.883536763259e-03 + 8.928000000000e-10 -1.369582535540e-01 + 9.028000000000e-10 -2.209346296842e-01 + 9.128000000000e-10 -2.569016830366e-01 + 9.228000000000e-10 -2.907925936742e-01 + 9.328000000000e-10 -3.303636164667e-01 + 9.428000000000e-10 -3.600871302257e-01 + 9.528000000000e-10 -3.632178492939e-01 + 9.628000000000e-10 -3.044398392752e-01 + 9.728000000000e-10 -1.681454261603e-01 + 9.828000000000e-10 -1.870628705438e-03 + 9.928000000000e-10 1.369459433541e-01 + 1.000000000000e-09 2.037746084522e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/conditions.yaml new file mode 100644 index 00000000..7f7d0098 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 24 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_24 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/CML_core_tb.sch new file mode 100644 index 00000000..5f457e9d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/CML_core_tb_25.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/CML_core_tb_25.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/CML_core_tb_25.data new file mode 100644 index 00000000..182746dc --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/CML_core_tb_25.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -1.878715792581e-01 + 1.728000000000e-10 -8.812036120597e-02 + 1.828000000000e-10 4.046526586524e-02 + 1.928000000000e-10 1.515705626527e-01 + 2.028000000000e-10 2.200566198342e-01 + 2.128000000000e-10 2.503583455541e-01 + 2.228000000000e-10 2.832914205797e-01 + 2.328000000000e-10 3.216696186231e-01 + 2.428000000000e-10 3.500303926946e-01 + 2.528000000000e-10 3.524815741411e-01 + 2.628000000000e-10 2.936462106779e-01 + 2.728000000000e-10 1.576219496242e-01 + 2.828000000000e-10 -7.121462127754e-03 + 2.928000000000e-10 -1.436071598858e-01 + 3.028000000000e-10 -2.249496922999e-01 + 3.128000000000e-10 -2.586592240194e-01 + 3.228000000000e-10 -2.922419569702e-01 + 3.328000000000e-10 -3.321983211521e-01 + 3.428000000000e-10 -3.618684381611e-01 + 3.528000000000e-10 -3.648249016007e-01 + 3.628000000000e-10 -3.055379959953e-01 + 3.728000000000e-10 -1.686105488568e-01 + 3.828000000000e-10 -2.582643774162e-03 + 3.928000000000e-10 1.352182085241e-01 + 4.028000000000e-10 2.180702244722e-01 + 4.128000000000e-10 2.527783389641e-01 + 4.228000000000e-10 2.869845016096e-01 + 4.328000000000e-10 3.271697550530e-01 + 4.428000000000e-10 3.573213651505e-01 + 4.528000000000e-10 3.609341509143e-01 + 4.628000000000e-10 3.026708512688e-01 + 4.728000000000e-10 1.667591862946e-01 + 4.828000000000e-10 1.676053368052e-03 + 4.928000000000e-10 -1.356064331336e-01 + 5.028000000000e-10 -2.181494577446e-01 + 5.128000000000e-10 -2.528581012316e-01 + 5.228000000000e-10 -2.870203472690e-01 + 5.328000000000e-10 -3.272198972187e-01 + 5.428000000000e-10 -3.572767955086e-01 + 5.528000000000e-10 -3.608816832152e-01 + 5.628000000000e-10 -3.025243774497e-01 + 5.728000000000e-10 -1.666129730216e-01 + 5.828000000000e-10 -1.465204057357e-03 + 5.928000000000e-10 1.357749931272e-01 + 6.028000000000e-10 2.183376260095e-01 + 6.128000000000e-10 2.529831758691e-01 + 6.228000000000e-10 2.871716452249e-01 + 6.328000000000e-10 3.273254918206e-01 + 6.428000000000e-10 3.574148326524e-01 + 6.528000000000e-10 3.609652866209e-01 + 6.628000000000e-10 3.026246199120e-01 + 6.728000000000e-10 1.666502220733e-01 + 6.828000000000e-10 1.518129196282e-03 + 6.928000000000e-10 -1.357732099566e-01 + 7.028000000000e-10 -2.183080403425e-01 + 7.128000000000e-10 -2.529912058397e-01 + 7.228000000000e-10 -2.871450109118e-01 + 7.328000000000e-10 -3.273360198503e-01 + 7.428000000000e-10 -3.573916245859e-01 + 7.528000000000e-10 -3.609790664977e-01 + 7.628000000000e-10 -3.026068066478e-01 + 7.728000000000e-10 -1.666683959674e-01 + 7.828000000000e-10 -1.504711775466e-03 + 7.928000000000e-10 1.357534602326e-01 + 8.028000000000e-10 2.183202914392e-01 + 8.128000000000e-10 2.529726082081e-01 + 8.228000000000e-10 2.871582302084e-01 + 8.328000000000e-10 3.273171284192e-01 + 8.428000000000e-10 3.574045685766e-01 + 8.528000000000e-10 3.609610284998e-01 + 8.628000000000e-10 3.026196909841e-01 + 8.728000000000e-10 1.666518528053e-01 + 8.828000000000e-10 1.518315117290e-03 + 8.928000000000e-10 -1.357682747942e-01 + 9.028000000000e-10 -2.183066580359e-01 + 9.128000000000e-10 -2.529866332266e-01 + 9.228000000000e-10 -2.871442829871e-01 + 9.328000000000e-10 -3.273316607928e-01 + 9.428000000000e-10 -3.573910212469e-01 + 9.528000000000e-10 -3.609749965926e-01 + 9.628000000000e-10 -3.026065830591e-01 + 9.728000000000e-10 -1.666652414066e-01 + 9.828000000000e-10 -1.505286118034e-03 + 9.928000000000e-10 1.357557668798e-01 + 1.000000000000e-09 2.016242513907e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/conditions.yaml new file mode 100644 index 00000000..32bc6355 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 25 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_25 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/CML_core_tb.sch new file mode 100644 index 00000000..b9f23b35 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/CML_core_tb_26.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/CML_core_tb_26.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/CML_core_tb_26.data new file mode 100644 index 00000000..c21b093d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/CML_core_tb_26.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.135873679018e-01 + 1.728000000000e-10 -1.054229355639e-01 + 1.828000000000e-10 3.485798650969e-02 + 1.928000000000e-10 1.569675139767e-01 + 2.028000000000e-10 2.330635404696e-01 + 2.128000000000e-10 2.680443549179e-01 + 2.228000000000e-10 3.014044829899e-01 + 2.328000000000e-10 3.394080314353e-01 + 2.428000000000e-10 3.679529618424e-01 + 2.528000000000e-10 3.700593040123e-01 + 2.628000000000e-10 3.097824620429e-01 + 2.728000000000e-10 1.706514675999e-01 + 2.828000000000e-10 3.558070014658e-04 + 2.928000000000e-10 -1.428409974599e-01 + 3.028000000000e-10 -2.298289579719e-01 + 3.128000000000e-10 -2.678794741753e-01 + 3.228000000000e-10 -3.017454056957e-01 + 3.328000000000e-10 -3.410620518407e-01 + 3.428000000000e-10 -3.712405389398e-01 + 3.528000000000e-10 -3.749327973471e-01 + 3.628000000000e-10 -3.157484466493e-01 + 3.728000000000e-10 -1.773087198166e-01 + 3.828000000000e-10 -7.070252178339e-03 + 3.928000000000e-10 1.364462941621e-01 + 4.028000000000e-10 2.243241068758e-01 + 4.128000000000e-10 2.631279769125e-01 + 4.228000000000e-10 2.976097246349e-01 + 4.328000000000e-10 3.371159716785e-01 + 4.428000000000e-10 3.676405775058e-01 + 4.528000000000e-10 3.717787254056e-01 + 4.628000000000e-10 3.133854979421e-01 + 4.728000000000e-10 1.756870158595e-01 + 4.828000000000e-10 6.171257018760e-03 + 4.928000000000e-10 -1.369680995621e-01 + 5.028000000000e-10 -2.245781248931e-01 + 5.128000000000e-10 -2.633829468620e-01 + 5.228000000000e-10 -2.978042748481e-01 + 5.328000000000e-10 -3.373348877854e-01 + 5.428000000000e-10 -3.677584906255e-01 + 5.528000000000e-10 -3.718812762918e-01 + 5.628000000000e-10 -3.133649557524e-01 + 5.728000000000e-10 -1.756479312047e-01 + 5.828000000000e-10 -6.040608056278e-03 + 5.928000000000e-10 1.370690415770e-01 + 6.028000000000e-10 2.247181767783e-01 + 6.128000000000e-10 2.634617265965e-01 + 6.228000000000e-10 2.979157296699e-01 + 6.328000000000e-10 3.373958940353e-01 + 6.428000000000e-10 3.678612954525e-01 + 6.528000000000e-10 3.719309221475e-01 + 6.628000000000e-10 3.134447453066e-01 + 6.728000000000e-10 1.756687688086e-01 + 6.828000000000e-10 6.090200135509e-03 + 6.928000000000e-10 -1.370702307281e-01 + 7.028000000000e-10 -2.246847420648e-01 + 7.128000000000e-10 -2.634701196121e-01 + 7.228000000000e-10 -2.978849158722e-01 + 7.328000000000e-10 -3.374068878437e-01 + 7.428000000000e-10 -3.678336110941e-01 + 7.528000000000e-10 -3.719446503824e-01 + 7.628000000000e-10 -3.134227431793e-01 + 7.728000000000e-10 -1.756868885858e-01 + 7.828000000000e-10 -6.072676723321e-03 + 7.928000000000e-10 1.370503070743e-01 + 8.028000000000e-10 2.247004966695e-01 + 8.128000000000e-10 2.634509722982e-01 + 8.228000000000e-10 2.979013793804e-01 + 8.328000000000e-10 3.373870921905e-01 + 8.428000000000e-10 3.678495602861e-01 + 8.528000000000e-10 3.719256264749e-01 + 8.628000000000e-10 3.134381864470e-01 + 8.728000000000e-10 1.756688935561e-01 + 8.828000000000e-10 6.088345643719e-03 + 8.928000000000e-10 -1.370666831053e-01 + 9.028000000000e-10 -2.246851372638e-01 + 9.128000000000e-10 -2.634666121684e-01 + 9.228000000000e-10 -2.978856025968e-01 + 9.328000000000e-10 -3.374033621769e-01 + 9.428000000000e-10 -3.678342837151e-01 + 9.528000000000e-10 -3.719412125322e-01 + 9.628000000000e-10 -3.134235677100e-01 + 9.728000000000e-10 -1.756838495744e-01 + 9.828000000000e-10 -6.073781243164e-03 + 9.928000000000e-10 1.370527135588e-01 + 1.000000000000e-09 2.065229990524e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/conditions.yaml new file mode 100644 index 00000000..7bd57a54 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 26 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/run_26 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/simulation_summary.csv b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/simulation_summary.csv new file mode 100644 index 00000000..1c9074b8 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/simulation_summary.csv @@ -0,0 +1,28 @@ +run,corner,temperature,vdd,time,vo_diff,frequency +run_00,tt,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.111e-01, -1.870e-01, -3.563e-02, …]",4.722e+09 +run_01,ff,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.099e-01, -1.895e-01, -4.060e-02, …]",4.722e+09 +run_02,ss,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.163e-01, -1.876e-01, -3.217e-02, …]",4.722e+09 +run_03,tt,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.915e-01, -1.780e-01, -3.803e-02, …]",4.722e+09 +run_04,ff,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.909e-01, -1.806e-01, -4.276e-02, …]",4.722e+09 +run_05,ss,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.959e-01, -1.792e-01, -3.599e-02, …]",4.722e+09 +run_06,tt,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.689e-01, -1.692e-01, -4.423e-02, …]",4.722e+09 +run_07,ff,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.694e-01, -1.722e-01, -4.907e-02, …]",4.722e+09 +run_08,ss,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.723e-01, -1.701e-01, -4.252e-02, …]",4.722e+09 +run_09,tt,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.623e-01, -1.963e-01, -5.713e-03, …]",4.722e+09 +run_10,ff,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.622e-01, -1.984e-01, -1.024e-02, …]",4.722e+09 +run_11,ss,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.669e-01, -1.979e-01, -3.070e-03, …]",4.722e+09 +run_12,tt,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.388e-01, -1.852e-01, -4.985e-03, …]",4.722e+09 +run_13,ff,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.407e-01, -1.880e-01, -9.263e-03, …]",4.722e+09 +run_14,ss,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.446e-01, -1.889e-01, -5.355e-03, …]",4.722e+09 +run_15,tt,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.832e-01, -1.548e-01, 2.955e-03, …]",4.722e+09 +run_16,ff,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.908e-01, -1.609e-01, -2.321e-03, …]",4.722e+09 +run_17,ss,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.858e-01, -1.573e-01, 2.540e-03, …]",4.722e+09 +run_18,tt,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.214e-01, -1.558e-01, 3.477e-02, …]",4.722e+09 +run_19,ff,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.163e-01, -1.529e-01, 3.475e-02, …]",4.722e+09 +run_20,ss,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.365e-01, -1.657e-01, 3.100e-02, …]",4.722e+09 +run_21,tt,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.748e-01, -1.328e-01, 3.931e-02, …]",4.722e+09 +run_22,ff,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.701e-01, -1.295e-01, 4.028e-02, …]",4.722e+09 +run_23,ss,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.957e-01, -1.475e-01, 3.197e-02, …]",4.722e+09 +run_24,tt,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-1.909e-01, -9.049e-02, 3.946e-02, …]",4.722e+09 +run_25,ff,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-1.879e-01, -8.812e-02, 4.047e-02, …]",4.722e+09 +run_26,ss,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.136e-01, -1.054e-01, 3.486e-02, …]",4.722e+09 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/simulation_summary.md b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/simulation_summary.md new file mode 100644 index 00000000..31c8cc54 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/Frequency/simulation_summary.md @@ -0,0 +1,31 @@ +# Simulation Summary for Freq + +| run | corner | temperature | vdd | time | vo_diff | frequency | +| :-- | -----: | ----------: | --: | ---: | ------: | --------: | +| run_00 | tt | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.111e-01, -1.870e-01, -3.563e-02, …] | 4.722e+09 | +| run_01 | ff | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.099e-01, -1.895e-01, -4.060e-02, …] | 4.722e+09 | +| run_02 | ss | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.163e-01, -1.876e-01, -3.217e-02, …] | 4.722e+09 | +| run_03 | tt | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.915e-01, -1.780e-01, -3.803e-02, …] | 4.722e+09 | +| run_04 | ff | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.909e-01, -1.806e-01, -4.276e-02, …] | 4.722e+09 | +| run_05 | ss | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.959e-01, -1.792e-01, -3.599e-02, …] | 4.722e+09 | +| run_06 | tt | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.689e-01, -1.692e-01, -4.423e-02, …] | 4.722e+09 | +| run_07 | ff | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.694e-01, -1.722e-01, -4.907e-02, …] | 4.722e+09 | +| run_08 | ss | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.723e-01, -1.701e-01, -4.252e-02, …] | 4.722e+09 | +| run_09 | tt | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.623e-01, -1.963e-01, -5.713e-03, …] | 4.722e+09 | +| run_10 | ff | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.622e-01, -1.984e-01, -1.024e-02, …] | 4.722e+09 | +| run_11 | ss | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.669e-01, -1.979e-01, -3.070e-03, …] | 4.722e+09 | +| run_12 | tt | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.388e-01, -1.852e-01, -4.985e-03, …] | 4.722e+09 | +| run_13 | ff | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.407e-01, -1.880e-01, -9.263e-03, …] | 4.722e+09 | +| run_14 | ss | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.446e-01, -1.889e-01, -5.355e-03, …] | 4.722e+09 | +| run_15 | tt | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.832e-01, -1.548e-01, 2.955e-03, …] | 4.722e+09 | +| run_16 | ff | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.908e-01, -1.609e-01, -2.321e-03, …] | 4.722e+09 | +| run_17 | ss | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.858e-01, -1.573e-01, 2.540e-03, …] | 4.722e+09 | +| run_18 | tt | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.214e-01, -1.558e-01, 3.477e-02, …] | 4.722e+09 | +| run_19 | ff | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.163e-01, -1.529e-01, 3.475e-02, …] | 4.722e+09 | +| run_20 | ss | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.365e-01, -1.657e-01, 3.100e-02, …] | 4.722e+09 | +| run_21 | tt | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.748e-01, -1.328e-01, 3.931e-02, …] | 4.722e+09 | +| run_22 | ff | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.701e-01, -1.295e-01, 4.028e-02, …] | 4.722e+09 | +| run_23 | ss | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.957e-01, -1.475e-01, 3.197e-02, …] | 4.722e+09 | +| run_24 | tt | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-1.909e-01, -9.049e-02, 3.946e-02, …] | 4.722e+09 | +| run_25 | ff | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-1.879e-01, -8.812e-02, 4.047e-02, …] | 4.722e+09 | +| run_26 | ss | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.136e-01, -1.054e-01, 3.486e-02, …] | 4.722e+09 | diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/CML_core_tb.sch new file mode 100644 index 00000000..48f6f0bb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=CACE\{vdd\} savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/CML_core_tb.sch new file mode 100644 index 00000000..e5ea876a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/CML_core_tb_0.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/CML_core_tb_0.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/CML_core_tb_0.data new file mode 100644 index 00000000..4cb5b399 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/CML_core_tb_0.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.110742996065e-01 + 1.728000000000e-10 -1.869505717284e-01 + 1.828000000000e-10 -3.563037101706e-02 + 1.928000000000e-10 1.056708524540e-01 + 2.028000000000e-10 2.100393804445e-01 + 2.128000000000e-10 2.784249297688e-01 + 2.228000000000e-10 3.224310579067e-01 + 2.328000000000e-10 3.548600651170e-01 + 2.428000000000e-10 3.792482005271e-01 + 2.528000000000e-10 3.740820324036e-01 + 2.628000000000e-10 3.079440308227e-01 + 2.728000000000e-10 1.813826171807e-01 + 2.828000000000e-10 2.923027813912e-02 + 2.928000000000e-10 -1.118282325615e-01 + 3.028000000000e-10 -2.157337068367e-01 + 3.128000000000e-10 -2.829033176767e-01 + 3.228000000000e-10 -3.260714502323e-01 + 3.328000000000e-10 -3.577361248183e-01 + 3.428000000000e-10 -3.819104006606e-01 + 3.528000000000e-10 -3.764730474160e-01 + 3.628000000000e-10 -3.102968359246e-01 + 3.728000000000e-10 -1.832608913655e-01 + 3.828000000000e-10 -3.084931437320e-02 + 3.928000000000e-10 1.106163095990e-01 + 4.028000000000e-10 2.145714971977e-01 + 4.128000000000e-10 2.819937231053e-01 + 4.228000000000e-10 3.251740998910e-01 + 4.328000000000e-10 3.570946969464e-01 + 4.428000000000e-10 3.813004444382e-01 + 4.528000000000e-10 3.761230596147e-01 + 4.628000000000e-10 3.099646053412e-01 + 4.728000000000e-10 1.831473345022e-01 + 4.828000000000e-10 3.069401022130e-02 + 4.928000000000e-10 -1.106258411343e-01 + 5.028000000000e-10 -2.146793601179e-01 + 5.128000000000e-10 -2.820035552799e-01 + 5.228000000000e-10 -3.252909243829e-01 + 5.328000000000e-10 -3.570986338553e-01 + 5.428000000000e-10 -3.813904658256e-01 + 5.528000000000e-10 -3.760889514061e-01 + 5.628000000000e-10 -3.100114096943e-01 + 5.728000000000e-10 -1.830827247194e-01 + 5.828000000000e-10 -3.072480545922e-02 + 5.928000000000e-10 1.106906463094e-01 + 6.028000000000e-10 2.146493837568e-01 + 6.128000000000e-10 2.820610673881e-01 + 6.228000000000e-10 3.252525482967e-01 + 6.328000000000e-10 3.571504708749e-01 + 6.428000000000e-10 3.813516648295e-01 + 6.528000000000e-10 3.761390656738e-01 + 6.628000000000e-10 3.099742259389e-01 + 6.728000000000e-10 1.831331110808e-01 + 6.828000000000e-10 3.068765829312e-02 + 6.928000000000e-10 -1.106445812930e-01 + 7.028000000000e-10 -2.146859050297e-01 + 7.128000000000e-10 -2.820172231683e-01 + 7.228000000000e-10 -3.252905125649e-01 + 7.328000000000e-10 -3.571078709926e-01 + 7.428000000000e-10 -3.813893177320e-01 + 7.528000000000e-10 -3.760986555866e-01 + 7.628000000000e-10 -3.100117776476e-01 + 7.728000000000e-10 -1.830935153198e-01 + 7.828000000000e-10 -3.072484475908e-02 + 7.928000000000e-10 1.106810594907e-01 + 8.028000000000e-10 2.146507312123e-01 + 8.128000000000e-10 2.820530370402e-01 + 8.228000000000e-10 3.252547871433e-01 + 8.328000000000e-10 3.571432636036e-01 + 8.428000000000e-10 3.813547544577e-01 + 8.528000000000e-10 3.761324372121e-01 + 8.628000000000e-10 3.099775475493e-01 + 8.728000000000e-10 1.831274535707e-01 + 8.828000000000e-10 3.069175078476e-02 + 8.928000000000e-10 -1.106491559136e-01 + 9.028000000000e-10 -2.146821655528e-01 + 9.128000000000e-10 -2.820218639330e-01 + 9.228000000000e-10 -3.252864642203e-01 + 9.328000000000e-10 -3.571122611941e-01 + 9.428000000000e-10 -3.813854215351e-01 + 9.528000000000e-10 -3.761024723822e-01 + 9.628000000000e-10 -3.100075395903e-01 + 9.728000000000e-10 -1.830975404653e-01 + 9.828000000000e-10 -3.072097080048e-02 + 9.928000000000e-10 1.106770531472e-01 + 1.000000000000e-09 1.895325033433e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/conditions.yaml new file mode 100644 index 00000000..d2b75cc9 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_00 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/CML_core_tb.sch new file mode 100644 index 00000000..31fd1993 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/CML_core_tb_1.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/CML_core_tb_1.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/CML_core_tb_1.data new file mode 100644 index 00000000..2b8492c0 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/CML_core_tb_1.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.098686002716e-01 + 1.728000000000e-10 -1.894560696460e-01 + 1.828000000000e-10 -4.059695742871e-02 + 1.928000000000e-10 9.940964501315e-02 + 2.028000000000e-10 2.033133834097e-01 + 2.128000000000e-10 2.719620830710e-01 + 2.228000000000e-10 3.163098950569e-01 + 2.328000000000e-10 3.491513279687e-01 + 2.428000000000e-10 3.741332087119e-01 + 2.528000000000e-10 3.700254590965e-01 + 2.628000000000e-10 3.062168938694e-01 + 2.728000000000e-10 1.827341653261e-01 + 2.828000000000e-10 3.280764574542e-02 + 2.928000000000e-10 -1.069769977212e-01 + 3.028000000000e-10 -2.102924295592e-01 + 3.128000000000e-10 -2.774748738503e-01 + 3.228000000000e-10 -3.207751929169e-01 + 3.328000000000e-10 -3.527202709264e-01 + 3.428000000000e-10 -3.774342269369e-01 + 3.528000000000e-10 -3.730540733905e-01 + 3.628000000000e-10 -3.091949741363e-01 + 3.728000000000e-10 -1.851642002832e-01 + 3.828000000000e-10 -3.487935842603e-02 + 3.928000000000e-10 1.053970083053e-01 + 4.028000000000e-10 2.088131472734e-01 + 4.128000000000e-10 2.762908135843e-01 + 4.228000000000e-10 3.196385089100e-01 + 4.328000000000e-10 3.518763575372e-01 + 4.428000000000e-10 3.766558038448e-01 + 4.528000000000e-10 3.725714207051e-01 + 4.628000000000e-10 3.087619830708e-01 + 4.728000000000e-10 1.849833837695e-01 + 4.828000000000e-10 3.467977975354e-02 + 4.928000000000e-10 -1.054340839288e-01 + 5.028000000000e-10 -2.089448612506e-01 + 5.128000000000e-10 -2.763231704068e-01 + 5.228000000000e-10 -3.197791718821e-01 + 5.328000000000e-10 -3.518998659973e-01 + 5.428000000000e-10 -3.767613178326e-01 + 5.528000000000e-10 -3.725445308461e-01 + 5.628000000000e-10 -3.088109693961e-01 + 5.728000000000e-10 -1.849155432321e-01 + 5.828000000000e-10 -3.470667341543e-02 + 5.928000000000e-10 1.055048847061e-01 + 6.028000000000e-10 2.089187592091e-01 + 6.128000000000e-10 2.763849186823e-01 + 6.228000000000e-10 3.197425041182e-01 + 6.328000000000e-10 3.519544114659e-01 + 6.428000000000e-10 3.767237647599e-01 + 6.528000000000e-10 3.725977061828e-01 + 6.628000000000e-10 3.087755728399e-01 + 6.728000000000e-10 1.849692271918e-01 + 6.828000000000e-10 3.467099374312e-02 + 6.928000000000e-10 -1.054562384013e-01 + 7.028000000000e-10 -2.089544093361e-01 + 7.128000000000e-10 -2.763388509076e-01 + 7.228000000000e-10 -3.197800091948e-01 + 7.328000000000e-10 -3.519101110125e-01 + 7.428000000000e-10 -3.767612419697e-01 + 7.528000000000e-10 -3.725558598664e-01 + 7.628000000000e-10 -3.088133010441e-01 + 7.728000000000e-10 -1.849285593480e-01 + 7.828000000000e-10 -3.470862903587e-02 + 7.928000000000e-10 1.054936381918e-01 + 8.028000000000e-10 2.089186129636e-01 + 8.128000000000e-10 2.763755879874e-01 + 8.228000000000e-10 3.197437164625e-01 + 8.328000000000e-10 3.519463479929e-01 + 8.428000000000e-10 3.767260853907e-01 + 8.528000000000e-10 3.725904126785e-01 + 8.628000000000e-10 3.087783440951e-01 + 8.728000000000e-10 1.849632167070e-01 + 8.828000000000e-10 3.467482549783e-02 + 8.928000000000e-10 -1.054610682584e-01 + 9.028000000000e-10 -2.089507846182e-01 + 9.128000000000e-10 -2.763436586770e-01 + 9.228000000000e-10 -3.197760754687e-01 + 9.328000000000e-10 -3.519146615050e-01 + 9.428000000000e-10 -3.767573997120e-01 + 9.528000000000e-10 -3.725597535055e-01 + 9.628000000000e-10 -3.088090609970e-01 + 9.728000000000e-10 -1.849326628321e-01 + 9.828000000000e-10 -3.470475490247e-02 + 9.928000000000e-10 1.054896146910e-01 + 1.000000000000e-09 1.838520001242e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/conditions.yaml new file mode 100644 index 00000000..d52ae0b6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 1 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_01 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/CML_core_tb.sch new file mode 100644 index 00000000..4d076e38 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/CML_core_tb_2.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/CML_core_tb_2.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/CML_core_tb_2.data new file mode 100644 index 00000000..b332ca2c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/CML_core_tb_2.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.162797108708e-01 + 1.728000000000e-10 -1.875883768906e-01 + 1.828000000000e-10 -3.217177564589e-02 + 1.928000000000e-10 1.118453904517e-01 + 2.028000000000e-10 2.178869753922e-01 + 2.128000000000e-10 2.869187499571e-01 + 2.228000000000e-10 3.311831063176e-01 + 2.328000000000e-10 3.637965093552e-01 + 2.428000000000e-10 3.884475585753e-01 + 2.528000000000e-10 3.831703446637e-01 + 2.628000000000e-10 3.149426000366e-01 + 2.728000000000e-10 1.840825734866e-01 + 2.828000000000e-10 2.786370536806e-02 + 2.928000000000e-10 -1.159899232258e-01 + 3.028000000000e-10 -2.217323928122e-01 + 3.128000000000e-10 -2.897841810826e-01 + 3.228000000000e-10 -3.334256487170e-01 + 3.328000000000e-10 -3.654508602495e-01 + 3.428000000000e-10 -3.900407544937e-01 + 3.528000000000e-10 -3.846189534315e-01 + 3.628000000000e-10 -3.164922452622e-01 + 3.728000000000e-10 -1.853182634851e-01 + 3.828000000000e-10 -2.898615964086e-02 + 3.928000000000e-10 1.151710782521e-01 + 4.028000000000e-10 2.209054309263e-01 + 4.128000000000e-10 2.891817322742e-01 + 4.228000000000e-10 3.328077516782e-01 + 4.328000000000e-10 3.650515838921e-01 + 4.428000000000e-10 3.896233583948e-01 + 4.528000000000e-10 3.844074302627e-01 + 4.628000000000e-10 3.162448842688e-01 + 4.728000000000e-10 1.852475068120e-01 + 4.828000000000e-10 2.884623360652e-02 + 4.928000000000e-10 -1.151788252337e-01 + 5.028000000000e-10 -2.210147130581e-01 + 5.128000000000e-10 -2.891872658193e-01 + 5.228000000000e-10 -3.329167168088e-01 + 5.328000000000e-10 -3.650471930963e-01 + 5.428000000000e-10 -3.897100874545e-01 + 5.528000000000e-10 -3.843762306477e-01 + 5.628000000000e-10 -3.163013912188e-01 + 5.728000000000e-10 -1.851950213487e-01 + 5.828000000000e-10 -2.889036873678e-02 + 5.928000000000e-10 1.152312899162e-01 + 6.028000000000e-10 2.209735588305e-01 + 6.128000000000e-10 2.892357416511e-01 + 6.228000000000e-10 3.328707955285e-01 + 6.328000000000e-10 3.650931065031e-01 + 6.428000000000e-10 3.896657987149e-01 + 6.528000000000e-10 3.844215105032e-01 + 6.628000000000e-10 3.162596917265e-01 + 6.728000000000e-10 1.852417351036e-01 + 6.828000000000e-10 2.884992827621e-02 + 6.928000000000e-10 -1.151876679011e-01 + 7.028000000000e-10 -2.210123101756e-01 + 7.128000000000e-10 -2.891938845816e-01 + 7.228000000000e-10 -3.329106389600e-01 + 7.328000000000e-10 -3.650518039465e-01 + 7.428000000000e-10 -3.897047407363e-01 + 7.528000000000e-10 -3.843819858648e-01 + 7.628000000000e-10 -3.162978744015e-01 + 7.728000000000e-10 -1.852023753321e-01 + 7.828000000000e-10 -2.888743165850e-02 + 7.928000000000e-10 1.152240030808e-01 + 8.028000000000e-10 2.209771419031e-01 + 8.128000000000e-10 2.892295361788e-01 + 8.228000000000e-10 3.328747680971e-01 + 8.328000000000e-10 3.650871456099e-01 + 8.428000000000e-10 3.896701175780e-01 + 8.528000000000e-10 3.844156912621e-01 + 8.628000000000e-10 3.162637401476e-01 + 8.728000000000e-10 1.852363586492e-01 + 8.828000000000e-10 2.885434112124e-02 + 8.928000000000e-10 -1.151920978903e-01 + 9.028000000000e-10 -2.210084087345e-01 + 9.128000000000e-10 -2.891984388712e-01 + 9.228000000000e-10 -3.329064027155e-01 + 9.328000000000e-10 -3.650560988894e-01 + 9.428000000000e-10 -3.897007143418e-01 + 9.528000000000e-10 -3.843858173814e-01 + 9.628000000000e-10 -3.162935974835e-01 + 9.728000000000e-10 -1.852064424274e-01 + 9.828000000000e-10 -2.888350905479e-02 + 9.928000000000e-10 1.152199079204e-01 + 1.000000000000e-09 1.954791142410e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/conditions.yaml new file mode 100644 index 00000000..ede84efb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 2 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_02 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/CML_core_tb.sch new file mode 100644 index 00000000..00317020 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/CML_core_tb_3.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/CML_core_tb_3.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/CML_core_tb_3.data new file mode 100644 index 00000000..6dccbfd6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/CML_core_tb_3.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.914571027454e-01 + 1.728000000000e-10 -1.780117263272e-01 + 1.828000000000e-10 -3.802564096594e-02 + 1.928000000000e-10 9.479025580261e-02 + 2.028000000000e-10 1.961220444980e-01 + 2.128000000000e-10 2.643669322964e-01 + 2.228000000000e-10 3.071498875260e-01 + 2.328000000000e-10 3.351667250191e-01 + 2.428000000000e-10 3.529478733093e-01 + 2.528000000000e-10 3.439767079911e-01 + 2.628000000000e-10 2.827109934029e-01 + 2.728000000000e-10 1.683025534555e-01 + 2.828000000000e-10 2.843266655337e-02 + 2.928000000000e-10 -1.036223502576e-01 + 3.028000000000e-10 -2.042863713809e-01 + 3.128000000000e-10 -2.713818104821e-01 + 3.228000000000e-10 -3.132717880322e-01 + 3.328000000000e-10 -3.402903477971e-01 + 3.428000000000e-10 -3.574262556597e-01 + 3.528000000000e-10 -3.476240566503e-01 + 3.628000000000e-10 -2.857203755187e-01 + 3.728000000000e-10 -1.703849236420e-01 + 3.828000000000e-10 -2.994825869373e-02 + 3.928000000000e-10 1.026817167876e-01 + 4.028000000000e-10 2.034750084544e-01 + 4.128000000000e-10 2.707812081585e-01 + 4.228000000000e-10 3.126503625184e-01 + 4.328000000000e-10 3.399043734480e-01 + 4.428000000000e-10 3.571021595385e-01 + 4.528000000000e-10 3.475896983741e-01 + 4.628000000000e-10 2.857411927694e-01 + 4.728000000000e-10 1.706053611761e-01 + 4.828000000000e-10 3.010795594348e-02 + 4.928000000000e-10 -1.024135388755e-01 + 5.028000000000e-10 -2.033190471438e-01 + 5.128000000000e-10 -2.705615444577e-01 + 5.228000000000e-10 -3.125558523975e-01 + 5.328000000000e-10 -3.397330193449e-01 + 5.428000000000e-10 -3.570354300338e-01 + 5.528000000000e-10 -3.474353611027e-01 + 5.628000000000e-10 -2.856876769732e-01 + 5.728000000000e-10 -1.704760895977e-01 + 5.828000000000e-10 -3.008641427314e-02 + 5.928000000000e-10 1.025087996136e-01 + 6.028000000000e-10 2.033209986443e-01 + 6.128000000000e-10 2.706412375819e-01 + 6.228000000000e-10 3.125457575810e-01 + 6.328000000000e-10 3.398008382665e-01 + 6.428000000000e-10 3.570145583479e-01 + 6.528000000000e-10 3.474888598072e-01 + 6.628000000000e-10 2.856551852535e-01 + 6.728000000000e-10 1.705188293935e-01 + 6.828000000000e-10 3.004736925580e-02 + 6.928000000000e-10 -1.024728514478e-01 + 7.028000000000e-10 -2.033602328622e-01 + 7.128000000000e-10 -2.706061106716e-01 + 7.228000000000e-10 -3.125843283316e-01 + 7.328000000000e-10 -3.397655433228e-01 + 7.428000000000e-10 -3.570523646632e-01 + 7.528000000000e-10 -3.474554820929e-01 + 7.628000000000e-10 -2.856929985560e-01 + 7.728000000000e-10 -1.704859799650e-01 + 7.828000000000e-10 -3.008383757896e-02 + 7.928000000000e-10 1.025039608177e-01 + 8.028000000000e-10 2.033261442763e-01 + 8.128000000000e-10 2.706371082838e-01 + 8.228000000000e-10 3.125504649737e-01 + 8.328000000000e-10 3.397966066528e-01 + 8.428000000000e-10 3.570198965640e-01 + 8.528000000000e-10 3.474857187206e-01 + 8.628000000000e-10 2.856614378232e-01 + 8.728000000000e-10 1.705164607562e-01 + 8.828000000000e-10 3.005354621749e-02 + 8.928000000000e-10 -1.024749769036e-01 + 9.028000000000e-10 -2.033548454455e-01 + 9.128000000000e-10 -2.706087008930e-01 + 9.228000000000e-10 -3.125792630790e-01 + 9.328000000000e-10 -3.397683901773e-01 + 9.428000000000e-10 -3.570478314069e-01 + 9.528000000000e-10 -3.474583427153e-01 + 9.628000000000e-10 -2.856887110961e-01 + 9.728000000000e-10 -1.704892548593e-01 + 9.828000000000e-10 -3.008001356704e-02 + 9.928000000000e-10 1.025005080892e-01 + 1.000000000000e-09 1.786649040194e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/conditions.yaml new file mode 100644 index 00000000..b2ba9603 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 3 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_03 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/CML_core_tb.sch new file mode 100644 index 00000000..37684dfa --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/CML_core_tb_4.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/CML_core_tb_4.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/CML_core_tb_4.data new file mode 100644 index 00000000..3efc8a54 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/CML_core_tb_4.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.908886906683e-01 + 1.728000000000e-10 -1.805890382926e-01 + 1.828000000000e-10 -4.276329247682e-02 + 1.928000000000e-10 8.882407595099e-02 + 2.028000000000e-10 1.894983505466e-01 + 2.128000000000e-10 2.576242567207e-01 + 2.228000000000e-10 3.005212718886e-01 + 2.328000000000e-10 3.289546768723e-01 + 2.428000000000e-10 3.474240530436e-01 + 2.528000000000e-10 3.394794629215e-01 + 2.628000000000e-10 2.802266193594e-01 + 2.728000000000e-10 1.685520573893e-01 + 2.828000000000e-10 3.081792474830e-02 + 2.928000000000e-10 -9.985913249602e-02 + 3.028000000000e-10 -1.996535082954e-01 + 3.128000000000e-10 -2.663519845580e-01 + 3.228000000000e-10 -3.081166100610e-01 + 3.328000000000e-10 -3.353557582557e-01 + 3.428000000000e-10 -3.530339682910e-01 + 3.528000000000e-10 -3.441234226063e-01 + 3.628000000000e-10 -2.840838930007e-01 + 3.728000000000e-10 -1.712890179908e-01 + 3.828000000000e-10 -3.280692441870e-02 + 3.928000000000e-10 9.858702888345e-02 + 4.028000000000e-10 1.985844458095e-01 + 4.128000000000e-10 2.655374220709e-01 + 4.228000000000e-10 3.073092043222e-01 + 4.328000000000e-10 3.348254361967e-01 + 4.428000000000e-10 3.526065806553e-01 + 4.528000000000e-10 3.440384505411e-01 + 4.628000000000e-10 2.840943593119e-01 + 4.728000000000e-10 1.715352376725e-01 + 4.828000000000e-10 3.300625747524e-02 + 4.928000000000e-10 -9.826793525126e-02 + 5.028000000000e-10 -1.983826392696e-01 + 5.128000000000e-10 -2.652748957302e-01 + 5.228000000000e-10 -3.071819372703e-01 + 5.328000000000e-10 -3.346211766496e-01 + 5.428000000000e-10 -3.525115401756e-01 + 5.528000000000e-10 -3.438520776438e-01 + 5.628000000000e-10 -2.840132934403e-01 + 5.728000000000e-10 -1.713783534881e-01 + 5.828000000000e-10 -3.296528839742e-02 + 5.928000000000e-10 9.838210726041e-02 + 6.028000000000e-10 1.983970962128e-01 + 6.128000000000e-10 2.653685996210e-01 + 6.228000000000e-10 3.071805271474e-01 + 6.328000000000e-10 3.346994451143e-01 + 6.428000000000e-10 3.524959527178e-01 + 6.528000000000e-10 3.439124816552e-01 + 6.628000000000e-10 2.839825148385e-01 + 6.728000000000e-10 1.714247364616e-01 + 6.828000000000e-10 3.292536702304e-02 + 6.928000000000e-10 -9.834444145178e-02 + 7.028000000000e-10 -1.984381153623e-01 + 7.128000000000e-10 -2.653318964793e-01 + 7.228000000000e-10 -3.072207693265e-01 + 7.328000000000e-10 -3.346627011511e-01 + 7.428000000000e-10 -3.525355719541e-01 + 7.528000000000e-10 -3.438780517049e-01 + 7.628000000000e-10 -2.840226095914e-01 + 7.728000000000e-10 -1.713910964736e-01 + 7.828000000000e-10 -3.296406429130e-02 + 7.928000000000e-10 9.837645950128e-02 + 8.028000000000e-10 1.984019833998e-01 + 8.128000000000e-10 2.653640104122e-01 + 8.228000000000e-10 3.071850636337e-01 + 8.328000000000e-10 3.346949515146e-01 + 8.428000000000e-10 3.525014052751e-01 + 8.528000000000e-10 3.439095067618e-01 + 8.628000000000e-10 2.839893402731e-01 + 8.728000000000e-10 1.714228569780e-01 + 8.828000000000e-10 3.293222880403e-02 + 8.928000000000e-10 -9.834616516704e-02 + 9.028000000000e-10 -1.984321208293e-01 + 9.128000000000e-10 -2.653341991167e-01 + 9.228000000000e-10 -3.072152380466e-01 + 9.328000000000e-10 -3.346653803170e-01 + 9.428000000000e-10 -3.525306496503e-01 + 9.528000000000e-10 -3.438807929682e-01 + 9.628000000000e-10 -2.840179937834e-01 + 9.728000000000e-10 -1.713943425416e-01 + 9.828000000000e-10 -3.296001530074e-02 + 9.928000000000e-10 9.837298926970e-02 + 1.000000000000e-09 1.738955459088e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/conditions.yaml new file mode 100644 index 00000000..090213b1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 4 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_04 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/CML_core_tb.sch new file mode 100644 index 00000000..c281295d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/CML_core_tb_5.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/CML_core_tb_5.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/CML_core_tb_5.data new file mode 100644 index 00000000..0cc77d23 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/CML_core_tb_5.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.958574299710e-01 + 1.728000000000e-10 -1.791897212785e-01 + 1.828000000000e-10 -3.599075048614e-02 + 1.928000000000e-10 9.946703268478e-02 + 2.028000000000e-10 2.032502871016e-01 + 2.128000000000e-10 2.733994094958e-01 + 2.228000000000e-10 3.172845988123e-01 + 2.328000000000e-10 3.455609123691e-01 + 2.428000000000e-10 3.630923957132e-01 + 2.528000000000e-10 3.534419450967e-01 + 2.628000000000e-10 2.903663934708e-01 + 2.728000000000e-10 1.726743312860e-01 + 2.828000000000e-10 2.930291139472e-02 + 2.928000000000e-10 -1.057514312075e-01 + 3.028000000000e-10 -2.091913834589e-01 + 3.128000000000e-10 -2.784696434768e-01 + 3.228000000000e-10 -3.216873931074e-01 + 3.328000000000e-10 -3.491870426412e-01 + 3.428000000000e-10 -3.662894191498e-01 + 3.528000000000e-10 -3.560374131806e-01 + 3.628000000000e-10 -2.925719059469e-01 + 3.728000000000e-10 -1.742159787839e-01 + 3.828000000000e-10 -3.049391935212e-02 + 3.928000000000e-10 1.049756016137e-01 + 4.028000000000e-10 2.084672065617e-01 + 4.128000000000e-10 2.779301238417e-01 + 4.228000000000e-10 3.211180618030e-01 + 4.328000000000e-10 3.488255023686e-01 + 4.428000000000e-10 3.659572542624e-01 + 4.528000000000e-10 3.559493947967e-01 + 4.628000000000e-10 2.925058094407e-01 + 4.728000000000e-10 1.743267017008e-01 + 4.828000000000e-10 3.054314172764e-02 + 4.928000000000e-10 -1.048175245910e-01 + 5.028000000000e-10 -2.084096499031e-01 + 5.128000000000e-10 -2.777998408986e-01 + 5.228000000000e-10 -3.210985617265e-01 + 5.328000000000e-10 -3.487226120056e-01 + 5.428000000000e-10 -3.659481451181e-01 + 5.528000000000e-10 -3.558482598240e-01 + 5.628000000000e-10 -2.924942070749e-01 + 5.728000000000e-10 -1.742324941843e-01 + 5.828000000000e-10 -3.054486718364e-02 + 5.928000000000e-10 1.048934295445e-01 + 6.028000000000e-10 2.083991544976e-01 + 6.128000000000e-10 2.778660140822e-01 + 6.228000000000e-10 3.210794561497e-01 + 6.328000000000e-10 3.487805773205e-01 + 6.428000000000e-10 3.659226785140e-01 + 6.528000000000e-10 3.558970058340e-01 + 6.628000000000e-10 2.924624137185e-01 + 6.728000000000e-10 1.742748110039e-01 + 6.828000000000e-10 3.050920657876e-02 + 6.928000000000e-10 -1.048562048812e-01 + 7.028000000000e-10 -2.084343791218e-01 + 7.128000000000e-10 -2.778299623633e-01 + 7.228000000000e-10 -3.211147582115e-01 + 7.328000000000e-10 -3.487447461690e-01 + 7.428000000000e-10 -3.659575085549e-01 + 7.528000000000e-10 -3.558632428052e-01 + 7.628000000000e-10 -2.924972481137e-01 + 7.728000000000e-10 -1.742418088753e-01 + 7.828000000000e-10 -3.054328720193e-02 + 7.928000000000e-10 1.048870377838e-01 + 8.028000000000e-10 2.084024115537e-01 + 8.128000000000e-10 2.778603942564e-01 + 8.228000000000e-10 3.210827582845e-01 + 8.328000000000e-10 3.487751488045e-01 + 8.428000000000e-10 3.659266824704e-01 + 8.528000000000e-10 3.558925702991e-01 + 8.628000000000e-10 2.924671830422e-01 + 8.728000000000e-10 1.742711856894e-01 + 8.828000000000e-10 3.051417003050e-02 + 8.928000000000e-10 -1.048591994973e-01 + 9.028000000000e-10 -2.084299430076e-01 + 9.128000000000e-10 -2.778331783696e-01 + 9.228000000000e-10 -3.211104359655e-01 + 9.328000000000e-10 -3.487480244246e-01 + 9.428000000000e-10 -3.659535267111e-01 + 9.528000000000e-10 -3.558663548813e-01 + 9.628000000000e-10 -2.924933270906e-01 + 9.728000000000e-10 -1.742451324195e-01 + 9.828000000000e-10 -3.053963678018e-02 + 9.928000000000e-10 1.048836196344e-01 + 1.000000000000e-09 1.830293824662e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/conditions.yaml new file mode 100644 index 00000000..512289d6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 5 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_05 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/CML_core_tb.sch new file mode 100644 index 00000000..c2580788 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/CML_core_tb_6.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/CML_core_tb_6.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/CML_core_tb_6.data new file mode 100644 index 00000000..38ffd8bf --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/CML_core_tb_6.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.689355033953e-01 + 1.728000000000e-10 -1.691728954892e-01 + 1.828000000000e-10 -4.423302134033e-02 + 1.928000000000e-10 7.663444207075e-02 + 2.028000000000e-10 1.714764750752e-01 + 2.128000000000e-10 2.368219567798e-01 + 2.228000000000e-10 2.772768132445e-01 + 2.328000000000e-10 3.013675537348e-01 + 2.428000000000e-10 3.140706479520e-01 + 2.528000000000e-10 3.038549886105e-01 + 2.628000000000e-10 2.508404086347e-01 + 2.728000000000e-10 1.528360605683e-01 + 2.828000000000e-10 3.040034809293e-02 + 2.928000000000e-10 -8.785381094258e-02 + 3.028000000000e-10 -1.808734961109e-01 + 3.128000000000e-10 -2.445795528199e-01 + 3.228000000000e-10 -2.838354337528e-01 + 3.328000000000e-10 -3.065800962400e-01 + 3.428000000000e-10 -3.181767360109e-01 + 3.528000000000e-10 -3.065752663659e-01 + 3.628000000000e-10 -2.523878800401e-01 + 3.728000000000e-10 -1.531173668737e-01 + 3.828000000000e-10 -2.992055538556e-02 + 3.928000000000e-10 8.900435641641e-02 + 4.028000000000e-10 1.821756238512e-01 + 4.128000000000e-10 2.460123650690e-01 + 4.228000000000e-10 2.851182310100e-01 + 4.328000000000e-10 3.079291995556e-01 + 4.428000000000e-10 3.194129911462e-01 + 4.528000000000e-10 3.078915366323e-01 + 4.628000000000e-10 2.535144344421e-01 + 4.728000000000e-10 1.541542026196e-01 + 4.828000000000e-10 3.063651583090e-02 + 4.928000000000e-10 -8.839161491074e-02 + 5.028000000000e-10 -1.817999659778e-01 + 5.128000000000e-10 -2.456456661989e-01 + 5.228000000000e-10 -2.849195350591e-01 + 5.328000000000e-10 -3.077091828990e-01 + 5.428000000000e-10 -3.193505374448e-01 + 5.528000000000e-10 -3.078081521678e-01 + 5.628000000000e-10 -2.535787813503e-01 + 5.728000000000e-10 -1.541764927596e-01 + 5.828000000000e-10 -3.077048554081e-02 + 5.928000000000e-10 8.832790620553e-02 + 6.028000000000e-10 1.816551916875e-01 + 6.128000000000e-10 2.455879975104e-01 + 6.228000000000e-10 2.847911932982e-01 + 6.328000000000e-10 3.076677363016e-01 + 6.428000000000e-10 3.192371229053e-01 + 6.528000000000e-10 3.077778412262e-01 + 6.628000000000e-10 2.534819327505e-01 + 6.728000000000e-10 1.541683138663e-01 + 6.828000000000e-10 3.070155435378e-02 + 6.928000000000e-10 -8.831320560130e-02 + 7.028000000000e-10 -1.817038543937e-01 + 7.128000000000e-10 -2.455619958387e-01 + 7.228000000000e-10 -2.848320347671e-01 + 7.328000000000e-10 -3.076358698550e-01 + 7.428000000000e-10 -3.192710667609e-01 + 7.528000000000e-10 -3.077409972388e-01 + 7.628000000000e-10 -2.535098012890e-01 + 7.728000000000e-10 -1.541282589474e-01 + 7.828000000000e-10 -3.072672689244e-02 + 7.928000000000e-10 8.835148526653e-02 + 8.028000000000e-10 1.816795669555e-01 + 8.128000000000e-10 2.455984246601e-01 + 8.228000000000e-10 2.848062931006e-01 + 8.328000000000e-10 3.076705916890e-01 + 8.428000000000e-10 3.192450073559e-01 + 8.528000000000e-10 3.077736319697e-01 + 8.628000000000e-10 2.534831121829e-01 + 8.728000000000e-10 1.541590953584e-01 + 8.828000000000e-10 3.069946612700e-02 + 8.928000000000e-10 -8.832341199891e-02 + 9.028000000000e-10 -1.817063952021e-01 + 9.128000000000e-10 -2.455714256322e-01 + 9.228000000000e-10 -2.848333922463e-01 + 9.328000000000e-10 -3.076440936715e-01 + 9.428000000000e-10 -3.192716274515e-01 + 9.528000000000e-10 -3.077481608676e-01 + 9.628000000000e-10 -2.535093614867e-01 + 9.728000000000e-10 -1.541340765567e-01 + 9.828000000000e-10 -3.072486745089e-02 + 9.928000000000e-10 8.834711873249e-02 + 1.000000000000e-09 1.586239577417e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/conditions.yaml new file mode 100644 index 00000000..61a1ff89 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 6 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_06 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/CML_core_tb.sch new file mode 100644 index 00000000..e7567dd4 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/CML_core_tb_7.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/CML_core_tb_7.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/CML_core_tb_7.data new file mode 100644 index 00000000..1cfe87b5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/CML_core_tb_7.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.694477874818e-01 + 1.728000000000e-10 -1.721829739194e-01 + 1.828000000000e-10 -4.906833766415e-02 + 1.928000000000e-10 7.069743134728e-02 + 2.028000000000e-10 1.648418946330e-01 + 2.128000000000e-10 2.298765389610e-01 + 2.228000000000e-10 2.702802052070e-01 + 2.328000000000e-10 2.947129455777e-01 + 2.428000000000e-10 3.081296602318e-01 + 2.528000000000e-10 2.990063012040e-01 + 2.628000000000e-10 2.478884705263e-01 + 2.728000000000e-10 1.524230846398e-01 + 2.828000000000e-10 3.216725009037e-02 + 2.928000000000e-10 -8.452884553171e-02 + 3.028000000000e-10 -1.764495371150e-01 + 3.128000000000e-10 -2.394951663999e-01 + 3.228000000000e-10 -2.784178156025e-01 + 3.328000000000e-10 -3.012580547427e-01 + 3.428000000000e-10 -3.133510931360e-01 + 3.528000000000e-10 -3.026055002423e-01 + 3.628000000000e-10 -2.500554574282e-01 + 3.728000000000e-10 -1.530444893437e-01 + 3.828000000000e-10 -3.179895766292e-02 + 3.928000000000e-10 8.573594509971e-02 + 4.028000000000e-10 1.778922744476e-01 + 4.128000000000e-10 2.411102030583e-01 + 4.228000000000e-10 2.798967112063e-01 + 4.328000000000e-10 3.028156837380e-01 + 4.428000000000e-10 3.148075876296e-01 + 4.528000000000e-10 3.041758344829e-01 + 4.628000000000e-10 2.514478797306e-01 + 4.728000000000e-10 1.543354303295e-01 + 4.828000000000e-10 3.272908827542e-02 + 4.928000000000e-10 -8.494488064942e-02 + 5.028000000000e-10 -1.773750790235e-01 + 5.128000000000e-10 -2.406241070550e-01 + 5.228000000000e-10 -2.796032327906e-01 + 5.328000000000e-10 -3.025154625175e-01 + 5.428000000000e-10 -3.146850050735e-01 + 5.528000000000e-10 -3.040456856306e-01 + 5.628000000000e-10 -2.514865398019e-01 + 5.728000000000e-10 -1.543455010081e-01 + 5.828000000000e-10 -3.286780649422e-02 + 5.928000000000e-10 8.487071769529e-02 + 6.028000000000e-10 1.772120847555e-01 + 6.128000000000e-10 2.405506532865e-01 + 6.228000000000e-10 2.794557736074e-01 + 6.328000000000e-10 3.024581955274e-01 + 6.428000000000e-10 3.145521515255e-01 + 6.528000000000e-10 3.039990633934e-01 + 6.628000000000e-10 2.513709142203e-01 + 6.728000000000e-10 1.543241408079e-01 + 6.828000000000e-10 3.278555364704e-02 + 6.928000000000e-10 -8.486327141666e-02 + 7.028000000000e-10 -1.772689800248e-01 + 7.128000000000e-10 -2.405282060865e-01 + 7.228000000000e-10 -2.795021370136e-01 + 7.328000000000e-10 -3.024278022377e-01 + 7.428000000000e-10 -3.145896170200e-01 + 7.528000000000e-10 -3.039617953787e-01 + 7.628000000000e-10 -2.514004690324e-01 + 7.728000000000e-10 -1.542820043229e-01 + 7.828000000000e-10 -3.281110337775e-02 + 7.928000000000e-10 8.490436306023e-02 + 8.028000000000e-10 1.772446330839e-01 + 8.128000000000e-10 2.405674335146e-01 + 8.228000000000e-10 2.794761963085e-01 + 8.328000000000e-10 3.024650976088e-01 + 8.428000000000e-10 3.145632644585e-01 + 8.528000000000e-10 3.039968961590e-01 + 8.628000000000e-10 2.513733111446e-01 + 8.728000000000e-10 1.543150179356e-01 + 8.828000000000e-10 3.278304586331e-02 + 8.928000000000e-10 -8.487456857602e-02 + 9.028000000000e-10 -1.772725618584e-01 + 9.128000000000e-10 -2.405389250041e-01 + 9.228000000000e-10 -2.795045102279e-01 + 9.328000000000e-10 -3.024372521320e-01 + 9.428000000000e-10 -3.145911572553e-01 + 9.528000000000e-10 -3.039701598993e-01 + 9.628000000000e-10 -2.514009218164e-01 + 9.728000000000e-10 -1.542887967264e-01 + 9.828000000000e-10 -3.280979517783e-02 + 9.928000000000e-10 8.489941508642e-02 + 1.000000000000e-09 1.544118489485e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/conditions.yaml new file mode 100644 index 00000000..7136a755 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 7 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_07 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/CML_core_tb.sch new file mode 100644 index 00000000..723fad9c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/CML_core_tb_8.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/CML_core_tb_8.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/CML_core_tb_8.data new file mode 100644 index 00000000..b4ed17dd --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/CML_core_tb_8.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.722799425151e-01 + 1.728000000000e-10 -1.701277707773e-01 + 1.828000000000e-10 -4.252496989706e-02 + 1.928000000000e-10 8.092536896213e-02 + 2.028000000000e-10 1.785199933375e-01 + 2.128000000000e-10 2.463984181452e-01 + 2.228000000000e-10 2.885755113271e-01 + 2.328000000000e-10 3.131967480955e-01 + 2.428000000000e-10 3.255285716483e-01 + 2.528000000000e-10 3.143820454109e-01 + 2.628000000000e-10 2.595824958850e-01 + 2.728000000000e-10 1.585585813323e-01 + 2.828000000000e-10 3.254606172598e-02 + 2.928000000000e-10 -8.921916265210e-02 + 3.028000000000e-10 -1.857143058967e-01 + 3.128000000000e-10 -2.524588707093e-01 + 3.228000000000e-10 -2.937876617757e-01 + 3.328000000000e-10 -3.173655773168e-01 + 3.428000000000e-10 -3.288566343508e-01 + 3.528000000000e-10 -3.166123605828e-01 + 3.628000000000e-10 -2.609360611345e-01 + 3.728000000000e-10 -1.589355414621e-01 + 3.828000000000e-10 -3.237621747627e-02 + 3.928000000000e-10 8.990939637816e-02 + 4.028000000000e-10 1.864994737191e-01 + 4.128000000000e-10 2.533636311879e-01 + 4.228000000000e-10 2.945633129641e-01 + 4.328000000000e-10 3.182197832362e-01 + 4.428000000000e-10 3.296245618008e-01 + 4.528000000000e-10 3.174841059207e-01 + 4.628000000000e-10 2.616780558587e-01 + 4.728000000000e-10 1.596622360522e-01 + 4.828000000000e-10 3.287681921596e-02 + 4.928000000000e-10 -8.943999963453e-02 + 5.028000000000e-10 -1.862066308093e-01 + 5.128000000000e-10 -2.530527908612e-01 + 5.228000000000e-10 -2.943931136832e-01 + 5.328000000000e-10 -3.180152021024e-01 + 5.428000000000e-10 -3.295545667130e-01 + 5.528000000000e-10 -3.173812952412e-01 + 5.628000000000e-10 -2.617027726155e-01 + 5.728000000000e-10 -1.596411992093e-01 + 5.828000000000e-10 -3.295895028258e-02 + 5.928000000000e-10 8.942267434718e-02 + 6.028000000000e-10 1.861105403656e-01 + 6.128000000000e-10 2.530344325895e-01 + 6.228000000000e-10 2.943051008579e-01 + 6.328000000000e-10 3.180051485103e-01 + 6.428000000000e-10 3.294737915539e-01 + 6.528000000000e-10 3.173744791022e-01 + 6.628000000000e-10 2.616291881364e-01 + 6.728000000000e-10 1.596450333001e-01 + 6.828000000000e-10 3.290088244348e-02 + 6.928000000000e-10 -8.940659470005e-02 + 7.028000000000e-10 -1.861562133447e-01 + 7.128000000000e-10 -2.530116656482e-01 + 7.228000000000e-10 -2.943454309811e-01 + 7.328000000000e-10 -3.179780561670e-01 + 7.428000000000e-10 -3.295087969733e-01 + 7.528000000000e-10 -3.173438661274e-01 + 7.628000000000e-10 -2.616591955397e-01 + 7.728000000000e-10 -1.596115565426e-01 + 7.828000000000e-10 -3.292790237402e-02 + 7.928000000000e-10 8.943927261705e-02 + 8.028000000000e-10 1.861310420114e-01 + 8.128000000000e-10 2.530433655174e-01 + 8.228000000000e-10 2.943195630770e-01 + 8.328000000000e-10 3.180088285378e-01 + 8.428000000000e-10 3.294832118435e-01 + 8.528000000000e-10 3.173732295072e-01 + 8.628000000000e-10 2.616337486722e-01 + 8.728000000000e-10 1.596399004289e-01 + 8.828000000000e-10 3.290244884503e-02 + 8.928000000000e-10 -8.941301350766e-02 + 9.028000000000e-10 -1.861557185261e-01 + 9.128000000000e-10 -2.530180139920e-01 + 9.228000000000e-10 -2.943444772306e-01 + 9.328000000000e-10 -3.179838696148e-01 + 9.428000000000e-10 -3.295076633013e-01 + 9.528000000000e-10 -3.173492560727e-01 + 9.628000000000e-10 -2.616577755083e-01 + 9.728000000000e-10 -1.596163947717e-01 + 9.828000000000e-10 -3.292583900074e-02 + 9.928000000000e-10 8.943518431692e-02 + 1.000000000000e-09 1.621529465729e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/conditions.yaml new file mode 100644 index 00000000..e5d65a2e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 8 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_08 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/CML_core_tb.sch new file mode 100644 index 00000000..9cc3a624 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/CML_core_tb_9.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/CML_core_tb_9.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/CML_core_tb_9.data new file mode 100644 index 00000000..6b24d1d6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/CML_core_tb_9.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.622644182692e-01 + 1.728000000000e-10 -1.962653738736e-01 + 1.828000000000e-10 -5.712895575235e-03 + 1.928000000000e-10 1.510345047594e-01 + 2.028000000000e-10 2.432775412534e-01 + 2.128000000000e-10 2.772000132926e-01 + 2.228000000000e-10 3.161630086256e-01 + 2.328000000000e-10 3.654121904616e-01 + 2.428000000000e-10 4.070200809677e-01 + 2.528000000000e-10 4.211809118313e-01 + 2.628000000000e-10 3.552666659990e-01 + 2.728000000000e-10 1.954111420719e-01 + 2.828000000000e-10 7.499275151763e-03 + 2.928000000000e-10 -1.488912332472e-01 + 3.028000000000e-10 -2.420325529570e-01 + 3.128000000000e-10 -2.768171400503e-01 + 3.228000000000e-10 -3.164103191401e-01 + 3.328000000000e-10 -3.656815561297e-01 + 3.428000000000e-10 -4.072561733660e-01 + 3.528000000000e-10 -4.210637971044e-01 + 3.628000000000e-10 -3.548415521036e-01 + 3.728000000000e-10 -1.946286859654e-01 + 3.828000000000e-10 -6.746438981043e-03 + 3.928000000000e-10 1.496127957227e-01 + 4.028000000000e-10 2.425057762271e-01 + 4.128000000000e-10 2.772590268750e-01 + 4.228000000000e-10 3.167075169816e-01 + 4.328000000000e-10 3.660182242119e-01 + 4.428000000000e-10 4.074726111052e-01 + 4.528000000000e-10 4.212975956202e-01 + 4.628000000000e-10 3.549573822535e-01 + 4.728000000000e-10 1.947835560361e-01 + 4.828000000000e-10 6.801482567115e-03 + 4.928000000000e-10 -1.495086456760e-01 + 5.028000000000e-10 -2.424863730465e-01 + 5.128000000000e-10 -2.771744431737e-01 + 5.228000000000e-10 -3.166940000076e-01 + 5.328000000000e-10 -3.659398771497e-01 + 5.428000000000e-10 -4.074689465730e-01 + 5.528000000000e-10 -4.212394549000e-01 + 5.628000000000e-10 -3.549741510035e-01 + 5.728000000000e-10 -1.947436351784e-01 + 5.828000000000e-10 -6.830080160870e-03 + 5.928000000000e-10 1.495407150967e-01 + 6.028000000000e-10 2.424570295697e-01 + 6.128000000000e-10 2.772066160972e-01 + 6.228000000000e-10 3.166654934082e-01 + 6.328000000000e-10 3.659723864247e-01 + 6.428000000000e-10 4.074416211051e-01 + 6.528000000000e-10 4.212697301261e-01 + 6.628000000000e-10 3.549467093259e-01 + 6.728000000000e-10 1.947718238583e-01 + 6.828000000000e-10 6.800951177238e-03 + 6.928000000000e-10 -1.495148390529e-01 + 7.028000000000e-10 -2.424852043575e-01 + 7.128000000000e-10 -2.771809105751e-01 + 7.228000000000e-10 -3.166930947909e-01 + 7.328000000000e-10 -3.659459016360e-01 + 7.428000000000e-10 -4.074677461547e-01 + 7.528000000000e-10 -4.212442717757e-01 + 7.628000000000e-10 -3.549717520551e-01 + 7.728000000000e-10 -1.947463263521e-01 + 7.828000000000e-10 -6.825916545420e-03 + 7.928000000000e-10 1.495385751436e-01 + 8.028000000000e-10 2.424609931904e-01 + 8.128000000000e-10 2.772040406871e-01 + 8.228000000000e-10 3.166687905139e-01 + 8.328000000000e-10 3.659694951712e-01 + 8.428000000000e-10 4.074447010218e-01 + 8.528000000000e-10 4.212671408417e-01 + 8.628000000000e-10 3.549498827484e-01 + 8.728000000000e-10 1.947689363825e-01 + 8.828000000000e-10 6.803756635994e-03 + 8.928000000000e-10 -1.495176738691e-01 + 9.028000000000e-10 -2.424825342063e-01 + 9.128000000000e-10 -2.771836734306e-01 + 9.228000000000e-10 -3.166902103892e-01 + 9.328000000000e-10 -3.659485359213e-01 + 9.428000000000e-10 -4.074650210911e-01 + 9.528000000000e-10 -4.212469657833e-01 + 9.628000000000e-10 -3.549694058275e-01 + 9.728000000000e-10 -1.947487958951e-01 + 9.828000000000e-10 -6.823236278537e-03 + 9.928000000000e-10 1.495363177485e-01 + 1.000000000000e-09 2.250264100511e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/conditions.yaml new file mode 100644 index 00000000..65ec53fd --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 9 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_09 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/CML_core_tb.sch new file mode 100644 index 00000000..25f9f97d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/CML_core_tb_10.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/CML_core_tb_10.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/CML_core_tb_10.data new file mode 100644 index 00000000..f64d27bb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/CML_core_tb_10.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.621881537650e-01 + 1.728000000000e-10 -1.984429143572e-01 + 1.828000000000e-10 -1.024381876325e-02 + 1.928000000000e-10 1.456486678579e-01 + 2.028000000000e-10 2.379497773075e-01 + 2.128000000000e-10 2.714724605336e-01 + 2.228000000000e-10 3.108042897090e-01 + 2.328000000000e-10 3.600441003378e-01 + 2.428000000000e-10 4.020596908788e-01 + 2.528000000000e-10 4.176332246346e-01 + 2.628000000000e-10 3.534480183483e-01 + 2.728000000000e-10 1.957884716864e-01 + 2.828000000000e-10 1.048070619246e-02 + 2.928000000000e-10 -1.446967472000e-01 + 3.028000000000e-10 -2.375576326508e-01 + 3.128000000000e-10 -2.717915022579e-01 + 3.228000000000e-10 -3.116603869888e-01 + 3.328000000000e-10 -3.608573425706e-01 + 3.428000000000e-10 -4.027490548925e-01 + 3.528000000000e-10 -4.178578104758e-01 + 3.628000000000e-10 -3.532507313188e-01 + 3.728000000000e-10 -1.951536666098e-01 + 3.828000000000e-10 -9.813336101525e-03 + 3.928000000000e-10 1.453604720604e-01 + 4.028000000000e-10 2.379857130154e-01 + 4.128000000000e-10 2.721818635676e-01 + 4.228000000000e-10 3.119088225778e-01 + 4.328000000000e-10 3.611475798924e-01 + 4.428000000000e-10 4.029304727738e-01 + 4.528000000000e-10 4.180700216423e-01 + 4.628000000000e-10 3.533627988360e-01 + 4.728000000000e-10 1.953149158213e-01 + 4.828000000000e-10 9.881134950277e-03 + 4.928000000000e-10 -1.452466419838e-01 + 5.028000000000e-10 -2.379576224969e-01 + 5.128000000000e-10 -2.720935242692e-01 + 5.228000000000e-10 -3.118909714313e-01 + 5.328000000000e-10 -3.610674239906e-01 + 5.428000000000e-10 -4.029229661263e-01 + 5.528000000000e-10 -4.180098057029e-01 + 5.628000000000e-10 -3.533753449283e-01 + 5.728000000000e-10 -1.952727841385e-01 + 5.828000000000e-10 -9.906008920915e-03 + 5.928000000000e-10 1.452800172029e-01 + 6.028000000000e-10 2.379306740359e-01 + 6.128000000000e-10 2.721261300904e-01 + 6.228000000000e-10 3.118646486801e-01 + 6.328000000000e-10 3.611003417151e-01 + 6.428000000000e-10 4.028972890619e-01 + 6.528000000000e-10 4.180401129989e-01 + 6.628000000000e-10 3.533488930459e-01 + 6.728000000000e-10 1.953007885397e-01 + 6.828000000000e-10 9.878072761317e-03 + 6.928000000000e-10 -1.452545395230e-01 + 7.028000000000e-10 -2.379578117562e-01 + 7.128000000000e-10 -2.721008877684e-01 + 7.228000000000e-10 -3.118914026492e-01 + 7.328000000000e-10 -3.610744602697e-01 + 7.428000000000e-10 -4.029226014194e-01 + 7.528000000000e-10 -4.180151483436e-01 + 7.628000000000e-10 -3.533732531474e-01 + 7.728000000000e-10 -1.952759500525e-01 + 7.828000000000e-10 -9.902411226855e-03 + 7.928000000000e-10 1.452776462046e-01 + 8.028000000000e-10 2.379341379884e-01 + 8.128000000000e-10 2.721234101956e-01 + 8.228000000000e-10 3.118677116052e-01 + 8.328000000000e-10 3.610975209728e-01 + 8.428000000000e-10 4.029000595077e-01 + 8.528000000000e-10 4.180375331400e-01 + 8.628000000000e-10 3.533517750284e-01 + 8.728000000000e-10 1.952981248182e-01 + 8.828000000000e-10 9.880873061622e-03 + 8.928000000000e-10 -1.452571579233e-01 + 9.028000000000e-10 -2.379551078725e-01 + 9.128000000000e-10 -2.721034614056e-01 + 9.228000000000e-10 -3.118886463518e-01 + 9.328000000000e-10 -3.610770519544e-01 + 9.428000000000e-10 -4.029199107687e-01 + 9.528000000000e-10 -4.180177452829e-01 + 9.628000000000e-10 -3.533708821878e-01 + 9.728000000000e-10 -1.952784134813e-01 + 9.828000000000e-10 -9.899898542678e-03 + 9.928000000000e-10 1.452754037376e-01 + 1.000000000000e-09 2.207322871295e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/conditions.yaml new file mode 100644 index 00000000..a23dc1e6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 10 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_10 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/CML_core_tb.sch new file mode 100644 index 00000000..d4ca065e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/CML_core_tb_11.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/CML_core_tb_11.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/CML_core_tb_11.data new file mode 100644 index 00000000..1453012b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/CML_core_tb_11.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.668500025046e-01 + 1.728000000000e-10 -1.978704758130e-01 + 1.828000000000e-10 -3.069550951996e-03 + 1.928000000000e-10 1.561389387989e-01 + 2.028000000000e-10 2.488697408913e-01 + 2.128000000000e-10 2.833379270136e-01 + 2.228000000000e-10 3.221467647695e-01 + 2.328000000000e-10 3.723176028273e-01 + 2.428000000000e-10 4.147931582649e-01 + 2.528000000000e-10 4.286646301121e-01 + 2.628000000000e-10 3.614677855799e-01 + 2.728000000000e-10 1.982726052647e-01 + 2.828000000000e-10 5.580533140739e-03 + 2.928000000000e-10 -1.536551403474e-01 + 3.028000000000e-10 -2.474729097395e-01 + 3.128000000000e-10 -2.827981749211e-01 + 3.228000000000e-10 -3.222400643179e-01 + 3.328000000000e-10 -3.724510578191e-01 + 3.428000000000e-10 -4.149487937489e-01 + 3.528000000000e-10 -4.285094572794e-01 + 3.628000000000e-10 -3.610716711123e-01 + 3.728000000000e-10 -1.975613483211e-01 + 3.828000000000e-10 -4.936396792217e-03 + 3.928000000000e-10 1.542720670721e-01 + 4.028000000000e-10 2.478554934965e-01 + 4.128000000000e-10 2.831768205427e-01 + 4.228000000000e-10 3.224764565266e-01 + 4.328000000000e-10 3.727376628527e-01 + 4.428000000000e-10 4.151128450004e-01 + 4.528000000000e-10 4.287030398326e-01 + 4.628000000000e-10 3.611465460996e-01 + 4.728000000000e-10 1.976871290976e-01 + 4.828000000000e-10 4.962067120498e-03 + 4.928000000000e-10 -1.541857483448e-01 + 5.028000000000e-10 -2.478549856990e-01 + 5.128000000000e-10 -2.831031432303e-01 + 5.228000000000e-10 -3.224786212940e-01 + 5.328000000000e-10 -3.726675199031e-01 + 5.428000000000e-10 -4.151222726988e-01 + 5.528000000000e-10 -4.286496175832e-01 + 5.628000000000e-10 -3.611719348809e-01 + 5.728000000000e-10 -1.976471175954e-01 + 5.828000000000e-10 -4.995016715658e-03 + 5.928000000000e-10 1.542195273485e-01 + 6.028000000000e-10 2.478226151197e-01 + 6.128000000000e-10 2.831371441394e-01 + 6.228000000000e-10 3.224465270882e-01 + 6.328000000000e-10 3.727020829784e-01 + 6.428000000000e-10 4.150919188021e-01 + 6.528000000000e-10 4.286821395136e-01 + 6.628000000000e-10 3.611419365066e-01 + 6.728000000000e-10 1.976777927703e-01 + 6.828000000000e-10 4.963507878799e-03 + 6.928000000000e-10 -1.541913949207e-01 + 7.028000000000e-10 -2.478529800499e-01 + 7.128000000000e-10 -2.831092109235e-01 + 7.228000000000e-10 -3.224762894768e-01 + 7.328000000000e-10 -3.726728668334e-01 + 7.428000000000e-10 -4.151201370880e-01 + 7.528000000000e-10 -4.286543531433e-01 + 7.628000000000e-10 -3.611692599178e-01 + 7.728000000000e-10 -1.976499135935e-01 + 7.828000000000e-10 -4.990471824028e-03 + 7.928000000000e-10 1.542171227717e-01 + 8.028000000000e-10 2.478269854332e-01 + 8.128000000000e-10 2.831343470853e-01 + 8.228000000000e-10 3.224500362551e-01 + 8.328000000000e-10 3.726987138014e-01 + 8.428000000000e-10 4.150953468135e-01 + 8.528000000000e-10 4.286792233560e-01 + 8.628000000000e-10 3.611455588852e-01 + 8.728000000000e-10 1.976743961081e-01 + 8.828000000000e-10 4.966432661841e-03 + 8.928000000000e-10 -1.541946484524e-01 + 9.028000000000e-10 -2.478502288236e-01 + 9.128000000000e-10 -2.831123474050e-01 + 9.228000000000e-10 -3.224731331421e-01 + 9.328000000000e-10 -3.726757720747e-01 + 9.428000000000e-10 -4.151172388981e-01 + 9.528000000000e-10 -4.286573581279e-01 + 9.628000000000e-10 -3.611667698498e-01 + 9.728000000000e-10 -1.976525646923e-01 + 9.828000000000e-10 -4.987471597641e-03 + 9.928000000000e-10 1.542147143463e-01 + 1.000000000000e-09 2.301006397866e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/conditions.yaml new file mode 100644 index 00000000..84aaa3b7 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 11 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_11 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/CML_core_tb.sch new file mode 100644 index 00000000..c4849631 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/CML_core_tb_12.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/CML_core_tb_12.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/CML_core_tb_12.data new file mode 100644 index 00000000..3b0782c6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/CML_core_tb_12.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.388323931118e-01 + 1.728000000000e-10 -1.851651732117e-01 + 1.828000000000e-10 -4.985209728467e-03 + 1.928000000000e-10 1.464303664236e-01 + 2.028000000000e-10 2.390890865534e-01 + 2.128000000000e-10 2.778147857521e-01 + 2.228000000000e-10 3.140298283994e-01 + 2.328000000000e-10 3.564486269316e-01 + 2.428000000000e-10 3.920777300126e-01 + 2.528000000000e-10 4.026431485981e-01 + 2.628000000000e-10 3.407818057760e-01 + 2.728000000000e-10 1.919413521399e-01 + 2.828000000000e-10 1.380608162301e-02 + 2.928000000000e-10 -1.377275777470e-01 + 3.028000000000e-10 -2.320727525709e-01 + 3.128000000000e-10 -2.723718882130e-01 + 3.228000000000e-10 -3.097195919600e-01 + 3.328000000000e-10 -3.525356430610e-01 + 3.428000000000e-10 -3.885938438581e-01 + 3.528000000000e-10 -3.995683250409e-01 + 3.628000000000e-10 -3.382392747069e-01 + 3.728000000000e-10 -1.897685835172e-01 + 3.828000000000e-10 -1.211190537496e-02 + 3.928000000000e-10 1.391365825109e-01 + 4.028000000000e-10 2.331433172305e-01 + 4.128000000000e-10 2.733678679410e-01 + 4.228000000000e-10 3.105714733021e-01 + 4.328000000000e-10 3.533708758772e-01 + 4.428000000000e-10 3.892622592719e-01 + 4.528000000000e-10 4.001272859757e-01 + 4.628000000000e-10 3.385642563623e-01 + 4.728000000000e-10 1.899916781684e-01 + 4.828000000000e-10 1.218033620775e-02 + 4.928000000000e-10 -1.390656421002e-01 + 5.028000000000e-10 -2.331398693887e-01 + 5.128000000000e-10 -2.733037181082e-01 + 5.228000000000e-10 -3.105518491305e-01 + 5.328000000000e-10 -3.533032068815e-01 + 5.428000000000e-10 -3.892531494066e-01 + 5.528000000000e-10 -4.000849100741e-01 + 5.628000000000e-10 -3.385845178207e-01 + 5.728000000000e-10 -1.899774211598e-01 + 5.828000000000e-10 -1.221996984529e-02 + 5.928000000000e-10 1.390720456320e-01 + 6.028000000000e-10 2.331027694491e-01 + 6.128000000000e-10 2.733156842718e-01 + 6.228000000000e-10 3.105197170718e-01 + 6.328000000000e-10 3.533171034352e-01 + 6.428000000000e-10 3.892243222051e-01 + 6.528000000000e-10 4.000997182403e-01 + 6.628000000000e-10 3.385594083538e-01 + 6.728000000000e-10 1.899934277570e-01 + 6.828000000000e-10 1.219466050150e-02 + 6.928000000000e-10 -1.390553921853e-01 + 7.028000000000e-10 -2.331263672195e-01 + 7.128000000000e-10 -2.732987102222e-01 + 7.228000000000e-10 -3.105421090081e-01 + 7.328000000000e-10 -3.532994962925e-01 + 7.428000000000e-10 -3.892451651423e-01 + 7.528000000000e-10 -4.000824543639e-01 + 7.628000000000e-10 -3.385783830881e-01 + 7.728000000000e-10 -1.899748483052e-01 + 7.828000000000e-10 -1.221334688082e-02 + 7.928000000000e-10 1.390733351530e-01 + 8.028000000000e-10 2.331082732353e-01 + 8.128000000000e-10 2.733160005972e-01 + 8.228000000000e-10 3.105237742784e-01 + 8.328000000000e-10 3.533165556732e-01 + 8.428000000000e-10 3.892279285214e-01 + 8.528000000000e-10 4.000991009611e-01 + 8.628000000000e-10 3.385625511294e-01 + 8.728000000000e-10 1.899914169425e-01 + 8.828000000000e-10 1.219669858142e-02 + 8.928000000000e-10 -1.390576717936e-01 + 9.028000000000e-10 -2.331245304799e-01 + 9.128000000000e-10 -2.733009677599e-01 + 9.228000000000e-10 -3.105397739050e-01 + 9.328000000000e-10 -3.533012749995e-01 + 9.428000000000e-10 -3.892430673555e-01 + 9.528000000000e-10 -4.000844420176e-01 + 9.628000000000e-10 -3.385768441038e-01 + 9.728000000000e-10 -1.899764612955e-01 + 9.828000000000e-10 -1.221122328152e-02 + 9.928000000000e-10 1.390717643268e-01 + 1.000000000000e-09 2.142511381663e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/conditions.yaml new file mode 100644 index 00000000..f9219c6c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 12 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_12 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/CML_core_tb.sch new file mode 100644 index 00000000..3421eb12 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/CML_core_tb_13.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/CML_core_tb_13.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/CML_core_tb_13.data new file mode 100644 index 00000000..36de6040 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/CML_core_tb_13.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.406999838743e-01 + 1.728000000000e-10 -1.879936990253e-01 + 1.828000000000e-10 -9.262901303246e-03 + 1.928000000000e-10 1.413611635485e-01 + 2.028000000000e-10 2.336775345801e-01 + 2.128000000000e-10 2.717294842894e-01 + 2.228000000000e-10 3.082620487639e-01 + 2.328000000000e-10 3.509422339502e-01 + 2.428000000000e-10 3.871053596645e-01 + 2.528000000000e-10 3.988940820744e-01 + 2.628000000000e-10 3.384312270542e-01 + 2.728000000000e-10 1.913281233779e-01 + 2.828000000000e-10 1.537343295661e-02 + 2.928000000000e-10 -1.347916275204e-01 + 3.028000000000e-10 -2.283419665374e-01 + 3.128000000000e-10 -2.677291408127e-01 + 3.228000000000e-10 -3.052231075401e-01 + 3.328000000000e-10 -3.481601477547e-01 + 3.428000000000e-10 -3.845854123080e-01 + 3.528000000000e-10 -3.965379624605e-01 + 3.628000000000e-10 -3.363314255870e-01 + 3.728000000000e-10 -1.893723794407e-01 + 3.828000000000e-10 -1.375643865463e-02 + 3.928000000000e-10 1.361849816757e-01 + 4.028000000000e-10 2.294005939140e-01 + 4.128000000000e-10 2.686949729273e-01 + 4.228000000000e-10 3.060328157788e-01 + 4.328000000000e-10 3.489590274886e-01 + 4.428000000000e-10 3.852266672724e-01 + 4.528000000000e-10 3.970921187630e-01 + 4.628000000000e-10 3.366736237881e-01 + 4.728000000000e-10 1.896320772426e-01 + 4.828000000000e-10 1.386475371506e-02 + 4.928000000000e-10 -1.360753156283e-01 + 5.028000000000e-10 -2.293675908871e-01 + 5.128000000000e-10 -2.686062530832e-01 + 5.228000000000e-10 -3.059945800423e-01 + 5.328000000000e-10 -3.488729675224e-01 + 5.428000000000e-10 -3.852026785029e-01 + 5.528000000000e-10 -3.970350594993e-01 + 5.628000000000e-10 -3.366834486256e-01 + 5.728000000000e-10 -1.896077423819e-01 + 5.828000000000e-10 -1.389840122586e-02 + 5.928000000000e-10 1.360876217327e-01 + 6.028000000000e-10 2.293336021557e-01 + 6.128000000000e-10 2.686225622920e-01 + 6.228000000000e-10 3.059648098566e-01 + 6.328000000000e-10 3.488907093130e-01 + 6.428000000000e-10 3.851753633828e-01 + 6.528000000000e-10 3.970526526302e-01 + 6.628000000000e-10 3.366583891048e-01 + 6.728000000000e-10 1.896251667832e-01 + 6.828000000000e-10 1.387242911077e-02 + 6.928000000000e-10 -1.360702314024e-01 + 7.028000000000e-10 -2.293580006158e-01 + 7.128000000000e-10 -2.686047945045e-01 + 7.228000000000e-10 -3.059879182353e-01 + 7.328000000000e-10 -3.488722408399e-01 + 7.428000000000e-10 -3.851969589401e-01 + 7.528000000000e-10 -3.970345404264e-01 + 7.628000000000e-10 -3.366782708831e-01 + 7.728000000000e-10 -1.896058621860e-01 + 7.828000000000e-10 -1.389192450355e-02 + 7.928000000000e-10 1.360888260036e-01 + 8.028000000000e-10 2.293391038565e-01 + 8.128000000000e-10 2.686227634282e-01 + 8.228000000000e-10 3.059688096850e-01 + 8.328000000000e-10 3.488900661997e-01 + 8.428000000000e-10 3.851789257250e-01 + 8.528000000000e-10 3.970519764807e-01 + 8.628000000000e-10 3.366616134215e-01 + 8.728000000000e-10 1.896231972496e-01 + 8.828000000000e-10 1.387461571983e-02 + 8.928000000000e-10 -1.360724758723e-01 + 9.028000000000e-10 -2.293560182270e-01 + 9.128000000000e-10 -2.686070528237e-01 + 9.228000000000e-10 -3.059854790954e-01 + 9.328000000000e-10 -3.488740842624e-01 + 9.428000000000e-10 -3.851947329758e-01 + 9.528000000000e-10 -3.970365843841e-01 + 9.628000000000e-10 -3.366766115599e-01 + 9.728000000000e-10 -1.896075309897e-01 + 9.828000000000e-10 -1.388973786858e-02 + 9.928000000000e-10 1.360872156510e-01 + 1.000000000000e-09 2.108297225004e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/conditions.yaml new file mode 100644 index 00000000..191e2a61 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 13 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_13 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/CML_core_tb.sch new file mode 100644 index 00000000..e46477d4 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/CML_core_tb_14.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/CML_core_tb_14.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/CML_core_tb_14.data new file mode 100644 index 00000000..73c31d13 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/CML_core_tb_14.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.445927026449e-01 + 1.728000000000e-10 -1.889320969581e-01 + 1.828000000000e-10 -5.355234564888e-03 + 1.928000000000e-10 1.489911128277e-01 + 2.028000000000e-10 2.434822449071e-01 + 2.128000000000e-10 2.838702060450e-01 + 2.228000000000e-10 3.202156401988e-01 + 2.328000000000e-10 3.629401474789e-01 + 2.428000000000e-10 3.990998051164e-01 + 2.528000000000e-10 4.099063275401e-01 + 2.628000000000e-10 3.477923521709e-01 + 2.728000000000e-10 1.968519788675e-01 + 2.828000000000e-10 1.493750763318e-02 + 2.928000000000e-10 -1.398437743336e-01 + 3.028000000000e-10 -2.362338093992e-01 + 3.128000000000e-10 -2.782887085314e-01 + 3.228000000000e-10 -3.158910292643e-01 + 3.328000000000e-10 -3.590893499920e-01 + 3.428000000000e-10 -3.957248346768e-01 + 3.528000000000e-10 -4.069627998073e-01 + 3.628000000000e-10 -3.454070734708e-01 + 3.728000000000e-10 -1.948243362004e-01 + 3.828000000000e-10 -1.337926088934e-02 + 3.928000000000e-10 1.411472162204e-01 + 4.028000000000e-10 2.372231231196e-01 + 4.128000000000e-10 2.792284454069e-01 + 4.228000000000e-10 3.166817589057e-01 + 4.328000000000e-10 3.598702175634e-01 + 4.428000000000e-10 3.963375250752e-01 + 4.528000000000e-10 4.074753309124e-01 + 4.628000000000e-10 3.456854225481e-01 + 4.728000000000e-10 1.950177434222e-01 + 4.828000000000e-10 1.342430394201e-02 + 4.928000000000e-10 -1.410850608466e-01 + 5.028000000000e-10 -2.372286880899e-01 + 5.128000000000e-10 -2.791659662153e-01 + 5.228000000000e-10 -3.166689293508e-01 + 5.328000000000e-10 -3.598026374101e-01 + 5.428000000000e-10 -3.963331138013e-01 + 5.528000000000e-10 -4.074316676804e-01 + 5.628000000000e-10 -3.457088001737e-01 + 5.728000000000e-10 -1.950000158899e-01 + 5.828000000000e-10 -1.346504722293e-02 + 5.928000000000e-10 1.410957635246e-01 + 6.028000000000e-10 2.371909425038e-01 + 6.128000000000e-10 2.791817404178e-01 + 6.228000000000e-10 3.166356138828e-01 + 6.328000000000e-10 3.598203377806e-01 + 6.428000000000e-10 3.963033609435e-01 + 6.528000000000e-10 4.074499160221e-01 + 6.628000000000e-10 3.456826167292e-01 + 6.728000000000e-10 1.950190841630e-01 + 6.828000000000e-10 1.343803454206e-02 + 6.928000000000e-10 -1.410764950259e-01 + 7.028000000000e-10 -2.372163265848e-01 + 7.128000000000e-10 -2.791624229651e-01 + 7.228000000000e-10 -3.166599225368e-01 + 7.328000000000e-10 -3.598002455584e-01 + 7.428000000000e-10 -3.963259615583e-01 + 7.528000000000e-10 -4.074304662079e-01 + 7.628000000000e-10 -3.457033629648e-01 + 7.728000000000e-10 -1.949983704767e-01 + 7.828000000000e-10 -1.345872104163e-02 + 7.928000000000e-10 1.410962716693e-01 + 8.028000000000e-10 2.371963808526e-01 + 8.128000000000e-10 2.791814500218e-01 + 8.228000000000e-10 3.166396456569e-01 + 8.328000000000e-10 3.598191409746e-01 + 8.428000000000e-10 3.963069790813e-01 + 8.528000000000e-10 4.074488078929e-01 + 8.628000000000e-10 3.456858987705e-01 + 8.728000000000e-10 1.950166421641e-01 + 8.828000000000e-10 1.344025602045e-02 + 8.928000000000e-10 -1.410790665154e-01 + 9.028000000000e-10 -2.372142995262e-01 + 9.128000000000e-10 -2.791649325552e-01 + 9.228000000000e-10 -3.166573514474e-01 + 9.328000000000e-10 -3.598022359716e-01 + 9.428000000000e-10 -3.963236588924e-01 + 9.528000000000e-10 -4.074326778223e-01 + 9.628000000000e-10 -3.457016440453e-01 + 9.728000000000e-10 -1.950001702792e-01 + 9.828000000000e-10 -1.345633761364e-02 + 9.928000000000e-10 1.410945129066e-01 + 1.000000000000e-09 2.176807579100e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/conditions.yaml new file mode 100644 index 00000000..8d40025a --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 14 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_14 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/CML_core_tb.sch new file mode 100644 index 00000000..c0c12756 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/CML_core_tb_15.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/CML_core_tb_15.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/CML_core_tb_15.data new file mode 100644 index 00000000..6f87c434 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/CML_core_tb_15.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.831577979118e-01 + 1.728000000000e-10 -1.548331321524e-01 + 1.828000000000e-10 2.954507991941e-03 + 1.928000000000e-10 1.412083661187e-01 + 2.028000000000e-10 2.303947789211e-01 + 2.128000000000e-10 2.725788032239e-01 + 2.228000000000e-10 3.064646814943e-01 + 2.328000000000e-10 3.412898568956e-01 + 2.428000000000e-10 3.692979025942e-01 + 2.528000000000e-10 3.751979264520e-01 + 2.628000000000e-10 3.186495551608e-01 + 2.728000000000e-10 1.849115684226e-01 + 2.828000000000e-10 2.146912258403e-02 + 2.928000000000e-10 -1.215319416200e-01 + 3.028000000000e-10 -2.147336364713e-01 + 3.128000000000e-10 -2.593628319189e-01 + 3.228000000000e-10 -2.947919001104e-01 + 3.328000000000e-10 -3.306034656465e-01 + 3.428000000000e-10 -3.598903423599e-01 + 3.528000000000e-10 -3.674806029527e-01 + 3.628000000000e-10 -3.131864519443e-01 + 3.728000000000e-10 -1.816607205648e-01 + 3.828000000000e-10 -2.002885045896e-02 + 3.928000000000e-10 1.219326732879e-01 + 4.028000000000e-10 2.146583452252e-01 + 4.128000000000e-10 2.593288859790e-01 + 4.228000000000e-10 2.947836961551e-01 + 4.328000000000e-10 3.305873089453e-01 + 4.428000000000e-10 3.597520160348e-01 + 4.528000000000e-10 3.672634041173e-01 + 4.628000000000e-10 3.128292575731e-01 + 4.728000000000e-10 1.812525079401e-01 + 4.828000000000e-10 1.956255085056e-02 + 4.928000000000e-10 -1.223539241893e-01 + 5.028000000000e-10 -2.150587893921e-01 + 5.128000000000e-10 -2.596440912838e-01 + 5.228000000000e-10 -2.950896959018e-01 + 5.328000000000e-10 -3.308452440946e-01 + 5.428000000000e-10 -3.600168265621e-01 + 5.528000000000e-10 -3.674687038170e-01 + 5.628000000000e-10 -3.130140501398e-01 + 5.728000000000e-10 -1.813584327872e-01 + 5.828000000000e-10 -1.965159115909e-02 + 5.928000000000e-10 1.223212864923e-01 + 6.028000000000e-10 2.150157103205e-01 + 6.128000000000e-10 2.596318060931e-01 + 6.228000000000e-10 2.950524078153e-01 + 6.328000000000e-10 3.308363963911e-01 + 6.428000000000e-10 3.599874022300e-01 + 6.528000000000e-10 3.674690181116e-01 + 6.628000000000e-10 3.129980588961e-01 + 6.728000000000e-10 1.813712653368e-01 + 6.828000000000e-10 1.964491680526e-02 + 6.928000000000e-10 -1.223023112353e-01 + 7.028000000000e-10 -2.150202483004e-01 + 7.128000000000e-10 -2.596144309164e-01 + 7.228000000000e-10 -2.950582886643e-01 + 7.328000000000e-10 -3.308199600200e-01 + 7.428000000000e-10 -3.599931640339e-01 + 7.528000000000e-10 -3.674538095645e-01 + 7.628000000000e-10 -3.130042913922e-01 + 7.728000000000e-10 -1.813570925598e-01 + 7.828000000000e-10 -1.965290666609e-02 + 7.928000000000e-10 1.223145971689e-01 + 8.028000000000e-10 2.150114430495e-01 + 8.128000000000e-10 2.596256780136e-01 + 8.228000000000e-10 2.950490452158e-01 + 8.328000000000e-10 3.308307530718e-01 + 8.428000000000e-10 3.599842799802e-01 + 8.528000000000e-10 3.674639698479e-01 + 8.628000000000e-10 3.129957925611e-01 + 8.728000000000e-10 1.813666711568e-01 + 8.828000000000e-10 1.964348030724e-02 + 8.928000000000e-10 -1.223056361887e-01 + 9.028000000000e-10 -2.150207890100e-01 + 9.128000000000e-10 -2.596171721225e-01 + 9.228000000000e-10 -2.950581404305e-01 + 9.328000000000e-10 -3.308221104591e-01 + 9.428000000000e-10 -3.599929167296e-01 + 9.528000000000e-10 -3.674557320782e-01 + 9.628000000000e-10 -3.130039671541e-01 + 9.728000000000e-10 -1.813582011282e-01 + 9.828000000000e-10 -1.965175786777e-02 + 9.928000000000e-10 1.223137237372e-01 + 1.000000000000e-09 1.953703252853e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/conditions.yaml new file mode 100644 index 00000000..af051d44 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 15 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_15 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/CML_core_tb.sch new file mode 100644 index 00000000..1a545dad --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/CML_core_tb_16.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/CML_core_tb_16.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/CML_core_tb_16.data new file mode 100644 index 00000000..c0c44c66 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/CML_core_tb_16.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.908214410229e-01 + 1.728000000000e-10 -1.609006026552e-01 + 1.828000000000e-10 -2.321243117629e-03 + 1.928000000000e-10 1.363185315112e-01 + 2.028000000000e-10 2.253864999197e-01 + 2.128000000000e-10 2.667546328680e-01 + 2.228000000000e-10 3.007016001191e-01 + 2.328000000000e-10 3.359037685855e-01 + 2.428000000000e-10 3.646369081917e-01 + 2.528000000000e-10 3.717564842409e-01 + 2.628000000000e-10 3.164681086559e-01 + 2.728000000000e-10 1.842122200319e-01 + 2.828000000000e-10 2.261788955655e-02 + 2.928000000000e-10 -1.190364341005e-01 + 3.028000000000e-10 -2.112326750882e-01 + 3.128000000000e-10 -2.547832728498e-01 + 3.228000000000e-10 -2.901354995194e-01 + 3.328000000000e-10 -3.261256516764e-01 + 3.428000000000e-10 -3.558916364396e-01 + 3.528000000000e-10 -3.643768878587e-01 + 3.628000000000e-10 -3.109660871267e-01 + 3.728000000000e-10 -1.806005122430e-01 + 3.828000000000e-10 -2.063463882859e-02 + 3.928000000000e-10 1.200417121301e-01 + 4.028000000000e-10 2.117115066678e-01 + 4.128000000000e-10 2.552245954862e-01 + 4.228000000000e-10 2.905358174314e-01 + 4.328000000000e-10 3.264964127076e-01 + 4.428000000000e-10 3.561164409890e-01 + 4.528000000000e-10 3.644937527082e-01 + 4.628000000000e-10 3.108863598347e-01 + 4.728000000000e-10 1.804066968471e-01 + 4.828000000000e-10 2.031749353463e-02 + 4.928000000000e-10 -1.203543467152e-01 + 5.028000000000e-10 -2.120338656010e-01 + 5.128000000000e-10 -2.554694201182e-01 + 5.228000000000e-10 -2.907816217466e-01 + 5.328000000000e-10 -3.266973931907e-01 + 5.428000000000e-10 -3.563354715244e-01 + 5.528000000000e-10 -3.646612654323e-01 + 5.628000000000e-10 -3.110514282819e-01 + 5.728000000000e-10 -1.805042989376e-01 + 5.828000000000e-10 -2.041198102925e-02 + 5.928000000000e-10 1.203139122453e-01 + 6.028000000000e-10 2.119789678115e-01 + 6.128000000000e-10 2.554499136191e-01 + 6.228000000000e-10 2.907352766216e-01 + 6.328000000000e-10 3.266827936599e-01 + 6.428000000000e-10 3.562972261563e-01 + 6.528000000000e-10 3.646559193667e-01 + 6.628000000000e-10 3.110272539685e-01 + 6.728000000000e-10 1.805126920434e-01 + 6.828000000000e-10 2.039901072518e-02 + 6.928000000000e-10 -1.202975671206e-01 + 7.028000000000e-10 -2.119881389434e-01 + 7.128000000000e-10 -2.554339974826e-01 + 7.228000000000e-10 -2.907449786827e-01 + 7.328000000000e-10 -3.266672756474e-01 + 7.428000000000e-10 -3.563063206496e-01 + 7.528000000000e-10 -3.646410588059e-01 + 7.628000000000e-10 -3.110359790738e-01 + 7.728000000000e-10 -1.804978632753e-01 + 7.828000000000e-10 -2.040852410596e-02 + 7.928000000000e-10 1.203110667878e-01 + 8.028000000000e-10 2.119781439274e-01 + 8.128000000000e-10 2.554465105638e-01 + 8.228000000000e-10 2.907345088651e-01 + 8.328000000000e-10 3.266793442083e-01 + 8.428000000000e-10 3.562962712815e-01 + 8.528000000000e-10 3.646525269207e-01 + 8.628000000000e-10 3.110264147595e-01 + 8.728000000000e-10 1.805087495738e-01 + 8.828000000000e-10 2.039807927138e-02 + 8.928000000000e-10 -1.203008828088e-01 + 9.028000000000e-10 -2.119885143169e-01 + 9.128000000000e-10 -2.554368509477e-01 + 9.228000000000e-10 -2.907446372900e-01 + 9.328000000000e-10 -3.266695427412e-01 + 9.428000000000e-10 -3.563059183968e-01 + 9.528000000000e-10 -3.646431522847e-01 + 9.628000000000e-10 -3.110356032735e-01 + 9.728000000000e-10 -1.804991631480e-01 + 9.828000000000e-10 -2.040735001275e-02 + 9.928000000000e-10 1.203099974113e-01 + 1.000000000000e-09 1.927324868168e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/conditions.yaml new file mode 100644 index 00000000..d825a315 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 16 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_16 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/CML_core_tb.sch new file mode 100644 index 00000000..64e75d03 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/CML_core_tb_17.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/CML_core_tb_17.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/CML_core_tb_17.data new file mode 100644 index 00000000..1e62d263 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/CML_core_tb_17.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.857852225245e-01 + 1.728000000000e-10 -1.572533595452e-01 + 1.828000000000e-10 2.540381659783e-03 + 1.928000000000e-10 1.434374080790e-01 + 2.028000000000e-10 2.351272809546e-01 + 2.128000000000e-10 2.797956268783e-01 + 2.228000000000e-10 3.144243918962e-01 + 2.328000000000e-10 3.493618787392e-01 + 2.428000000000e-10 3.773715695689e-01 + 2.528000000000e-10 3.831823569325e-01 + 2.628000000000e-10 3.264482498061e-01 + 2.728000000000e-10 1.910530045686e-01 + 2.828000000000e-10 2.436059711742e-02 + 2.928000000000e-10 -1.220220612332e-01 + 3.028000000000e-10 -2.180809390746e-01 + 3.128000000000e-10 -2.653775774444e-01 + 3.228000000000e-10 -3.017848824321e-01 + 3.328000000000e-10 -3.379021858146e-01 + 3.428000000000e-10 -3.673696540777e-01 + 3.528000000000e-10 -3.751149757425e-01 + 3.628000000000e-10 -3.209083740174e-01 + 3.728000000000e-10 -1.878979131572e-01 + 3.828000000000e-10 -2.307531260616e-02 + 3.928000000000e-10 1.222703025101e-01 + 4.028000000000e-10 2.179003509445e-01 + 4.128000000000e-10 2.652908784701e-01 + 4.228000000000e-10 3.017672646237e-01 + 4.328000000000e-10 3.378931599738e-01 + 4.428000000000e-10 3.672390198172e-01 + 4.528000000000e-10 3.748903812400e-01 + 4.628000000000e-10 3.205316331029e-01 + 4.728000000000e-10 1.874647700937e-01 + 4.828000000000e-10 2.258819957166e-02 + 4.928000000000e-10 -1.227112688171e-01 + 5.028000000000e-10 -2.183172764214e-01 + 5.128000000000e-10 -2.656203742551e-01 + 5.228000000000e-10 -3.020800906145e-01 + 5.328000000000e-10 -3.381553362553e-01 + 5.428000000000e-10 -3.675051891202e-01 + 5.528000000000e-10 -3.750972240389e-01 + 5.628000000000e-10 -3.207148935088e-01 + 5.728000000000e-10 -1.875700292984e-01 + 5.828000000000e-10 -2.267596999196e-02 + 5.928000000000e-10 1.226776663562e-01 + 6.028000000000e-10 2.182733434309e-01 + 6.128000000000e-10 2.656053081095e-01 + 6.228000000000e-10 3.020411985396e-01 + 6.328000000000e-10 3.381435634392e-01 + 6.428000000000e-10 3.674743818406e-01 + 6.528000000000e-10 3.750952532513e-01 + 6.628000000000e-10 3.206986438750e-01 + 6.728000000000e-10 1.875816736609e-01 + 6.828000000000e-10 2.266940437016e-02 + 6.928000000000e-10 -1.226596158426e-01 + 7.028000000000e-10 -2.182776851932e-01 + 7.128000000000e-10 -2.655888997029e-01 + 7.228000000000e-10 -3.020470638059e-01 + 7.328000000000e-10 -3.381282771084e-01 + 7.428000000000e-10 -3.674800981492e-01 + 7.528000000000e-10 -3.750811166601e-01 + 7.628000000000e-10 -3.207046174850e-01 + 7.728000000000e-10 -1.875682790354e-01 + 7.828000000000e-10 -2.267703281628e-02 + 7.928000000000e-10 1.226713327530e-01 + 8.028000000000e-10 2.182693863135e-01 + 8.128000000000e-10 2.655996099454e-01 + 8.228000000000e-10 3.020383466326e-01 + 8.328000000000e-10 3.381385294735e-01 + 8.428000000000e-10 3.674717742910e-01 + 8.528000000000e-10 3.750907045119e-01 + 8.628000000000e-10 3.206966644115e-01 + 8.728000000000e-10 1.875773616331e-01 + 8.828000000000e-10 2.266807684955e-02 + 8.928000000000e-10 -1.226628120211e-01 + 9.028000000000e-10 -2.182782381400e-01 + 9.128000000000e-10 -2.655915506047e-01 + 9.228000000000e-10 -3.020469590318e-01 + 9.328000000000e-10 -3.381303351991e-01 + 9.428000000000e-10 -3.674798958779e-01 + 9.528000000000e-10 -3.750829516380e-01 + 9.628000000000e-10 -3.207043265993e-01 + 9.728000000000e-10 -1.875693454762e-01 + 9.828000000000e-10 -2.267594148777e-02 + 9.928000000000e-10 1.226704651969e-01 + 1.000000000000e-09 1.977257563344e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/conditions.yaml new file mode 100644 index 00000000..3cb2e6fa --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 17 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_17 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/CML_core_tb.sch new file mode 100644 index 00000000..5197b24e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/CML_core_tb_18.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/CML_core_tb_18.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/CML_core_tb_18.data new file mode 100644 index 00000000..16422ca1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/CML_core_tb_18.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.213526702696e-01 + 1.728000000000e-10 -1.557909441213e-01 + 1.828000000000e-10 3.476956205809e-02 + 1.928000000000e-10 1.811250151598e-01 + 2.028000000000e-10 2.596166993269e-01 + 2.128000000000e-10 2.853727091731e-01 + 2.228000000000e-10 3.254453264627e-01 + 2.328000000000e-10 3.792799604087e-01 + 2.428000000000e-10 4.176388066249e-01 + 2.528000000000e-10 4.205544301124e-01 + 2.628000000000e-10 3.463528198985e-01 + 2.728000000000e-10 1.792096076204e-01 + 2.828000000000e-10 -1.442396833933e-02 + 2.928000000000e-10 -1.649237711275e-01 + 3.028000000000e-10 -2.471596975948e-01 + 3.128000000000e-10 -2.748735614517e-01 + 3.228000000000e-10 -3.160128767795e-01 + 3.328000000000e-10 -3.707930594343e-01 + 3.428000000000e-10 -4.104823651943e-01 + 3.528000000000e-10 -4.153692056047e-01 + 3.628000000000e-10 -3.427931169871e-01 + 3.728000000000e-10 -1.769552164151e-01 + 3.828000000000e-10 1.590673093360e-02 + 3.928000000000e-10 1.658834812043e-01 + 4.028000000000e-10 2.479775600913e-01 + 4.128000000000e-10 2.756409688001e-01 + 4.228000000000e-10 3.168596600790e-01 + 4.328000000000e-10 3.715133147191e-01 + 4.428000000000e-10 4.111218222953e-01 + 4.528000000000e-10 4.157229971644e-01 + 4.628000000000e-10 3.430019798682e-01 + 4.728000000000e-10 1.769456026445e-01 + 4.828000000000e-10 -1.592886494610e-02 + 4.928000000000e-10 -1.659782283296e-01 + 5.028000000000e-10 -2.479947853664e-01 + 5.128000000000e-10 -2.756931315881e-01 + 5.228000000000e-10 -3.168416717549e-01 + 5.328000000000e-10 -3.715547211919e-01 + 5.428000000000e-10 -4.111034138799e-01 + 5.528000000000e-10 -4.157691346087e-01 + 5.628000000000e-10 -3.429925568898e-01 + 5.728000000000e-10 -1.770024985869e-01 + 5.828000000000e-10 1.592938202906e-02 + 5.928000000000e-10 1.659292038608e-01 + 6.028000000000e-10 2.480043512000e-01 + 6.128000000000e-10 2.756533285421e-01 + 6.228000000000e-10 3.168576585763e-01 + 6.328000000000e-10 3.715156583068e-01 + 6.428000000000e-10 4.111207690964e-01 + 6.528000000000e-10 4.157343976531e-01 + 6.628000000000e-10 3.430135347581e-01 + 6.728000000000e-10 1.769734665185e-01 + 6.828000000000e-10 -1.590652763180e-02 + 6.928000000000e-10 -1.659537152419e-01 + 7.028000000000e-10 -2.479812550746e-01 + 7.128000000000e-10 -2.756768834918e-01 + 7.228000000000e-10 -3.168350969677e-01 + 7.328000000000e-10 -3.715419152243e-01 + 7.428000000000e-10 -4.110983779981e-01 + 7.528000000000e-10 -4.157587194411e-01 + 7.628000000000e-10 -3.429901444601e-01 + 7.728000000000e-10 -1.769973775521e-01 + 7.828000000000e-10 1.592723735432e-02 + 7.928000000000e-10 1.659318535084e-01 + 8.028000000000e-10 2.480017799848e-01 + 8.128000000000e-10 2.756559811492e-01 + 8.228000000000e-10 3.168566227283e-01 + 8.328000000000e-10 3.715195500188e-01 + 8.428000000000e-10 4.111190536097e-01 + 8.528000000000e-10 4.157370668569e-01 + 8.628000000000e-10 3.430103710665e-01 + 8.728000000000e-10 1.769771675859e-01 + 8.828000000000e-10 -1.590770493918e-02 + 8.928000000000e-10 -1.659501582149e-01 + 9.028000000000e-10 -2.479827571068e-01 + 9.128000000000e-10 -2.756738772283e-01 + 9.228000000000e-10 -3.168377001445e-01 + 9.328000000000e-10 -3.715391180409e-01 + 9.428000000000e-10 -4.111007797151e-01 + 9.528000000000e-10 -4.157556639381e-01 + 9.628000000000e-10 -3.429919881202e-01 + 9.728000000000e-10 -1.769955652012e-01 + 9.828000000000e-10 1.592430721908e-02 + 9.928000000000e-10 1.659331850974e-01 + 1.000000000000e-09 2.332140069758e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/conditions.yaml new file mode 100644 index 00000000..91af7080 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 18 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_18 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/CML_core_tb.sch new file mode 100644 index 00000000..a671bfb7 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/CML_core_tb_19.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/CML_core_tb_19.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/CML_core_tb_19.data new file mode 100644 index 00000000..6e384890 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/CML_core_tb_19.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.162777317791e-01 + 1.728000000000e-10 -1.528661974147e-01 + 1.828000000000e-10 3.474832458294e-02 + 1.928000000000e-10 1.787124308466e-01 + 2.028000000000e-10 2.559986610902e-01 + 2.128000000000e-10 2.810767408313e-01 + 2.228000000000e-10 3.219404824571e-01 + 2.328000000000e-10 3.760375868322e-01 + 2.428000000000e-10 4.141294975409e-01 + 2.528000000000e-10 4.175370858756e-01 + 2.628000000000e-10 3.443891646085e-01 + 2.728000000000e-10 1.786024667409e-01 + 2.828000000000e-10 -1.272368439666e-02 + 2.928000000000e-10 -1.612661145276e-01 + 3.028000000000e-10 -2.425558656005e-01 + 3.128000000000e-10 -2.696709375544e-01 + 3.228000000000e-10 -3.115976016931e-01 + 3.328000000000e-10 -3.666762080522e-01 + 3.428000000000e-10 -4.062269757432e-01 + 3.528000000000e-10 -4.117682170104e-01 + 3.628000000000e-10 -3.403932990270e-01 + 3.728000000000e-10 -1.760595961534e-01 + 3.828000000000e-10 1.438676142530e-02 + 3.928000000000e-10 1.623380571180e-01 + 4.028000000000e-10 2.434588647096e-01 + 4.128000000000e-10 2.705169080514e-01 + 4.228000000000e-10 3.125303134845e-01 + 4.328000000000e-10 3.674735521527e-01 + 4.428000000000e-10 4.069324770669e-01 + 4.528000000000e-10 4.121668816011e-01 + 4.628000000000e-10 3.406314536055e-01 + 4.728000000000e-10 1.760592839129e-01 + 4.828000000000e-10 -1.440702618479e-02 + 4.928000000000e-10 -1.624387020945e-01 + 5.028000000000e-10 -2.434775787799e-01 + 5.128000000000e-10 -2.705727170369e-01 + 5.228000000000e-10 -3.125119373252e-01 + 5.328000000000e-10 -3.675184828947e-01 + 5.428000000000e-10 -4.069140356329e-01 + 5.528000000000e-10 -4.122173977207e-01 + 5.628000000000e-10 -3.406230488723e-01 + 5.728000000000e-10 -1.761225643375e-01 + 5.828000000000e-10 1.440482600394e-02 + 5.928000000000e-10 1.623840500109e-01 + 6.028000000000e-10 2.434858819416e-01 + 6.128000000000e-10 2.705285901327e-01 + 6.228000000000e-10 3.125279242462e-01 + 6.328000000000e-10 3.674758375852e-01 + 6.428000000000e-10 4.069313048189e-01 + 6.528000000000e-10 4.121794941223e-01 + 6.628000000000e-10 3.406442721772e-01 + 6.728000000000e-10 1.760913923029e-01 + 6.828000000000e-10 -1.438048626859e-02 + 6.928000000000e-10 -1.624102913298e-01 + 7.028000000000e-10 -2.434611919520e-01 + 7.128000000000e-10 -2.705537859875e-01 + 7.228000000000e-10 -3.125040211699e-01 + 7.328000000000e-10 -3.675038904367e-01 + 7.428000000000e-10 -4.069074652851e-01 + 7.528000000000e-10 -4.122054838885e-01 + 7.628000000000e-10 -3.406192567768e-01 + 7.728000000000e-10 -1.761170868219e-01 + 7.828000000000e-10 1.440247036537e-02 + 7.928000000000e-10 1.623867436405e-01 + 8.028000000000e-10 2.434830143217e-01 + 8.128000000000e-10 2.705312548291e-01 + 8.228000000000e-10 3.125271394700e-01 + 8.328000000000e-10 3.674800931307e-01 + 8.428000000000e-10 4.069295144266e-01 + 8.528000000000e-10 4.121823557439e-01 + 8.628000000000e-10 3.406407407456e-01 + 8.728000000000e-10 1.760956573916e-01 + 8.828000000000e-10 -1.438135361500e-02 + 8.928000000000e-10 -1.624062315135e-01 + 9.028000000000e-10 -2.434625084707e-01 + 9.128000000000e-10 -2.705503455528e-01 + 9.228000000000e-10 -3.125068466958e-01 + 9.328000000000e-10 -3.675009271833e-01 + 9.428000000000e-10 -4.069098943042e-01 + 9.528000000000e-10 -4.122022218921e-01 + 9.628000000000e-10 -3.406210058100e-01 + 9.728000000000e-10 -1.761154015725e-01 + 9.828000000000e-10 1.439913133121e-02 + 9.928000000000e-10 1.623879640093e-01 + 1.000000000000e-09 2.290402036537e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/conditions.yaml new file mode 100644 index 00000000..21cf7323 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 19 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_19 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/CML_core_tb.sch new file mode 100644 index 00000000..e0f62cb2 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/CML_core_tb_20.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/CML_core_tb_20.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/CML_core_tb_20.data new file mode 100644 index 00000000..3dfcf241 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/CML_core_tb_20.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.365386572536e-01 + 1.728000000000e-10 -1.657072094068e-01 + 1.828000000000e-10 3.099865584261e-02 + 1.928000000000e-10 1.820426436768e-01 + 2.028000000000e-10 2.627018214462e-01 + 2.128000000000e-10 2.893736945719e-01 + 2.228000000000e-10 3.287984169352e-01 + 2.328000000000e-10 3.833334317825e-01 + 2.428000000000e-10 4.238785365972e-01 + 2.528000000000e-10 4.280322768716e-01 + 2.628000000000e-10 3.532409470363e-01 + 2.728000000000e-10 1.834641899168e-01 + 2.828000000000e-10 -1.474496205711e-02 + 2.928000000000e-10 -1.691349612478e-01 + 3.028000000000e-10 -2.530204867896e-01 + 3.128000000000e-10 -2.814070764654e-01 + 3.228000000000e-10 -3.218416847899e-01 + 3.328000000000e-10 -3.771799136100e-01 + 3.428000000000e-10 -4.187055626636e-01 + 3.528000000000e-10 -4.243036771430e-01 + 3.628000000000e-10 -3.506062035467e-01 + 3.728000000000e-10 -1.816763297909e-01 + 3.828000000000e-10 1.601938741723e-02 + 3.928000000000e-10 1.700087907901e-01 + 4.028000000000e-10 2.537596951165e-01 + 4.128000000000e-10 2.820887501770e-01 + 4.228000000000e-10 3.225625541805e-01 + 4.328000000000e-10 3.777928583784e-01 + 4.428000000000e-10 4.192485534625e-01 + 4.528000000000e-10 4.246080285894e-01 + 4.628000000000e-10 3.507916132015e-01 + 4.728000000000e-10 1.816929452641e-01 + 4.828000000000e-10 -1.601075067965e-02 + 4.928000000000e-10 -1.700562644838e-01 + 5.028000000000e-10 -2.537513990380e-01 + 5.128000000000e-10 -2.821086741965e-01 + 5.228000000000e-10 -3.225309737549e-01 + 5.328000000000e-10 -3.778081660132e-01 + 5.428000000000e-10 -4.192196231589e-01 + 5.528000000000e-10 -4.246325132019e-01 + 5.628000000000e-10 -3.507765562578e-01 + 5.728000000000e-10 -1.817315603141e-01 + 5.828000000000e-10 1.601468821266e-02 + 5.928000000000e-10 1.700220210141e-01 + 6.028000000000e-10 2.537612841477e-01 + 6.128000000000e-10 2.820810469197e-01 + 6.228000000000e-10 3.225454957468e-01 + 6.328000000000e-10 3.777800822765e-01 + 6.428000000000e-10 4.192350742948e-01 + 6.528000000000e-10 4.246071005326e-01 + 6.628000000000e-10 3.507940665347e-01 + 6.728000000000e-10 1.817094337521e-01 + 6.828000000000e-10 -1.599736953115e-02 + 6.928000000000e-10 -1.700405869499e-01 + 7.028000000000e-10 -2.537437685408e-01 + 7.128000000000e-10 -2.820988428465e-01 + 7.228000000000e-10 -3.225283133162e-01 + 7.328000000000e-10 -3.778004844844e-01 + 7.428000000000e-10 -4.192180216890e-01 + 7.528000000000e-10 -4.246257635725e-01 + 7.628000000000e-10 -3.507760422929e-01 + 7.728000000000e-10 -1.817278922025e-01 + 7.828000000000e-10 1.601285231965e-02 + 7.928000000000e-10 1.700238629540e-01 + 8.028000000000e-10 2.537592487741e-01 + 8.128000000000e-10 2.820829438407e-01 + 8.228000000000e-10 3.225445511573e-01 + 8.328000000000e-10 3.777829985044e-01 + 8.428000000000e-10 4.192337708379e-01 + 8.528000000000e-10 4.246090234999e-01 + 8.628000000000e-10 3.507916632731e-01 + 8.728000000000e-10 1.817122417436e-01 + 8.828000000000e-10 -1.599824136343e-02 + 8.928000000000e-10 -1.700377849177e-01 + 9.028000000000e-10 -2.537449127629e-01 + 9.128000000000e-10 -2.820965585668e-01 + 9.228000000000e-10 -3.225302446360e-01 + 9.328000000000e-10 -3.777982010874e-01 + 9.428000000000e-10 -4.192199753705e-01 + 9.528000000000e-10 -4.246232587341e-01 + 9.628000000000e-10 -3.507775800865e-01 + 9.728000000000e-10 -1.817263367247e-01 + 9.828000000000e-10 1.601066647660e-02 + 9.928000000000e-10 1.700248857455e-01 + 1.000000000000e-09 2.385375784000e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/conditions.yaml new file mode 100644 index 00000000..33a0c986 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 20 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_20 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/CML_core_tb.sch new file mode 100644 index 00000000..b1c82055 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/CML_core_tb_21.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/CML_core_tb_21.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/CML_core_tb_21.data new file mode 100644 index 00000000..86f9b023 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/CML_core_tb_21.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.747912795524e-01 + 1.728000000000e-10 -1.327955908449e-01 + 1.828000000000e-10 3.931332790349e-02 + 1.928000000000e-10 1.782957289495e-01 + 2.028000000000e-10 2.573194188668e-01 + 2.128000000000e-10 2.870254911902e-01 + 2.228000000000e-10 3.228650321442e-01 + 2.328000000000e-10 3.690575149088e-01 + 2.428000000000e-10 4.023791308175e-01 + 2.528000000000e-10 4.034409994944e-01 + 2.628000000000e-10 3.332295993533e-01 + 2.728000000000e-10 1.767123870243e-01 + 2.828000000000e-10 -7.574880255958e-03 + 2.928000000000e-10 -1.550892096227e-01 + 3.028000000000e-10 -2.394679486139e-01 + 3.128000000000e-10 -2.715465054757e-01 + 3.228000000000e-10 -3.085580168164e-01 + 3.328000000000e-10 -3.560821219044e-01 + 3.428000000000e-10 -3.914831036325e-01 + 3.528000000000e-10 -3.956717314322e-01 + 3.628000000000e-10 -3.285929470428e-01 + 3.728000000000e-10 -1.747908753666e-01 + 3.828000000000e-10 7.882784627431e-03 + 3.928000000000e-10 1.545893087045e-01 + 4.028000000000e-10 2.389887597051e-01 + 4.128000000000e-10 2.712307710628e-01 + 4.228000000000e-10 3.085047043395e-01 + 4.328000000000e-10 3.559448484744e-01 + 4.428000000000e-10 3.913507819782e-01 + 4.528000000000e-10 3.953547803018e-01 + 4.628000000000e-10 3.282585464854e-01 + 4.728000000000e-10 1.743078825018e-01 + 4.828000000000e-10 -8.291328068348e-03 + 4.928000000000e-10 -1.550293895867e-01 + 5.028000000000e-10 -2.392804293874e-01 + 5.128000000000e-10 -2.715405217782e-01 + 5.228000000000e-10 -3.087067361985e-01 + 5.328000000000e-10 -3.562070457914e-01 + 5.428000000000e-10 -3.915132320474e-01 + 5.528000000000e-10 -3.955548280332e-01 + 5.628000000000e-10 -3.283427048941e-01 + 5.728000000000e-10 -1.744282326244e-01 + 5.828000000000e-10 8.270645751064e-03 + 5.928000000000e-10 1.549582711486e-01 + 6.028000000000e-10 2.392860039329e-01 + 6.128000000000e-10 2.714820836214e-01 + 6.228000000000e-10 3.087161022039e-01 + 6.328000000000e-10 3.561494137047e-01 + 6.428000000000e-10 3.915273490759e-01 + 6.528000000000e-10 3.955079501007e-01 + 6.628000000000e-10 3.283677191723e-01 + 6.728000000000e-10 1.743944727908e-01 + 6.828000000000e-10 -8.238033211244e-03 + 6.928000000000e-10 -1.549849820320e-01 + 7.028000000000e-10 -2.392533741503e-01 + 7.128000000000e-10 -2.715088112944e-01 + 7.228000000000e-10 -3.086845279612e-01 + 7.328000000000e-10 -3.561786907982e-01 + 7.428000000000e-10 -3.914967682891e-01 + 7.528000000000e-10 -3.955360247734e-01 + 7.628000000000e-10 -3.283379458960e-01 + 7.728000000000e-10 -1.744219452106e-01 + 7.828000000000e-10 8.266285029230e-03 + 7.928000000000e-10 1.549592969714e-01 + 8.028000000000e-10 2.392805186707e-01 + 8.128000000000e-10 2.714837558368e-01 + 8.228000000000e-10 3.087120651005e-01 + 8.328000000000e-10 3.561520690508e-01 + 8.428000000000e-10 3.915233230940e-01 + 8.528000000000e-10 3.955100606400e-01 + 8.628000000000e-10 3.283632493206e-01 + 8.728000000000e-10 1.743968536756e-01 + 8.828000000000e-10 -8.241845610385e-03 + 8.928000000000e-10 -1.549825747228e-01 + 9.028000000000e-10 -2.392568734068e-01 + 9.128000000000e-10 -2.715063119250e-01 + 9.228000000000e-10 -3.086881712182e-01 + 9.328000000000e-10 -3.561760305782e-01 + 9.428000000000e-10 -3.915002731039e-01 + 9.528000000000e-10 -3.955331724158e-01 + 9.628000000000e-10 -3.283409163093e-01 + 9.728000000000e-10 -1.744193777973e-01 + 9.828000000000e-10 8.263272108901e-03 + 9.928000000000e-10 1.549616575981e-01 + 1.000000000000e-09 2.229820050464e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/conditions.yaml new file mode 100644 index 00000000..10533a26 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 21 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_21 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/CML_core_tb.sch new file mode 100644 index 00000000..247c0b46 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/CML_core_tb_22.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/CML_core_tb_22.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/CML_core_tb_22.data new file mode 100644 index 00000000..ef0e6c8e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/CML_core_tb_22.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.701426652476e-01 + 1.728000000000e-10 -1.295079168872e-01 + 1.828000000000e-10 4.028305902420e-02 + 1.928000000000e-10 1.769160181627e-01 + 2.028000000000e-10 2.543038782058e-01 + 2.128000000000e-10 2.828787064062e-01 + 2.228000000000e-10 3.193333275112e-01 + 2.328000000000e-10 3.660596632426e-01 + 2.428000000000e-10 3.993599084345e-01 + 2.528000000000e-10 4.007883413226e-01 + 2.628000000000e-10 3.312419521143e-01 + 2.728000000000e-10 1.754810620333e-01 + 2.828000000000e-10 -7.142746942805e-03 + 2.928000000000e-10 -1.527779354444e-01 + 3.028000000000e-10 -2.358001938178e-01 + 3.128000000000e-10 -2.668485168237e-01 + 3.228000000000e-10 -3.044746718514e-01 + 3.328000000000e-10 -3.525545062341e-01 + 3.428000000000e-10 -3.880254364838e-01 + 3.528000000000e-10 -3.926522183008e-01 + 3.628000000000e-10 -3.262954780243e-01 + 3.728000000000e-10 -1.733443838482e-01 + 3.828000000000e-10 7.573790689709e-03 + 3.928000000000e-10 1.523487073311e-01 + 4.028000000000e-10 2.353677758316e-01 + 4.128000000000e-10 2.665695097895e-01 + 4.228000000000e-10 3.044490522149e-01 + 4.328000000000e-10 3.524353166192e-01 + 4.428000000000e-10 3.879041587545e-01 + 4.528000000000e-10 3.923389296672e-01 + 4.628000000000e-10 3.259554596391e-01 + 4.728000000000e-10 1.728458619818e-01 + 4.828000000000e-10 -8.002573892585e-03 + 4.928000000000e-10 -1.528088090159e-01 + 5.028000000000e-10 -2.356747724378e-01 + 5.128000000000e-10 -2.668925685814e-01 + 5.228000000000e-10 -3.046638401901e-01 + 5.328000000000e-10 -3.527112223433e-01 + 5.428000000000e-10 -3.880786380631e-01 + 5.528000000000e-10 -3.925506229445e-01 + 5.628000000000e-10 -3.260495799326e-01 + 5.728000000000e-10 -1.729761662154e-01 + 5.828000000000e-10 7.974498187451e-03 + 5.928000000000e-10 1.527311696558e-01 + 6.028000000000e-10 2.356760074325e-01 + 6.128000000000e-10 2.668297167568e-01 + 6.228000000000e-10 3.046702367069e-01 + 6.328000000000e-10 3.526500635637e-01 + 6.428000000000e-10 3.880902250634e-01 + 6.528000000000e-10 3.925010528185e-01 + 6.628000000000e-10 3.260730653917e-01 + 6.728000000000e-10 1.729410953112e-01 + 6.828000000000e-10 -7.941970684065e-03 + 6.928000000000e-10 -1.527585341072e-01 + 7.028000000000e-10 -2.356430884825e-01 + 7.128000000000e-10 -2.668569558480e-01 + 7.228000000000e-10 -3.046384985761e-01 + 7.328000000000e-10 -3.526798341051e-01 + 7.428000000000e-10 -3.880593641809e-01 + 7.528000000000e-10 -3.925295324367e-01 + 7.628000000000e-10 -3.260427874257e-01 + 7.728000000000e-10 -1.729689796013e-01 + 7.828000000000e-10 7.970639231343e-03 + 7.928000000000e-10 1.527324506408e-01 + 8.028000000000e-10 2.356706370408e-01 + 8.128000000000e-10 2.668314718812e-01 + 8.228000000000e-10 3.046665550415e-01 + 8.328000000000e-10 3.526529348742e-01 + 8.428000000000e-10 3.880863283995e-01 + 8.528000000000e-10 3.925032166540e-01 + 8.628000000000e-10 3.260684590033e-01 + 8.728000000000e-10 1.729436324779e-01 + 8.828000000000e-10 -7.945691115533e-03 + 8.928000000000e-10 -1.527560420249e-01 + 9.028000000000e-10 -2.356465048672e-01 + 9.128000000000e-10 -2.668543449819e-01 + 9.228000000000e-10 -3.046422495200e-01 + 9.328000000000e-10 -3.526772110923e-01 + 9.428000000000e-10 -3.880628732866e-01 + 9.528000000000e-10 -3.925266759429e-01 + 9.628000000000e-10 -3.260456785141e-01 + 9.728000000000e-10 -1.729665660062e-01 + 9.828000000000e-10 7.967487161613e-03 + 9.928000000000e-10 1.527347010769e-01 + 1.000000000000e-09 2.198236907112e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/conditions.yaml new file mode 100644 index 00000000..056e114c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 22 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_22 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/CML_core_tb.sch new file mode 100644 index 00000000..aacf6b64 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/CML_core_tb_23.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/CML_core_tb_23.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/CML_core_tb_23.data new file mode 100644 index 00000000..7b2e7ab2 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/CML_core_tb_23.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.957054612407e-01 + 1.728000000000e-10 -1.475216919691e-01 + 1.828000000000e-10 3.196996632833e-02 + 1.928000000000e-10 1.773696584526e-01 + 2.028000000000e-10 2.602670445343e-01 + 2.128000000000e-10 2.919684489720e-01 + 2.228000000000e-10 3.273690981683e-01 + 2.328000000000e-10 3.736661732429e-01 + 2.428000000000e-10 4.086769482098e-01 + 2.528000000000e-10 4.113258498473e-01 + 2.628000000000e-10 3.414272197123e-01 + 2.728000000000e-10 1.833836328070e-01 + 2.828000000000e-10 -4.501363849837e-03 + 2.928000000000e-10 -1.562318489881e-01 + 3.028000000000e-10 -2.435570784568e-01 + 3.128000000000e-10 -2.775386220390e-01 + 3.228000000000e-10 -3.142878056355e-01 + 3.328000000000e-10 -3.618442790176e-01 + 3.428000000000e-10 -3.986028140213e-01 + 3.528000000000e-10 -4.040381865127e-01 + 3.628000000000e-10 -3.369104214062e-01 + 3.728000000000e-10 -1.811830752063e-01 + 3.828000000000e-10 5.355128083595e-03 + 3.928000000000e-10 1.563630270676e-01 + 4.028000000000e-10 2.436522664355e-01 + 4.128000000000e-10 2.777202130414e-01 + 4.228000000000e-10 3.146716935396e-01 + 4.328000000000e-10 3.621309165835e-01 + 4.428000000000e-10 3.988648293319e-01 + 4.528000000000e-10 4.040567761896e-01 + 4.628000000000e-10 3.368362274946e-01 + 4.728000000000e-10 1.809052635954e-01 + 4.828000000000e-10 -5.606347307292e-03 + 4.928000000000e-10 -1.566747533637e-01 + 5.028000000000e-10 -2.438438929936e-01 + 5.128000000000e-10 -2.779365198916e-01 + 5.228000000000e-10 -3.147868656031e-01 + 5.328000000000e-10 -3.623069078218e-01 + 5.428000000000e-10 -3.989546307961e-01 + 5.528000000000e-10 -4.041975741324e-01 + 5.628000000000e-10 -3.368831845243e-01 + 5.728000000000e-10 -1.810020824460e-01 + 5.828000000000e-10 5.593858826262e-03 + 5.928000000000e-10 1.566090374935e-01 + 6.028000000000e-10 2.438493522755e-01 + 6.128000000000e-10 2.778818285943e-01 + 6.228000000000e-10 3.147972496077e-01 + 6.328000000000e-10 3.622530927659e-01 + 6.428000000000e-10 3.989689895438e-01 + 6.528000000000e-10 4.041528360847e-01 + 6.628000000000e-10 3.369065350765e-01 + 6.728000000000e-10 1.809679655825e-01 + 6.828000000000e-10 -5.565139497590e-03 + 6.928000000000e-10 -1.566366178225e-01 + 7.028000000000e-10 -2.438204188033e-01 + 7.128000000000e-10 -2.779089356335e-01 + 7.228000000000e-10 -3.147686522157e-01 + 7.328000000000e-10 -3.622826637804e-01 + 7.428000000000e-10 -3.989411843085e-01 + 7.528000000000e-10 -4.041807678845e-01 + 7.628000000000e-10 -3.368790616195e-01 + 7.728000000000e-10 -1.809947630224e-01 + 7.828000000000e-10 5.591512634984e-03 + 7.928000000000e-10 1.566120178189e-01 + 8.028000000000e-10 2.438458933358e-01 + 8.128000000000e-10 2.778849719194e-01 + 8.228000000000e-10 3.147945034671e-01 + 8.328000000000e-10 3.622568751046e-01 + 8.428000000000e-10 3.989662140554e-01 + 8.528000000000e-10 4.041558823701e-01 + 8.628000000000e-10 3.369030769235e-01 + 8.728000000000e-10 1.809706945647e-01 + 8.828000000000e-10 -5.568483515763e-03 + 8.928000000000e-10 -1.566340912711e-01 + 9.028000000000e-10 -2.438236181184e-01 + 9.128000000000e-10 -2.779064153414e-01 + 9.228000000000e-10 -3.147718720666e-01 + 9.328000000000e-10 -3.622798572716e-01 + 9.428000000000e-10 -3.989444036153e-01 + 9.528000000000e-10 -4.041778978449e-01 + 9.628000000000e-10 -3.368819513246e-01 + 9.728000000000e-10 -1.809921012276e-01 + 9.828000000000e-10 5.588724287086e-03 + 9.928000000000e-10 1.566143682128e-01 + 1.000000000000e-09 2.267750497136e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/conditions.yaml new file mode 100644 index 00000000..64e9af11 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 23 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_23 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/CML_core_tb.sch new file mode 100644 index 00000000..f736930d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/CML_core_tb_24.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/CML_core_tb_24.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/CML_core_tb_24.data new file mode 100644 index 00000000..a01deb89 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/CML_core_tb_24.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -1.908985659112e-01 + 1.728000000000e-10 -9.049079150817e-02 + 1.828000000000e-10 3.945873683219e-02 + 1.928000000000e-10 1.521437177417e-01 + 2.028000000000e-10 2.220068772324e-01 + 2.128000000000e-10 2.535092334052e-01 + 2.228000000000e-10 2.861973397174e-01 + 2.328000000000e-10 3.239843013312e-01 + 2.428000000000e-10 3.520113017607e-01 + 2.528000000000e-10 3.540468115658e-01 + 2.628000000000e-10 2.949447709683e-01 + 2.728000000000e-10 1.587983397866e-01 + 2.828000000000e-10 -6.865354773069e-03 + 2.928000000000e-10 -1.448078480843e-01 + 3.028000000000e-10 -2.275605338030e-01 + 3.128000000000e-10 -2.625604064747e-01 + 3.228000000000e-10 -2.958552078644e-01 + 3.328000000000e-10 -3.351711406638e-01 + 3.428000000000e-10 -3.644984224381e-01 + 3.528000000000e-10 -3.669950471097e-01 + 3.628000000000e-10 -3.072796408874e-01 + 3.728000000000e-10 -1.699866077827e-01 + 3.828000000000e-10 -2.842045316933e-03 + 3.928000000000e-10 1.365086891956e-01 + 4.028000000000e-10 2.207869920157e-01 + 4.128000000000e-10 2.567713461579e-01 + 4.228000000000e-10 2.907030026757e-01 + 4.328000000000e-10 3.302687598301e-01 + 4.428000000000e-10 3.600803190405e-01 + 4.528000000000e-10 3.632331450943e-01 + 4.628000000000e-10 3.045482678871e-01 + 4.728000000000e-10 1.682698274629e-01 + 4.828000000000e-10 2.058504292284e-03 + 4.928000000000e-10 -1.367871396964e-01 + 5.028000000000e-10 -2.207717990252e-01 + 5.128000000000e-10 -2.567684885934e-01 + 5.228000000000e-10 -2.906651825463e-01 + 5.328000000000e-10 -3.302494358660e-01 + 5.428000000000e-10 -3.599712284157e-01 + 5.528000000000e-10 -3.631239508150e-01 + 5.628000000000e-10 -3.043584109358e-01 + 5.728000000000e-10 -1.680958385636e-01 + 5.828000000000e-10 -1.834034512727e-03 + 5.928000000000e-10 1.369613450439e-01 + 6.028000000000e-10 2.209618957221e-01 + 6.128000000000e-10 2.568952536478e-01 + 6.228000000000e-10 2.908171185353e-01 + 6.328000000000e-10 3.303549214919e-01 + 6.428000000000e-10 3.601082390759e-01 + 6.528000000000e-10 3.632059905221e-01 + 6.628000000000e-10 3.044557238628e-01 + 6.728000000000e-10 1.681292777859e-01 + 6.828000000000e-10 1.882442241730e-03 + 6.928000000000e-10 -1.369637862409e-01 + 7.028000000000e-10 -2.209363992802e-01 + 7.128000000000e-10 -2.569065829626e-01 + 7.228000000000e-10 -2.907936706940e-01 + 7.328000000000e-10 -3.303682701482e-01 + 7.428000000000e-10 -3.600879594395e-01 + 7.528000000000e-10 -3.632220959958e-01 + 7.628000000000e-10 -3.044401007882e-01 + 7.728000000000e-10 -1.681486407544e-01 + 7.828000000000e-10 -1.870004957548e-03 + 7.928000000000e-10 1.369437070838e-01 + 8.028000000000e-10 2.209481957039e-01 + 8.128000000000e-10 2.568879030180e-01 + 8.228000000000e-10 2.908064848389e-01 + 8.328000000000e-10 3.303493303219e-01 + 8.428000000000e-10 3.601006147126e-01 + 8.528000000000e-10 3.632041339109e-01 + 8.628000000000e-10 3.044528281549e-01 + 8.728000000000e-10 1.681322760827e-01 + 8.828000000000e-10 1.883536763259e-03 + 8.928000000000e-10 -1.369582535540e-01 + 9.028000000000e-10 -2.209346296842e-01 + 9.128000000000e-10 -2.569016830366e-01 + 9.228000000000e-10 -2.907925936742e-01 + 9.328000000000e-10 -3.303636164667e-01 + 9.428000000000e-10 -3.600871302257e-01 + 9.528000000000e-10 -3.632178492939e-01 + 9.628000000000e-10 -3.044398392752e-01 + 9.728000000000e-10 -1.681454261603e-01 + 9.828000000000e-10 -1.870628705438e-03 + 9.928000000000e-10 1.369459433541e-01 + 1.000000000000e-09 2.037746084522e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/conditions.yaml new file mode 100644 index 00000000..9a8754c0 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 24 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_24 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/CML_core_tb.sch new file mode 100644 index 00000000..1118b097 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/CML_core_tb_25.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/CML_core_tb_25.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/CML_core_tb_25.data new file mode 100644 index 00000000..182746dc --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/CML_core_tb_25.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -1.878715792581e-01 + 1.728000000000e-10 -8.812036120597e-02 + 1.828000000000e-10 4.046526586524e-02 + 1.928000000000e-10 1.515705626527e-01 + 2.028000000000e-10 2.200566198342e-01 + 2.128000000000e-10 2.503583455541e-01 + 2.228000000000e-10 2.832914205797e-01 + 2.328000000000e-10 3.216696186231e-01 + 2.428000000000e-10 3.500303926946e-01 + 2.528000000000e-10 3.524815741411e-01 + 2.628000000000e-10 2.936462106779e-01 + 2.728000000000e-10 1.576219496242e-01 + 2.828000000000e-10 -7.121462127754e-03 + 2.928000000000e-10 -1.436071598858e-01 + 3.028000000000e-10 -2.249496922999e-01 + 3.128000000000e-10 -2.586592240194e-01 + 3.228000000000e-10 -2.922419569702e-01 + 3.328000000000e-10 -3.321983211521e-01 + 3.428000000000e-10 -3.618684381611e-01 + 3.528000000000e-10 -3.648249016007e-01 + 3.628000000000e-10 -3.055379959953e-01 + 3.728000000000e-10 -1.686105488568e-01 + 3.828000000000e-10 -2.582643774162e-03 + 3.928000000000e-10 1.352182085241e-01 + 4.028000000000e-10 2.180702244722e-01 + 4.128000000000e-10 2.527783389641e-01 + 4.228000000000e-10 2.869845016096e-01 + 4.328000000000e-10 3.271697550530e-01 + 4.428000000000e-10 3.573213651505e-01 + 4.528000000000e-10 3.609341509143e-01 + 4.628000000000e-10 3.026708512688e-01 + 4.728000000000e-10 1.667591862946e-01 + 4.828000000000e-10 1.676053368052e-03 + 4.928000000000e-10 -1.356064331336e-01 + 5.028000000000e-10 -2.181494577446e-01 + 5.128000000000e-10 -2.528581012316e-01 + 5.228000000000e-10 -2.870203472690e-01 + 5.328000000000e-10 -3.272198972187e-01 + 5.428000000000e-10 -3.572767955086e-01 + 5.528000000000e-10 -3.608816832152e-01 + 5.628000000000e-10 -3.025243774497e-01 + 5.728000000000e-10 -1.666129730216e-01 + 5.828000000000e-10 -1.465204057357e-03 + 5.928000000000e-10 1.357749931272e-01 + 6.028000000000e-10 2.183376260095e-01 + 6.128000000000e-10 2.529831758691e-01 + 6.228000000000e-10 2.871716452249e-01 + 6.328000000000e-10 3.273254918206e-01 + 6.428000000000e-10 3.574148326524e-01 + 6.528000000000e-10 3.609652866209e-01 + 6.628000000000e-10 3.026246199120e-01 + 6.728000000000e-10 1.666502220733e-01 + 6.828000000000e-10 1.518129196282e-03 + 6.928000000000e-10 -1.357732099566e-01 + 7.028000000000e-10 -2.183080403425e-01 + 7.128000000000e-10 -2.529912058397e-01 + 7.228000000000e-10 -2.871450109118e-01 + 7.328000000000e-10 -3.273360198503e-01 + 7.428000000000e-10 -3.573916245859e-01 + 7.528000000000e-10 -3.609790664977e-01 + 7.628000000000e-10 -3.026068066478e-01 + 7.728000000000e-10 -1.666683959674e-01 + 7.828000000000e-10 -1.504711775466e-03 + 7.928000000000e-10 1.357534602326e-01 + 8.028000000000e-10 2.183202914392e-01 + 8.128000000000e-10 2.529726082081e-01 + 8.228000000000e-10 2.871582302084e-01 + 8.328000000000e-10 3.273171284192e-01 + 8.428000000000e-10 3.574045685766e-01 + 8.528000000000e-10 3.609610284998e-01 + 8.628000000000e-10 3.026196909841e-01 + 8.728000000000e-10 1.666518528053e-01 + 8.828000000000e-10 1.518315117290e-03 + 8.928000000000e-10 -1.357682747942e-01 + 9.028000000000e-10 -2.183066580359e-01 + 9.128000000000e-10 -2.529866332266e-01 + 9.228000000000e-10 -2.871442829871e-01 + 9.328000000000e-10 -3.273316607928e-01 + 9.428000000000e-10 -3.573910212469e-01 + 9.528000000000e-10 -3.609749965926e-01 + 9.628000000000e-10 -3.026065830591e-01 + 9.728000000000e-10 -1.666652414066e-01 + 9.828000000000e-10 -1.505286118034e-03 + 9.928000000000e-10 1.357557668798e-01 + 1.000000000000e-09 2.016242513907e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/conditions.yaml new file mode 100644 index 00000000..5d3e544c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 25 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_25 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/CML_core_tb.sch new file mode 100644 index 00000000..28e06605 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/CML_core_tb_26.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/CML_core_tb_26.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/CML_core_tb_26.data new file mode 100644 index 00000000..c21b093d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/CML_core_tb_26.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.135873679018e-01 + 1.728000000000e-10 -1.054229355639e-01 + 1.828000000000e-10 3.485798650969e-02 + 1.928000000000e-10 1.569675139767e-01 + 2.028000000000e-10 2.330635404696e-01 + 2.128000000000e-10 2.680443549179e-01 + 2.228000000000e-10 3.014044829899e-01 + 2.328000000000e-10 3.394080314353e-01 + 2.428000000000e-10 3.679529618424e-01 + 2.528000000000e-10 3.700593040123e-01 + 2.628000000000e-10 3.097824620429e-01 + 2.728000000000e-10 1.706514675999e-01 + 2.828000000000e-10 3.558070014658e-04 + 2.928000000000e-10 -1.428409974599e-01 + 3.028000000000e-10 -2.298289579719e-01 + 3.128000000000e-10 -2.678794741753e-01 + 3.228000000000e-10 -3.017454056957e-01 + 3.328000000000e-10 -3.410620518407e-01 + 3.428000000000e-10 -3.712405389398e-01 + 3.528000000000e-10 -3.749327973471e-01 + 3.628000000000e-10 -3.157484466493e-01 + 3.728000000000e-10 -1.773087198166e-01 + 3.828000000000e-10 -7.070252178339e-03 + 3.928000000000e-10 1.364462941621e-01 + 4.028000000000e-10 2.243241068758e-01 + 4.128000000000e-10 2.631279769125e-01 + 4.228000000000e-10 2.976097246349e-01 + 4.328000000000e-10 3.371159716785e-01 + 4.428000000000e-10 3.676405775058e-01 + 4.528000000000e-10 3.717787254056e-01 + 4.628000000000e-10 3.133854979421e-01 + 4.728000000000e-10 1.756870158595e-01 + 4.828000000000e-10 6.171257018760e-03 + 4.928000000000e-10 -1.369680995621e-01 + 5.028000000000e-10 -2.245781248931e-01 + 5.128000000000e-10 -2.633829468620e-01 + 5.228000000000e-10 -2.978042748481e-01 + 5.328000000000e-10 -3.373348877854e-01 + 5.428000000000e-10 -3.677584906255e-01 + 5.528000000000e-10 -3.718812762918e-01 + 5.628000000000e-10 -3.133649557524e-01 + 5.728000000000e-10 -1.756479312047e-01 + 5.828000000000e-10 -6.040608056278e-03 + 5.928000000000e-10 1.370690415770e-01 + 6.028000000000e-10 2.247181767783e-01 + 6.128000000000e-10 2.634617265965e-01 + 6.228000000000e-10 2.979157296699e-01 + 6.328000000000e-10 3.373958940353e-01 + 6.428000000000e-10 3.678612954525e-01 + 6.528000000000e-10 3.719309221475e-01 + 6.628000000000e-10 3.134447453066e-01 + 6.728000000000e-10 1.756687688086e-01 + 6.828000000000e-10 6.090200135509e-03 + 6.928000000000e-10 -1.370702307281e-01 + 7.028000000000e-10 -2.246847420648e-01 + 7.128000000000e-10 -2.634701196121e-01 + 7.228000000000e-10 -2.978849158722e-01 + 7.328000000000e-10 -3.374068878437e-01 + 7.428000000000e-10 -3.678336110941e-01 + 7.528000000000e-10 -3.719446503824e-01 + 7.628000000000e-10 -3.134227431793e-01 + 7.728000000000e-10 -1.756868885858e-01 + 7.828000000000e-10 -6.072676723321e-03 + 7.928000000000e-10 1.370503070743e-01 + 8.028000000000e-10 2.247004966695e-01 + 8.128000000000e-10 2.634509722982e-01 + 8.228000000000e-10 2.979013793804e-01 + 8.328000000000e-10 3.373870921905e-01 + 8.428000000000e-10 3.678495602861e-01 + 8.528000000000e-10 3.719256264749e-01 + 8.628000000000e-10 3.134381864470e-01 + 8.728000000000e-10 1.756688935561e-01 + 8.828000000000e-10 6.088345643719e-03 + 8.928000000000e-10 -1.370666831053e-01 + 9.028000000000e-10 -2.246851372638e-01 + 9.128000000000e-10 -2.634666121684e-01 + 9.228000000000e-10 -2.978856025968e-01 + 9.328000000000e-10 -3.374033621769e-01 + 9.428000000000e-10 -3.678342837151e-01 + 9.528000000000e-10 -3.719412125322e-01 + 9.628000000000e-10 -3.134235677100e-01 + 9.728000000000e-10 -1.756838495744e-01 + 9.828000000000e-10 -6.073781243164e-03 + 9.928000000000e-10 1.370527135588e-01 + 1.000000000000e-09 2.065229990524e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/conditions.yaml new file mode 100644 index 00000000..10bb7cbc --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 26 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/run_26 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/simulation_summary.csv b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/simulation_summary.csv new file mode 100644 index 00000000..df931bcf --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/simulation_summary.csv @@ -0,0 +1,28 @@ +run,corner,temperature,vdd,time,vo_diff,voltage_swing +run_00,tt,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.111e-01, -1.870e-01, -3.563e-02, …]",0.763 +run_01,ff,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.099e-01, -1.895e-01, -4.060e-02, …]",0.754 +run_02,ss,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.163e-01, -1.876e-01, -3.217e-02, …]",0.780 +run_03,tt,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.915e-01, -1.780e-01, -3.803e-02, …]",0.715 +run_04,ff,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.909e-01, -1.806e-01, -4.276e-02, …]",0.706 +run_05,ss,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.959e-01, -1.792e-01, -3.599e-02, …]",0.732 +run_06,tt,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.689e-01, -1.692e-01, -4.423e-02, …]",0.639 +run_07,ff,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.694e-01, -1.722e-01, -4.907e-02, …]",0.629 +run_08,ss,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.723e-01, -1.701e-01, -4.252e-02, …]",0.659 +run_09,tt,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.623e-01, -1.963e-01, -5.713e-03, …]",0.843 +run_10,ff,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.622e-01, -1.984e-01, -1.024e-02, …]",0.836 +run_11,ss,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.669e-01, -1.979e-01, -3.070e-03, …]",0.857 +run_12,tt,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.388e-01, -1.852e-01, -4.985e-03, …]",0.803 +run_13,ff,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.407e-01, -1.880e-01, -9.263e-03, …]",0.796 +run_14,ss,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.446e-01, -1.889e-01, -5.355e-03, …]",0.817 +run_15,tt,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.832e-01, -1.548e-01, 2.955e-03, …]",0.743 +run_16,ff,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.908e-01, -1.609e-01, -2.321e-03, …]",0.736 +run_17,ss,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.858e-01, -1.573e-01, 2.540e-03, …]",0.758 +run_18,tt,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.214e-01, -1.558e-01, 3.477e-02, …]",0.836 +run_19,ff,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.163e-01, -1.529e-01, 3.475e-02, …]",0.830 +run_20,ss,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.365e-01, -1.657e-01, 3.100e-02, …]",0.853 +run_21,tt,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.748e-01, -1.328e-01, 3.931e-02, …]",0.799 +run_22,ff,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.701e-01, -1.295e-01, 4.028e-02, …]",0.793 +run_23,ss,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.957e-01, -1.475e-01, 3.197e-02, …]",0.816 +run_24,tt,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-1.909e-01, -9.049e-02, 3.946e-02, …]",0.730 +run_25,ff,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-1.879e-01, -8.812e-02, 4.047e-02, …]",0.726 +run_26,ss,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.136e-01, -1.054e-01, 3.486e-02, …]",0.747 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/simulation_summary.md b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/simulation_summary.md new file mode 100644 index 00000000..718ef066 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/parameters/VoltageSwing/simulation_summary.md @@ -0,0 +1,31 @@ +# Simulation Summary for Vpp + +| run | corner | temperature | vdd | time | vo_diff | voltage_swing | +| :-- | -----: | ----------: | --: | ---: | ------: | ------------: | +| run_00 | tt | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.111e-01, -1.870e-01, -3.563e-02, …] | 0.763 | +| run_01 | ff | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.099e-01, -1.895e-01, -4.060e-02, …] | 0.754 | +| run_02 | ss | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.163e-01, -1.876e-01, -3.217e-02, …] | 0.780 | +| run_03 | tt | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.915e-01, -1.780e-01, -3.803e-02, …] | 0.715 | +| run_04 | ff | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.909e-01, -1.806e-01, -4.276e-02, …] | 0.706 | +| run_05 | ss | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.959e-01, -1.792e-01, -3.599e-02, …] | 0.732 | +| run_06 | tt | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.689e-01, -1.692e-01, -4.423e-02, …] | 0.639 | +| run_07 | ff | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.694e-01, -1.722e-01, -4.907e-02, …] | 0.629 | +| run_08 | ss | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.723e-01, -1.701e-01, -4.252e-02, …] | 0.659 | +| run_09 | tt | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.623e-01, -1.963e-01, -5.713e-03, …] | 0.843 | +| run_10 | ff | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.622e-01, -1.984e-01, -1.024e-02, …] | 0.836 | +| run_11 | ss | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.669e-01, -1.979e-01, -3.070e-03, …] | 0.857 | +| run_12 | tt | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.388e-01, -1.852e-01, -4.985e-03, …] | 0.803 | +| run_13 | ff | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.407e-01, -1.880e-01, -9.263e-03, …] | 0.796 | +| run_14 | ss | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.446e-01, -1.889e-01, -5.355e-03, …] | 0.817 | +| run_15 | tt | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.832e-01, -1.548e-01, 2.955e-03, …] | 0.743 | +| run_16 | ff | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.908e-01, -1.609e-01, -2.321e-03, …] | 0.736 | +| run_17 | ss | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.858e-01, -1.573e-01, 2.540e-03, …] | 0.758 | +| run_18 | tt | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.214e-01, -1.558e-01, 3.477e-02, …] | 0.836 | +| run_19 | ff | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.163e-01, -1.529e-01, 3.475e-02, …] | 0.830 | +| run_20 | ss | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.365e-01, -1.657e-01, 3.100e-02, …] | 0.853 | +| run_21 | tt | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.748e-01, -1.328e-01, 3.931e-02, …] | 0.799 | +| run_22 | ff | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.701e-01, -1.295e-01, 4.028e-02, …] | 0.793 | +| run_23 | ss | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.957e-01, -1.475e-01, 3.197e-02, …] | 0.816 | +| run_24 | tt | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-1.909e-01, -9.049e-02, 3.946e-02, …] | 0.730 | +| run_25 | ff | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-1.879e-01, -8.812e-02, 4.047e-02, …] | 0.726 | +| run_26 | ss | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.136e-01, -1.054e-01, 3.486e-02, …] | 0.747 | diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/summary.md b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/summary.md new file mode 100644 index 00000000..c88c2771 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-57-35/summary.md @@ -0,0 +1,11 @@ + +# CACE Summary for CML_divider + +**netlist source**: schematic + +| Parameter | Tool | Result | Min Limit | Min Value | Typ Target | Typ Value | Max Limit | Max Value | Status | +| :------------------- | :------------------- | :-------------- | ---------: | -----------: | ---------: | -----------: | ---------: | -----------: | :------: | +| Freq | ngspice | frequency | 4.3 GHz | 4.722 GHz | 5.0 GHz | 4.722 GHz | 5.2 GHz | 4.722 GHz | Pass ✅ | +| Amplitude | ngspice | amplitude | 0.2 V | 0.315 V | 0.4 V | 0.382 V | 0.6 V | 0.429 V | Pass ✅ | +| Vpp | ngspice | voltage_swing | 0.4 V | 0.629 V | 0.8 V | 0.763 V | 1.2 V | 0.857 V | Pass ✅ | + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/CML_core_tb.sch new file mode 100644 index 00000000..48f6f0bb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=CACE\{vdd\} savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/CML_core_tb.sch new file mode 100644 index 00000000..5d22316b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/CML_core_tb_0.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/CML_core_tb_0.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/CML_core_tb_0.data new file mode 100644 index 00000000..4cb5b399 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/CML_core_tb_0.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.110742996065e-01 + 1.728000000000e-10 -1.869505717284e-01 + 1.828000000000e-10 -3.563037101706e-02 + 1.928000000000e-10 1.056708524540e-01 + 2.028000000000e-10 2.100393804445e-01 + 2.128000000000e-10 2.784249297688e-01 + 2.228000000000e-10 3.224310579067e-01 + 2.328000000000e-10 3.548600651170e-01 + 2.428000000000e-10 3.792482005271e-01 + 2.528000000000e-10 3.740820324036e-01 + 2.628000000000e-10 3.079440308227e-01 + 2.728000000000e-10 1.813826171807e-01 + 2.828000000000e-10 2.923027813912e-02 + 2.928000000000e-10 -1.118282325615e-01 + 3.028000000000e-10 -2.157337068367e-01 + 3.128000000000e-10 -2.829033176767e-01 + 3.228000000000e-10 -3.260714502323e-01 + 3.328000000000e-10 -3.577361248183e-01 + 3.428000000000e-10 -3.819104006606e-01 + 3.528000000000e-10 -3.764730474160e-01 + 3.628000000000e-10 -3.102968359246e-01 + 3.728000000000e-10 -1.832608913655e-01 + 3.828000000000e-10 -3.084931437320e-02 + 3.928000000000e-10 1.106163095990e-01 + 4.028000000000e-10 2.145714971977e-01 + 4.128000000000e-10 2.819937231053e-01 + 4.228000000000e-10 3.251740998910e-01 + 4.328000000000e-10 3.570946969464e-01 + 4.428000000000e-10 3.813004444382e-01 + 4.528000000000e-10 3.761230596147e-01 + 4.628000000000e-10 3.099646053412e-01 + 4.728000000000e-10 1.831473345022e-01 + 4.828000000000e-10 3.069401022130e-02 + 4.928000000000e-10 -1.106258411343e-01 + 5.028000000000e-10 -2.146793601179e-01 + 5.128000000000e-10 -2.820035552799e-01 + 5.228000000000e-10 -3.252909243829e-01 + 5.328000000000e-10 -3.570986338553e-01 + 5.428000000000e-10 -3.813904658256e-01 + 5.528000000000e-10 -3.760889514061e-01 + 5.628000000000e-10 -3.100114096943e-01 + 5.728000000000e-10 -1.830827247194e-01 + 5.828000000000e-10 -3.072480545922e-02 + 5.928000000000e-10 1.106906463094e-01 + 6.028000000000e-10 2.146493837568e-01 + 6.128000000000e-10 2.820610673881e-01 + 6.228000000000e-10 3.252525482967e-01 + 6.328000000000e-10 3.571504708749e-01 + 6.428000000000e-10 3.813516648295e-01 + 6.528000000000e-10 3.761390656738e-01 + 6.628000000000e-10 3.099742259389e-01 + 6.728000000000e-10 1.831331110808e-01 + 6.828000000000e-10 3.068765829312e-02 + 6.928000000000e-10 -1.106445812930e-01 + 7.028000000000e-10 -2.146859050297e-01 + 7.128000000000e-10 -2.820172231683e-01 + 7.228000000000e-10 -3.252905125649e-01 + 7.328000000000e-10 -3.571078709926e-01 + 7.428000000000e-10 -3.813893177320e-01 + 7.528000000000e-10 -3.760986555866e-01 + 7.628000000000e-10 -3.100117776476e-01 + 7.728000000000e-10 -1.830935153198e-01 + 7.828000000000e-10 -3.072484475908e-02 + 7.928000000000e-10 1.106810594907e-01 + 8.028000000000e-10 2.146507312123e-01 + 8.128000000000e-10 2.820530370402e-01 + 8.228000000000e-10 3.252547871433e-01 + 8.328000000000e-10 3.571432636036e-01 + 8.428000000000e-10 3.813547544577e-01 + 8.528000000000e-10 3.761324372121e-01 + 8.628000000000e-10 3.099775475493e-01 + 8.728000000000e-10 1.831274535707e-01 + 8.828000000000e-10 3.069175078476e-02 + 8.928000000000e-10 -1.106491559136e-01 + 9.028000000000e-10 -2.146821655528e-01 + 9.128000000000e-10 -2.820218639330e-01 + 9.228000000000e-10 -3.252864642203e-01 + 9.328000000000e-10 -3.571122611941e-01 + 9.428000000000e-10 -3.813854215351e-01 + 9.528000000000e-10 -3.761024723822e-01 + 9.628000000000e-10 -3.100075395903e-01 + 9.728000000000e-10 -1.830975404653e-01 + 9.828000000000e-10 -3.072097080048e-02 + 9.928000000000e-10 1.106770531472e-01 + 1.000000000000e-09 1.895325033433e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/conditions.yaml new file mode 100644 index 00000000..900e683e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_00 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/CML_core_tb.sch new file mode 100644 index 00000000..69c98925 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/CML_core_tb_1.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/CML_core_tb_1.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/CML_core_tb_1.data new file mode 100644 index 00000000..2b8492c0 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/CML_core_tb_1.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.098686002716e-01 + 1.728000000000e-10 -1.894560696460e-01 + 1.828000000000e-10 -4.059695742871e-02 + 1.928000000000e-10 9.940964501315e-02 + 2.028000000000e-10 2.033133834097e-01 + 2.128000000000e-10 2.719620830710e-01 + 2.228000000000e-10 3.163098950569e-01 + 2.328000000000e-10 3.491513279687e-01 + 2.428000000000e-10 3.741332087119e-01 + 2.528000000000e-10 3.700254590965e-01 + 2.628000000000e-10 3.062168938694e-01 + 2.728000000000e-10 1.827341653261e-01 + 2.828000000000e-10 3.280764574542e-02 + 2.928000000000e-10 -1.069769977212e-01 + 3.028000000000e-10 -2.102924295592e-01 + 3.128000000000e-10 -2.774748738503e-01 + 3.228000000000e-10 -3.207751929169e-01 + 3.328000000000e-10 -3.527202709264e-01 + 3.428000000000e-10 -3.774342269369e-01 + 3.528000000000e-10 -3.730540733905e-01 + 3.628000000000e-10 -3.091949741363e-01 + 3.728000000000e-10 -1.851642002832e-01 + 3.828000000000e-10 -3.487935842603e-02 + 3.928000000000e-10 1.053970083053e-01 + 4.028000000000e-10 2.088131472734e-01 + 4.128000000000e-10 2.762908135843e-01 + 4.228000000000e-10 3.196385089100e-01 + 4.328000000000e-10 3.518763575372e-01 + 4.428000000000e-10 3.766558038448e-01 + 4.528000000000e-10 3.725714207051e-01 + 4.628000000000e-10 3.087619830708e-01 + 4.728000000000e-10 1.849833837695e-01 + 4.828000000000e-10 3.467977975354e-02 + 4.928000000000e-10 -1.054340839288e-01 + 5.028000000000e-10 -2.089448612506e-01 + 5.128000000000e-10 -2.763231704068e-01 + 5.228000000000e-10 -3.197791718821e-01 + 5.328000000000e-10 -3.518998659973e-01 + 5.428000000000e-10 -3.767613178326e-01 + 5.528000000000e-10 -3.725445308461e-01 + 5.628000000000e-10 -3.088109693961e-01 + 5.728000000000e-10 -1.849155432321e-01 + 5.828000000000e-10 -3.470667341543e-02 + 5.928000000000e-10 1.055048847061e-01 + 6.028000000000e-10 2.089187592091e-01 + 6.128000000000e-10 2.763849186823e-01 + 6.228000000000e-10 3.197425041182e-01 + 6.328000000000e-10 3.519544114659e-01 + 6.428000000000e-10 3.767237647599e-01 + 6.528000000000e-10 3.725977061828e-01 + 6.628000000000e-10 3.087755728399e-01 + 6.728000000000e-10 1.849692271918e-01 + 6.828000000000e-10 3.467099374312e-02 + 6.928000000000e-10 -1.054562384013e-01 + 7.028000000000e-10 -2.089544093361e-01 + 7.128000000000e-10 -2.763388509076e-01 + 7.228000000000e-10 -3.197800091948e-01 + 7.328000000000e-10 -3.519101110125e-01 + 7.428000000000e-10 -3.767612419697e-01 + 7.528000000000e-10 -3.725558598664e-01 + 7.628000000000e-10 -3.088133010441e-01 + 7.728000000000e-10 -1.849285593480e-01 + 7.828000000000e-10 -3.470862903587e-02 + 7.928000000000e-10 1.054936381918e-01 + 8.028000000000e-10 2.089186129636e-01 + 8.128000000000e-10 2.763755879874e-01 + 8.228000000000e-10 3.197437164625e-01 + 8.328000000000e-10 3.519463479929e-01 + 8.428000000000e-10 3.767260853907e-01 + 8.528000000000e-10 3.725904126785e-01 + 8.628000000000e-10 3.087783440951e-01 + 8.728000000000e-10 1.849632167070e-01 + 8.828000000000e-10 3.467482549783e-02 + 8.928000000000e-10 -1.054610682584e-01 + 9.028000000000e-10 -2.089507846182e-01 + 9.128000000000e-10 -2.763436586770e-01 + 9.228000000000e-10 -3.197760754687e-01 + 9.328000000000e-10 -3.519146615050e-01 + 9.428000000000e-10 -3.767573997120e-01 + 9.528000000000e-10 -3.725597535055e-01 + 9.628000000000e-10 -3.088090609970e-01 + 9.728000000000e-10 -1.849326628321e-01 + 9.828000000000e-10 -3.470475490247e-02 + 9.928000000000e-10 1.054896146910e-01 + 1.000000000000e-09 1.838520001242e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/conditions.yaml new file mode 100644 index 00000000..898d6529 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 1 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_01 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/CML_core_tb.sch new file mode 100644 index 00000000..cc7c424c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/CML_core_tb_2.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/CML_core_tb_2.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/CML_core_tb_2.data new file mode 100644 index 00000000..b332ca2c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/CML_core_tb_2.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.162797108708e-01 + 1.728000000000e-10 -1.875883768906e-01 + 1.828000000000e-10 -3.217177564589e-02 + 1.928000000000e-10 1.118453904517e-01 + 2.028000000000e-10 2.178869753922e-01 + 2.128000000000e-10 2.869187499571e-01 + 2.228000000000e-10 3.311831063176e-01 + 2.328000000000e-10 3.637965093552e-01 + 2.428000000000e-10 3.884475585753e-01 + 2.528000000000e-10 3.831703446637e-01 + 2.628000000000e-10 3.149426000366e-01 + 2.728000000000e-10 1.840825734866e-01 + 2.828000000000e-10 2.786370536806e-02 + 2.928000000000e-10 -1.159899232258e-01 + 3.028000000000e-10 -2.217323928122e-01 + 3.128000000000e-10 -2.897841810826e-01 + 3.228000000000e-10 -3.334256487170e-01 + 3.328000000000e-10 -3.654508602495e-01 + 3.428000000000e-10 -3.900407544937e-01 + 3.528000000000e-10 -3.846189534315e-01 + 3.628000000000e-10 -3.164922452622e-01 + 3.728000000000e-10 -1.853182634851e-01 + 3.828000000000e-10 -2.898615964086e-02 + 3.928000000000e-10 1.151710782521e-01 + 4.028000000000e-10 2.209054309263e-01 + 4.128000000000e-10 2.891817322742e-01 + 4.228000000000e-10 3.328077516782e-01 + 4.328000000000e-10 3.650515838921e-01 + 4.428000000000e-10 3.896233583948e-01 + 4.528000000000e-10 3.844074302627e-01 + 4.628000000000e-10 3.162448842688e-01 + 4.728000000000e-10 1.852475068120e-01 + 4.828000000000e-10 2.884623360652e-02 + 4.928000000000e-10 -1.151788252337e-01 + 5.028000000000e-10 -2.210147130581e-01 + 5.128000000000e-10 -2.891872658193e-01 + 5.228000000000e-10 -3.329167168088e-01 + 5.328000000000e-10 -3.650471930963e-01 + 5.428000000000e-10 -3.897100874545e-01 + 5.528000000000e-10 -3.843762306477e-01 + 5.628000000000e-10 -3.163013912188e-01 + 5.728000000000e-10 -1.851950213487e-01 + 5.828000000000e-10 -2.889036873678e-02 + 5.928000000000e-10 1.152312899162e-01 + 6.028000000000e-10 2.209735588305e-01 + 6.128000000000e-10 2.892357416511e-01 + 6.228000000000e-10 3.328707955285e-01 + 6.328000000000e-10 3.650931065031e-01 + 6.428000000000e-10 3.896657987149e-01 + 6.528000000000e-10 3.844215105032e-01 + 6.628000000000e-10 3.162596917265e-01 + 6.728000000000e-10 1.852417351036e-01 + 6.828000000000e-10 2.884992827621e-02 + 6.928000000000e-10 -1.151876679011e-01 + 7.028000000000e-10 -2.210123101756e-01 + 7.128000000000e-10 -2.891938845816e-01 + 7.228000000000e-10 -3.329106389600e-01 + 7.328000000000e-10 -3.650518039465e-01 + 7.428000000000e-10 -3.897047407363e-01 + 7.528000000000e-10 -3.843819858648e-01 + 7.628000000000e-10 -3.162978744015e-01 + 7.728000000000e-10 -1.852023753321e-01 + 7.828000000000e-10 -2.888743165850e-02 + 7.928000000000e-10 1.152240030808e-01 + 8.028000000000e-10 2.209771419031e-01 + 8.128000000000e-10 2.892295361788e-01 + 8.228000000000e-10 3.328747680971e-01 + 8.328000000000e-10 3.650871456099e-01 + 8.428000000000e-10 3.896701175780e-01 + 8.528000000000e-10 3.844156912621e-01 + 8.628000000000e-10 3.162637401476e-01 + 8.728000000000e-10 1.852363586492e-01 + 8.828000000000e-10 2.885434112124e-02 + 8.928000000000e-10 -1.151920978903e-01 + 9.028000000000e-10 -2.210084087345e-01 + 9.128000000000e-10 -2.891984388712e-01 + 9.228000000000e-10 -3.329064027155e-01 + 9.328000000000e-10 -3.650560988894e-01 + 9.428000000000e-10 -3.897007143418e-01 + 9.528000000000e-10 -3.843858173814e-01 + 9.628000000000e-10 -3.162935974835e-01 + 9.728000000000e-10 -1.852064424274e-01 + 9.828000000000e-10 -2.888350905479e-02 + 9.928000000000e-10 1.152199079204e-01 + 1.000000000000e-09 1.954791142410e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/conditions.yaml new file mode 100644 index 00000000..137f4e77 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 2 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_02 +temperature: '-40' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/CML_core_tb.sch new file mode 100644 index 00000000..57438f7c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/CML_core_tb_3.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/CML_core_tb_3.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/CML_core_tb_3.data new file mode 100644 index 00000000..6dccbfd6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/CML_core_tb_3.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.914571027454e-01 + 1.728000000000e-10 -1.780117263272e-01 + 1.828000000000e-10 -3.802564096594e-02 + 1.928000000000e-10 9.479025580261e-02 + 2.028000000000e-10 1.961220444980e-01 + 2.128000000000e-10 2.643669322964e-01 + 2.228000000000e-10 3.071498875260e-01 + 2.328000000000e-10 3.351667250191e-01 + 2.428000000000e-10 3.529478733093e-01 + 2.528000000000e-10 3.439767079911e-01 + 2.628000000000e-10 2.827109934029e-01 + 2.728000000000e-10 1.683025534555e-01 + 2.828000000000e-10 2.843266655337e-02 + 2.928000000000e-10 -1.036223502576e-01 + 3.028000000000e-10 -2.042863713809e-01 + 3.128000000000e-10 -2.713818104821e-01 + 3.228000000000e-10 -3.132717880322e-01 + 3.328000000000e-10 -3.402903477971e-01 + 3.428000000000e-10 -3.574262556597e-01 + 3.528000000000e-10 -3.476240566503e-01 + 3.628000000000e-10 -2.857203755187e-01 + 3.728000000000e-10 -1.703849236420e-01 + 3.828000000000e-10 -2.994825869373e-02 + 3.928000000000e-10 1.026817167876e-01 + 4.028000000000e-10 2.034750084544e-01 + 4.128000000000e-10 2.707812081585e-01 + 4.228000000000e-10 3.126503625184e-01 + 4.328000000000e-10 3.399043734480e-01 + 4.428000000000e-10 3.571021595385e-01 + 4.528000000000e-10 3.475896983741e-01 + 4.628000000000e-10 2.857411927694e-01 + 4.728000000000e-10 1.706053611761e-01 + 4.828000000000e-10 3.010795594348e-02 + 4.928000000000e-10 -1.024135388755e-01 + 5.028000000000e-10 -2.033190471438e-01 + 5.128000000000e-10 -2.705615444577e-01 + 5.228000000000e-10 -3.125558523975e-01 + 5.328000000000e-10 -3.397330193449e-01 + 5.428000000000e-10 -3.570354300338e-01 + 5.528000000000e-10 -3.474353611027e-01 + 5.628000000000e-10 -2.856876769732e-01 + 5.728000000000e-10 -1.704760895977e-01 + 5.828000000000e-10 -3.008641427314e-02 + 5.928000000000e-10 1.025087996136e-01 + 6.028000000000e-10 2.033209986443e-01 + 6.128000000000e-10 2.706412375819e-01 + 6.228000000000e-10 3.125457575810e-01 + 6.328000000000e-10 3.398008382665e-01 + 6.428000000000e-10 3.570145583479e-01 + 6.528000000000e-10 3.474888598072e-01 + 6.628000000000e-10 2.856551852535e-01 + 6.728000000000e-10 1.705188293935e-01 + 6.828000000000e-10 3.004736925580e-02 + 6.928000000000e-10 -1.024728514478e-01 + 7.028000000000e-10 -2.033602328622e-01 + 7.128000000000e-10 -2.706061106716e-01 + 7.228000000000e-10 -3.125843283316e-01 + 7.328000000000e-10 -3.397655433228e-01 + 7.428000000000e-10 -3.570523646632e-01 + 7.528000000000e-10 -3.474554820929e-01 + 7.628000000000e-10 -2.856929985560e-01 + 7.728000000000e-10 -1.704859799650e-01 + 7.828000000000e-10 -3.008383757896e-02 + 7.928000000000e-10 1.025039608177e-01 + 8.028000000000e-10 2.033261442763e-01 + 8.128000000000e-10 2.706371082838e-01 + 8.228000000000e-10 3.125504649737e-01 + 8.328000000000e-10 3.397966066528e-01 + 8.428000000000e-10 3.570198965640e-01 + 8.528000000000e-10 3.474857187206e-01 + 8.628000000000e-10 2.856614378232e-01 + 8.728000000000e-10 1.705164607562e-01 + 8.828000000000e-10 3.005354621749e-02 + 8.928000000000e-10 -1.024749769036e-01 + 9.028000000000e-10 -2.033548454455e-01 + 9.128000000000e-10 -2.706087008930e-01 + 9.228000000000e-10 -3.125792630790e-01 + 9.328000000000e-10 -3.397683901773e-01 + 9.428000000000e-10 -3.570478314069e-01 + 9.528000000000e-10 -3.474583427153e-01 + 9.628000000000e-10 -2.856887110961e-01 + 9.728000000000e-10 -1.704892548593e-01 + 9.828000000000e-10 -3.008001356704e-02 + 9.928000000000e-10 1.025005080892e-01 + 1.000000000000e-09 1.786649040194e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/conditions.yaml new file mode 100644 index 00000000..5d8e903b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 3 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_03 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/CML_core_tb.sch new file mode 100644 index 00000000..076f35a1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/CML_core_tb_4.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/CML_core_tb_4.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/CML_core_tb_4.data new file mode 100644 index 00000000..3efc8a54 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/CML_core_tb_4.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.908886906683e-01 + 1.728000000000e-10 -1.805890382926e-01 + 1.828000000000e-10 -4.276329247682e-02 + 1.928000000000e-10 8.882407595099e-02 + 2.028000000000e-10 1.894983505466e-01 + 2.128000000000e-10 2.576242567207e-01 + 2.228000000000e-10 3.005212718886e-01 + 2.328000000000e-10 3.289546768723e-01 + 2.428000000000e-10 3.474240530436e-01 + 2.528000000000e-10 3.394794629215e-01 + 2.628000000000e-10 2.802266193594e-01 + 2.728000000000e-10 1.685520573893e-01 + 2.828000000000e-10 3.081792474830e-02 + 2.928000000000e-10 -9.985913249602e-02 + 3.028000000000e-10 -1.996535082954e-01 + 3.128000000000e-10 -2.663519845580e-01 + 3.228000000000e-10 -3.081166100610e-01 + 3.328000000000e-10 -3.353557582557e-01 + 3.428000000000e-10 -3.530339682910e-01 + 3.528000000000e-10 -3.441234226063e-01 + 3.628000000000e-10 -2.840838930007e-01 + 3.728000000000e-10 -1.712890179908e-01 + 3.828000000000e-10 -3.280692441870e-02 + 3.928000000000e-10 9.858702888345e-02 + 4.028000000000e-10 1.985844458095e-01 + 4.128000000000e-10 2.655374220709e-01 + 4.228000000000e-10 3.073092043222e-01 + 4.328000000000e-10 3.348254361967e-01 + 4.428000000000e-10 3.526065806553e-01 + 4.528000000000e-10 3.440384505411e-01 + 4.628000000000e-10 2.840943593119e-01 + 4.728000000000e-10 1.715352376725e-01 + 4.828000000000e-10 3.300625747524e-02 + 4.928000000000e-10 -9.826793525126e-02 + 5.028000000000e-10 -1.983826392696e-01 + 5.128000000000e-10 -2.652748957302e-01 + 5.228000000000e-10 -3.071819372703e-01 + 5.328000000000e-10 -3.346211766496e-01 + 5.428000000000e-10 -3.525115401756e-01 + 5.528000000000e-10 -3.438520776438e-01 + 5.628000000000e-10 -2.840132934403e-01 + 5.728000000000e-10 -1.713783534881e-01 + 5.828000000000e-10 -3.296528839742e-02 + 5.928000000000e-10 9.838210726041e-02 + 6.028000000000e-10 1.983970962128e-01 + 6.128000000000e-10 2.653685996210e-01 + 6.228000000000e-10 3.071805271474e-01 + 6.328000000000e-10 3.346994451143e-01 + 6.428000000000e-10 3.524959527178e-01 + 6.528000000000e-10 3.439124816552e-01 + 6.628000000000e-10 2.839825148385e-01 + 6.728000000000e-10 1.714247364616e-01 + 6.828000000000e-10 3.292536702304e-02 + 6.928000000000e-10 -9.834444145178e-02 + 7.028000000000e-10 -1.984381153623e-01 + 7.128000000000e-10 -2.653318964793e-01 + 7.228000000000e-10 -3.072207693265e-01 + 7.328000000000e-10 -3.346627011511e-01 + 7.428000000000e-10 -3.525355719541e-01 + 7.528000000000e-10 -3.438780517049e-01 + 7.628000000000e-10 -2.840226095914e-01 + 7.728000000000e-10 -1.713910964736e-01 + 7.828000000000e-10 -3.296406429130e-02 + 7.928000000000e-10 9.837645950128e-02 + 8.028000000000e-10 1.984019833998e-01 + 8.128000000000e-10 2.653640104122e-01 + 8.228000000000e-10 3.071850636337e-01 + 8.328000000000e-10 3.346949515146e-01 + 8.428000000000e-10 3.525014052751e-01 + 8.528000000000e-10 3.439095067618e-01 + 8.628000000000e-10 2.839893402731e-01 + 8.728000000000e-10 1.714228569780e-01 + 8.828000000000e-10 3.293222880403e-02 + 8.928000000000e-10 -9.834616516704e-02 + 9.028000000000e-10 -1.984321208293e-01 + 9.128000000000e-10 -2.653341991167e-01 + 9.228000000000e-10 -3.072152380466e-01 + 9.328000000000e-10 -3.346653803170e-01 + 9.428000000000e-10 -3.525306496503e-01 + 9.528000000000e-10 -3.438807929682e-01 + 9.628000000000e-10 -2.840179937834e-01 + 9.728000000000e-10 -1.713943425416e-01 + 9.828000000000e-10 -3.296001530074e-02 + 9.928000000000e-10 9.837298926970e-02 + 1.000000000000e-09 1.738955459088e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/conditions.yaml new file mode 100644 index 00000000..fcc26cda --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 4 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_04 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/CML_core_tb.sch new file mode 100644 index 00000000..402e88ce --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/CML_core_tb_5.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/CML_core_tb_5.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/CML_core_tb_5.data new file mode 100644 index 00000000..0cc77d23 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/CML_core_tb_5.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.958574299710e-01 + 1.728000000000e-10 -1.791897212785e-01 + 1.828000000000e-10 -3.599075048614e-02 + 1.928000000000e-10 9.946703268478e-02 + 2.028000000000e-10 2.032502871016e-01 + 2.128000000000e-10 2.733994094958e-01 + 2.228000000000e-10 3.172845988123e-01 + 2.328000000000e-10 3.455609123691e-01 + 2.428000000000e-10 3.630923957132e-01 + 2.528000000000e-10 3.534419450967e-01 + 2.628000000000e-10 2.903663934708e-01 + 2.728000000000e-10 1.726743312860e-01 + 2.828000000000e-10 2.930291139472e-02 + 2.928000000000e-10 -1.057514312075e-01 + 3.028000000000e-10 -2.091913834589e-01 + 3.128000000000e-10 -2.784696434768e-01 + 3.228000000000e-10 -3.216873931074e-01 + 3.328000000000e-10 -3.491870426412e-01 + 3.428000000000e-10 -3.662894191498e-01 + 3.528000000000e-10 -3.560374131806e-01 + 3.628000000000e-10 -2.925719059469e-01 + 3.728000000000e-10 -1.742159787839e-01 + 3.828000000000e-10 -3.049391935212e-02 + 3.928000000000e-10 1.049756016137e-01 + 4.028000000000e-10 2.084672065617e-01 + 4.128000000000e-10 2.779301238417e-01 + 4.228000000000e-10 3.211180618030e-01 + 4.328000000000e-10 3.488255023686e-01 + 4.428000000000e-10 3.659572542624e-01 + 4.528000000000e-10 3.559493947967e-01 + 4.628000000000e-10 2.925058094407e-01 + 4.728000000000e-10 1.743267017008e-01 + 4.828000000000e-10 3.054314172764e-02 + 4.928000000000e-10 -1.048175245910e-01 + 5.028000000000e-10 -2.084096499031e-01 + 5.128000000000e-10 -2.777998408986e-01 + 5.228000000000e-10 -3.210985617265e-01 + 5.328000000000e-10 -3.487226120056e-01 + 5.428000000000e-10 -3.659481451181e-01 + 5.528000000000e-10 -3.558482598240e-01 + 5.628000000000e-10 -2.924942070749e-01 + 5.728000000000e-10 -1.742324941843e-01 + 5.828000000000e-10 -3.054486718364e-02 + 5.928000000000e-10 1.048934295445e-01 + 6.028000000000e-10 2.083991544976e-01 + 6.128000000000e-10 2.778660140822e-01 + 6.228000000000e-10 3.210794561497e-01 + 6.328000000000e-10 3.487805773205e-01 + 6.428000000000e-10 3.659226785140e-01 + 6.528000000000e-10 3.558970058340e-01 + 6.628000000000e-10 2.924624137185e-01 + 6.728000000000e-10 1.742748110039e-01 + 6.828000000000e-10 3.050920657876e-02 + 6.928000000000e-10 -1.048562048812e-01 + 7.028000000000e-10 -2.084343791218e-01 + 7.128000000000e-10 -2.778299623633e-01 + 7.228000000000e-10 -3.211147582115e-01 + 7.328000000000e-10 -3.487447461690e-01 + 7.428000000000e-10 -3.659575085549e-01 + 7.528000000000e-10 -3.558632428052e-01 + 7.628000000000e-10 -2.924972481137e-01 + 7.728000000000e-10 -1.742418088753e-01 + 7.828000000000e-10 -3.054328720193e-02 + 7.928000000000e-10 1.048870377838e-01 + 8.028000000000e-10 2.084024115537e-01 + 8.128000000000e-10 2.778603942564e-01 + 8.228000000000e-10 3.210827582845e-01 + 8.328000000000e-10 3.487751488045e-01 + 8.428000000000e-10 3.659266824704e-01 + 8.528000000000e-10 3.558925702991e-01 + 8.628000000000e-10 2.924671830422e-01 + 8.728000000000e-10 1.742711856894e-01 + 8.828000000000e-10 3.051417003050e-02 + 8.928000000000e-10 -1.048591994973e-01 + 9.028000000000e-10 -2.084299430076e-01 + 9.128000000000e-10 -2.778331783696e-01 + 9.228000000000e-10 -3.211104359655e-01 + 9.328000000000e-10 -3.487480244246e-01 + 9.428000000000e-10 -3.659535267111e-01 + 9.528000000000e-10 -3.558663548813e-01 + 9.628000000000e-10 -2.924933270906e-01 + 9.728000000000e-10 -1.742451324195e-01 + 9.828000000000e-10 -3.053963678018e-02 + 9.928000000000e-10 1.048836196344e-01 + 1.000000000000e-09 1.830293824662e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/conditions.yaml new file mode 100644 index 00000000..e376bd3e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 5 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_05 +temperature: '27' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/CML_core_tb.sch new file mode 100644 index 00000000..9b63c1e2 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/CML_core_tb_6.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/CML_core_tb_6.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/CML_core_tb_6.data new file mode 100644 index 00000000..38ffd8bf --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/CML_core_tb_6.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.689355033953e-01 + 1.728000000000e-10 -1.691728954892e-01 + 1.828000000000e-10 -4.423302134033e-02 + 1.928000000000e-10 7.663444207075e-02 + 2.028000000000e-10 1.714764750752e-01 + 2.128000000000e-10 2.368219567798e-01 + 2.228000000000e-10 2.772768132445e-01 + 2.328000000000e-10 3.013675537348e-01 + 2.428000000000e-10 3.140706479520e-01 + 2.528000000000e-10 3.038549886105e-01 + 2.628000000000e-10 2.508404086347e-01 + 2.728000000000e-10 1.528360605683e-01 + 2.828000000000e-10 3.040034809293e-02 + 2.928000000000e-10 -8.785381094258e-02 + 3.028000000000e-10 -1.808734961109e-01 + 3.128000000000e-10 -2.445795528199e-01 + 3.228000000000e-10 -2.838354337528e-01 + 3.328000000000e-10 -3.065800962400e-01 + 3.428000000000e-10 -3.181767360109e-01 + 3.528000000000e-10 -3.065752663659e-01 + 3.628000000000e-10 -2.523878800401e-01 + 3.728000000000e-10 -1.531173668737e-01 + 3.828000000000e-10 -2.992055538556e-02 + 3.928000000000e-10 8.900435641641e-02 + 4.028000000000e-10 1.821756238512e-01 + 4.128000000000e-10 2.460123650690e-01 + 4.228000000000e-10 2.851182310100e-01 + 4.328000000000e-10 3.079291995556e-01 + 4.428000000000e-10 3.194129911462e-01 + 4.528000000000e-10 3.078915366323e-01 + 4.628000000000e-10 2.535144344421e-01 + 4.728000000000e-10 1.541542026196e-01 + 4.828000000000e-10 3.063651583090e-02 + 4.928000000000e-10 -8.839161491074e-02 + 5.028000000000e-10 -1.817999659778e-01 + 5.128000000000e-10 -2.456456661989e-01 + 5.228000000000e-10 -2.849195350591e-01 + 5.328000000000e-10 -3.077091828990e-01 + 5.428000000000e-10 -3.193505374448e-01 + 5.528000000000e-10 -3.078081521678e-01 + 5.628000000000e-10 -2.535787813503e-01 + 5.728000000000e-10 -1.541764927596e-01 + 5.828000000000e-10 -3.077048554081e-02 + 5.928000000000e-10 8.832790620553e-02 + 6.028000000000e-10 1.816551916875e-01 + 6.128000000000e-10 2.455879975104e-01 + 6.228000000000e-10 2.847911932982e-01 + 6.328000000000e-10 3.076677363016e-01 + 6.428000000000e-10 3.192371229053e-01 + 6.528000000000e-10 3.077778412262e-01 + 6.628000000000e-10 2.534819327505e-01 + 6.728000000000e-10 1.541683138663e-01 + 6.828000000000e-10 3.070155435378e-02 + 6.928000000000e-10 -8.831320560130e-02 + 7.028000000000e-10 -1.817038543937e-01 + 7.128000000000e-10 -2.455619958387e-01 + 7.228000000000e-10 -2.848320347671e-01 + 7.328000000000e-10 -3.076358698550e-01 + 7.428000000000e-10 -3.192710667609e-01 + 7.528000000000e-10 -3.077409972388e-01 + 7.628000000000e-10 -2.535098012890e-01 + 7.728000000000e-10 -1.541282589474e-01 + 7.828000000000e-10 -3.072672689244e-02 + 7.928000000000e-10 8.835148526653e-02 + 8.028000000000e-10 1.816795669555e-01 + 8.128000000000e-10 2.455984246601e-01 + 8.228000000000e-10 2.848062931006e-01 + 8.328000000000e-10 3.076705916890e-01 + 8.428000000000e-10 3.192450073559e-01 + 8.528000000000e-10 3.077736319697e-01 + 8.628000000000e-10 2.534831121829e-01 + 8.728000000000e-10 1.541590953584e-01 + 8.828000000000e-10 3.069946612700e-02 + 8.928000000000e-10 -8.832341199891e-02 + 9.028000000000e-10 -1.817063952021e-01 + 9.128000000000e-10 -2.455714256322e-01 + 9.228000000000e-10 -2.848333922463e-01 + 9.328000000000e-10 -3.076440936715e-01 + 9.428000000000e-10 -3.192716274515e-01 + 9.528000000000e-10 -3.077481608676e-01 + 9.628000000000e-10 -2.535093614867e-01 + 9.728000000000e-10 -1.541340765567e-01 + 9.828000000000e-10 -3.072486745089e-02 + 9.928000000000e-10 8.834711873249e-02 + 1.000000000000e-09 1.586239577417e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/conditions.yaml new file mode 100644 index 00000000..b41d16dd --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 6 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_06 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/CML_core_tb.sch new file mode 100644 index 00000000..c7eefa4e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/CML_core_tb_7.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/CML_core_tb_7.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/CML_core_tb_7.data new file mode 100644 index 00000000..1cfe87b5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/CML_core_tb_7.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.694477874818e-01 + 1.728000000000e-10 -1.721829739194e-01 + 1.828000000000e-10 -4.906833766415e-02 + 1.928000000000e-10 7.069743134728e-02 + 2.028000000000e-10 1.648418946330e-01 + 2.128000000000e-10 2.298765389610e-01 + 2.228000000000e-10 2.702802052070e-01 + 2.328000000000e-10 2.947129455777e-01 + 2.428000000000e-10 3.081296602318e-01 + 2.528000000000e-10 2.990063012040e-01 + 2.628000000000e-10 2.478884705263e-01 + 2.728000000000e-10 1.524230846398e-01 + 2.828000000000e-10 3.216725009037e-02 + 2.928000000000e-10 -8.452884553171e-02 + 3.028000000000e-10 -1.764495371150e-01 + 3.128000000000e-10 -2.394951663999e-01 + 3.228000000000e-10 -2.784178156025e-01 + 3.328000000000e-10 -3.012580547427e-01 + 3.428000000000e-10 -3.133510931360e-01 + 3.528000000000e-10 -3.026055002423e-01 + 3.628000000000e-10 -2.500554574282e-01 + 3.728000000000e-10 -1.530444893437e-01 + 3.828000000000e-10 -3.179895766292e-02 + 3.928000000000e-10 8.573594509971e-02 + 4.028000000000e-10 1.778922744476e-01 + 4.128000000000e-10 2.411102030583e-01 + 4.228000000000e-10 2.798967112063e-01 + 4.328000000000e-10 3.028156837380e-01 + 4.428000000000e-10 3.148075876296e-01 + 4.528000000000e-10 3.041758344829e-01 + 4.628000000000e-10 2.514478797306e-01 + 4.728000000000e-10 1.543354303295e-01 + 4.828000000000e-10 3.272908827542e-02 + 4.928000000000e-10 -8.494488064942e-02 + 5.028000000000e-10 -1.773750790235e-01 + 5.128000000000e-10 -2.406241070550e-01 + 5.228000000000e-10 -2.796032327906e-01 + 5.328000000000e-10 -3.025154625175e-01 + 5.428000000000e-10 -3.146850050735e-01 + 5.528000000000e-10 -3.040456856306e-01 + 5.628000000000e-10 -2.514865398019e-01 + 5.728000000000e-10 -1.543455010081e-01 + 5.828000000000e-10 -3.286780649422e-02 + 5.928000000000e-10 8.487071769529e-02 + 6.028000000000e-10 1.772120847555e-01 + 6.128000000000e-10 2.405506532865e-01 + 6.228000000000e-10 2.794557736074e-01 + 6.328000000000e-10 3.024581955274e-01 + 6.428000000000e-10 3.145521515255e-01 + 6.528000000000e-10 3.039990633934e-01 + 6.628000000000e-10 2.513709142203e-01 + 6.728000000000e-10 1.543241408079e-01 + 6.828000000000e-10 3.278555364704e-02 + 6.928000000000e-10 -8.486327141666e-02 + 7.028000000000e-10 -1.772689800248e-01 + 7.128000000000e-10 -2.405282060865e-01 + 7.228000000000e-10 -2.795021370136e-01 + 7.328000000000e-10 -3.024278022377e-01 + 7.428000000000e-10 -3.145896170200e-01 + 7.528000000000e-10 -3.039617953787e-01 + 7.628000000000e-10 -2.514004690324e-01 + 7.728000000000e-10 -1.542820043229e-01 + 7.828000000000e-10 -3.281110337775e-02 + 7.928000000000e-10 8.490436306023e-02 + 8.028000000000e-10 1.772446330839e-01 + 8.128000000000e-10 2.405674335146e-01 + 8.228000000000e-10 2.794761963085e-01 + 8.328000000000e-10 3.024650976088e-01 + 8.428000000000e-10 3.145632644585e-01 + 8.528000000000e-10 3.039968961590e-01 + 8.628000000000e-10 2.513733111446e-01 + 8.728000000000e-10 1.543150179356e-01 + 8.828000000000e-10 3.278304586331e-02 + 8.928000000000e-10 -8.487456857602e-02 + 9.028000000000e-10 -1.772725618584e-01 + 9.128000000000e-10 -2.405389250041e-01 + 9.228000000000e-10 -2.795045102279e-01 + 9.328000000000e-10 -3.024372521320e-01 + 9.428000000000e-10 -3.145911572553e-01 + 9.528000000000e-10 -3.039701598993e-01 + 9.628000000000e-10 -2.514009218164e-01 + 9.728000000000e-10 -1.542887967264e-01 + 9.828000000000e-10 -3.280979517783e-02 + 9.928000000000e-10 8.489941508642e-02 + 1.000000000000e-09 1.544118489485e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/conditions.yaml new file mode 100644 index 00000000..cc95717e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 7 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_07 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/CML_core_tb.sch new file mode 100644 index 00000000..e7e6745f --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/CML_core_tb_8.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=0.8 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/CML_core_tb_8.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/CML_core_tb_8.data new file mode 100644 index 00000000..b4ed17dd --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/CML_core_tb_8.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.722799425151e-01 + 1.728000000000e-10 -1.701277707773e-01 + 1.828000000000e-10 -4.252496989706e-02 + 1.928000000000e-10 8.092536896213e-02 + 2.028000000000e-10 1.785199933375e-01 + 2.128000000000e-10 2.463984181452e-01 + 2.228000000000e-10 2.885755113271e-01 + 2.328000000000e-10 3.131967480955e-01 + 2.428000000000e-10 3.255285716483e-01 + 2.528000000000e-10 3.143820454109e-01 + 2.628000000000e-10 2.595824958850e-01 + 2.728000000000e-10 1.585585813323e-01 + 2.828000000000e-10 3.254606172598e-02 + 2.928000000000e-10 -8.921916265210e-02 + 3.028000000000e-10 -1.857143058967e-01 + 3.128000000000e-10 -2.524588707093e-01 + 3.228000000000e-10 -2.937876617757e-01 + 3.328000000000e-10 -3.173655773168e-01 + 3.428000000000e-10 -3.288566343508e-01 + 3.528000000000e-10 -3.166123605828e-01 + 3.628000000000e-10 -2.609360611345e-01 + 3.728000000000e-10 -1.589355414621e-01 + 3.828000000000e-10 -3.237621747627e-02 + 3.928000000000e-10 8.990939637816e-02 + 4.028000000000e-10 1.864994737191e-01 + 4.128000000000e-10 2.533636311879e-01 + 4.228000000000e-10 2.945633129641e-01 + 4.328000000000e-10 3.182197832362e-01 + 4.428000000000e-10 3.296245618008e-01 + 4.528000000000e-10 3.174841059207e-01 + 4.628000000000e-10 2.616780558587e-01 + 4.728000000000e-10 1.596622360522e-01 + 4.828000000000e-10 3.287681921596e-02 + 4.928000000000e-10 -8.943999963453e-02 + 5.028000000000e-10 -1.862066308093e-01 + 5.128000000000e-10 -2.530527908612e-01 + 5.228000000000e-10 -2.943931136832e-01 + 5.328000000000e-10 -3.180152021024e-01 + 5.428000000000e-10 -3.295545667130e-01 + 5.528000000000e-10 -3.173812952412e-01 + 5.628000000000e-10 -2.617027726155e-01 + 5.728000000000e-10 -1.596411992093e-01 + 5.828000000000e-10 -3.295895028258e-02 + 5.928000000000e-10 8.942267434718e-02 + 6.028000000000e-10 1.861105403656e-01 + 6.128000000000e-10 2.530344325895e-01 + 6.228000000000e-10 2.943051008579e-01 + 6.328000000000e-10 3.180051485103e-01 + 6.428000000000e-10 3.294737915539e-01 + 6.528000000000e-10 3.173744791022e-01 + 6.628000000000e-10 2.616291881364e-01 + 6.728000000000e-10 1.596450333001e-01 + 6.828000000000e-10 3.290088244348e-02 + 6.928000000000e-10 -8.940659470005e-02 + 7.028000000000e-10 -1.861562133447e-01 + 7.128000000000e-10 -2.530116656482e-01 + 7.228000000000e-10 -2.943454309811e-01 + 7.328000000000e-10 -3.179780561670e-01 + 7.428000000000e-10 -3.295087969733e-01 + 7.528000000000e-10 -3.173438661274e-01 + 7.628000000000e-10 -2.616591955397e-01 + 7.728000000000e-10 -1.596115565426e-01 + 7.828000000000e-10 -3.292790237402e-02 + 7.928000000000e-10 8.943927261705e-02 + 8.028000000000e-10 1.861310420114e-01 + 8.128000000000e-10 2.530433655174e-01 + 8.228000000000e-10 2.943195630770e-01 + 8.328000000000e-10 3.180088285378e-01 + 8.428000000000e-10 3.294832118435e-01 + 8.528000000000e-10 3.173732295072e-01 + 8.628000000000e-10 2.616337486722e-01 + 8.728000000000e-10 1.596399004289e-01 + 8.828000000000e-10 3.290244884503e-02 + 8.928000000000e-10 -8.941301350766e-02 + 9.028000000000e-10 -1.861557185261e-01 + 9.128000000000e-10 -2.530180139920e-01 + 9.228000000000e-10 -2.943444772306e-01 + 9.328000000000e-10 -3.179838696148e-01 + 9.428000000000e-10 -3.295076633013e-01 + 9.528000000000e-10 -3.173492560727e-01 + 9.628000000000e-10 -2.616577755083e-01 + 9.728000000000e-10 -1.596163947717e-01 + 9.828000000000e-10 -3.292583900074e-02 + 9.928000000000e-10 8.943518431692e-02 + 1.000000000000e-09 1.621529465729e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/conditions.yaml new file mode 100644 index 00000000..a062e45e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 8 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_08 +temperature: '80' +vdd: '0.8' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/CML_core_tb.sch new file mode 100644 index 00000000..ea3a2f93 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/CML_core_tb_9.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/CML_core_tb_9.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/CML_core_tb_9.data new file mode 100644 index 00000000..6b24d1d6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/CML_core_tb_9.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.622644182692e-01 + 1.728000000000e-10 -1.962653738736e-01 + 1.828000000000e-10 -5.712895575235e-03 + 1.928000000000e-10 1.510345047594e-01 + 2.028000000000e-10 2.432775412534e-01 + 2.128000000000e-10 2.772000132926e-01 + 2.228000000000e-10 3.161630086256e-01 + 2.328000000000e-10 3.654121904616e-01 + 2.428000000000e-10 4.070200809677e-01 + 2.528000000000e-10 4.211809118313e-01 + 2.628000000000e-10 3.552666659990e-01 + 2.728000000000e-10 1.954111420719e-01 + 2.828000000000e-10 7.499275151763e-03 + 2.928000000000e-10 -1.488912332472e-01 + 3.028000000000e-10 -2.420325529570e-01 + 3.128000000000e-10 -2.768171400503e-01 + 3.228000000000e-10 -3.164103191401e-01 + 3.328000000000e-10 -3.656815561297e-01 + 3.428000000000e-10 -4.072561733660e-01 + 3.528000000000e-10 -4.210637971044e-01 + 3.628000000000e-10 -3.548415521036e-01 + 3.728000000000e-10 -1.946286859654e-01 + 3.828000000000e-10 -6.746438981043e-03 + 3.928000000000e-10 1.496127957227e-01 + 4.028000000000e-10 2.425057762271e-01 + 4.128000000000e-10 2.772590268750e-01 + 4.228000000000e-10 3.167075169816e-01 + 4.328000000000e-10 3.660182242119e-01 + 4.428000000000e-10 4.074726111052e-01 + 4.528000000000e-10 4.212975956202e-01 + 4.628000000000e-10 3.549573822535e-01 + 4.728000000000e-10 1.947835560361e-01 + 4.828000000000e-10 6.801482567115e-03 + 4.928000000000e-10 -1.495086456760e-01 + 5.028000000000e-10 -2.424863730465e-01 + 5.128000000000e-10 -2.771744431737e-01 + 5.228000000000e-10 -3.166940000076e-01 + 5.328000000000e-10 -3.659398771497e-01 + 5.428000000000e-10 -4.074689465730e-01 + 5.528000000000e-10 -4.212394549000e-01 + 5.628000000000e-10 -3.549741510035e-01 + 5.728000000000e-10 -1.947436351784e-01 + 5.828000000000e-10 -6.830080160870e-03 + 5.928000000000e-10 1.495407150967e-01 + 6.028000000000e-10 2.424570295697e-01 + 6.128000000000e-10 2.772066160972e-01 + 6.228000000000e-10 3.166654934082e-01 + 6.328000000000e-10 3.659723864247e-01 + 6.428000000000e-10 4.074416211051e-01 + 6.528000000000e-10 4.212697301261e-01 + 6.628000000000e-10 3.549467093259e-01 + 6.728000000000e-10 1.947718238583e-01 + 6.828000000000e-10 6.800951177238e-03 + 6.928000000000e-10 -1.495148390529e-01 + 7.028000000000e-10 -2.424852043575e-01 + 7.128000000000e-10 -2.771809105751e-01 + 7.228000000000e-10 -3.166930947909e-01 + 7.328000000000e-10 -3.659459016360e-01 + 7.428000000000e-10 -4.074677461547e-01 + 7.528000000000e-10 -4.212442717757e-01 + 7.628000000000e-10 -3.549717520551e-01 + 7.728000000000e-10 -1.947463263521e-01 + 7.828000000000e-10 -6.825916545420e-03 + 7.928000000000e-10 1.495385751436e-01 + 8.028000000000e-10 2.424609931904e-01 + 8.128000000000e-10 2.772040406871e-01 + 8.228000000000e-10 3.166687905139e-01 + 8.328000000000e-10 3.659694951712e-01 + 8.428000000000e-10 4.074447010218e-01 + 8.528000000000e-10 4.212671408417e-01 + 8.628000000000e-10 3.549498827484e-01 + 8.728000000000e-10 1.947689363825e-01 + 8.828000000000e-10 6.803756635994e-03 + 8.928000000000e-10 -1.495176738691e-01 + 9.028000000000e-10 -2.424825342063e-01 + 9.128000000000e-10 -2.771836734306e-01 + 9.228000000000e-10 -3.166902103892e-01 + 9.328000000000e-10 -3.659485359213e-01 + 9.428000000000e-10 -4.074650210911e-01 + 9.528000000000e-10 -4.212469657833e-01 + 9.628000000000e-10 -3.549694058275e-01 + 9.728000000000e-10 -1.947487958951e-01 + 9.828000000000e-10 -6.823236278537e-03 + 9.928000000000e-10 1.495363177485e-01 + 1.000000000000e-09 2.250264100511e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/conditions.yaml new file mode 100644 index 00000000..8d006303 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 9 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_09 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/CML_core_tb.sch new file mode 100644 index 00000000..20c807f5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/CML_core_tb_10.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/CML_core_tb_10.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/CML_core_tb_10.data new file mode 100644 index 00000000..f64d27bb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/CML_core_tb_10.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.621881537650e-01 + 1.728000000000e-10 -1.984429143572e-01 + 1.828000000000e-10 -1.024381876325e-02 + 1.928000000000e-10 1.456486678579e-01 + 2.028000000000e-10 2.379497773075e-01 + 2.128000000000e-10 2.714724605336e-01 + 2.228000000000e-10 3.108042897090e-01 + 2.328000000000e-10 3.600441003378e-01 + 2.428000000000e-10 4.020596908788e-01 + 2.528000000000e-10 4.176332246346e-01 + 2.628000000000e-10 3.534480183483e-01 + 2.728000000000e-10 1.957884716864e-01 + 2.828000000000e-10 1.048070619246e-02 + 2.928000000000e-10 -1.446967472000e-01 + 3.028000000000e-10 -2.375576326508e-01 + 3.128000000000e-10 -2.717915022579e-01 + 3.228000000000e-10 -3.116603869888e-01 + 3.328000000000e-10 -3.608573425706e-01 + 3.428000000000e-10 -4.027490548925e-01 + 3.528000000000e-10 -4.178578104758e-01 + 3.628000000000e-10 -3.532507313188e-01 + 3.728000000000e-10 -1.951536666098e-01 + 3.828000000000e-10 -9.813336101525e-03 + 3.928000000000e-10 1.453604720604e-01 + 4.028000000000e-10 2.379857130154e-01 + 4.128000000000e-10 2.721818635676e-01 + 4.228000000000e-10 3.119088225778e-01 + 4.328000000000e-10 3.611475798924e-01 + 4.428000000000e-10 4.029304727738e-01 + 4.528000000000e-10 4.180700216423e-01 + 4.628000000000e-10 3.533627988360e-01 + 4.728000000000e-10 1.953149158213e-01 + 4.828000000000e-10 9.881134950277e-03 + 4.928000000000e-10 -1.452466419838e-01 + 5.028000000000e-10 -2.379576224969e-01 + 5.128000000000e-10 -2.720935242692e-01 + 5.228000000000e-10 -3.118909714313e-01 + 5.328000000000e-10 -3.610674239906e-01 + 5.428000000000e-10 -4.029229661263e-01 + 5.528000000000e-10 -4.180098057029e-01 + 5.628000000000e-10 -3.533753449283e-01 + 5.728000000000e-10 -1.952727841385e-01 + 5.828000000000e-10 -9.906008920915e-03 + 5.928000000000e-10 1.452800172029e-01 + 6.028000000000e-10 2.379306740359e-01 + 6.128000000000e-10 2.721261300904e-01 + 6.228000000000e-10 3.118646486801e-01 + 6.328000000000e-10 3.611003417151e-01 + 6.428000000000e-10 4.028972890619e-01 + 6.528000000000e-10 4.180401129989e-01 + 6.628000000000e-10 3.533488930459e-01 + 6.728000000000e-10 1.953007885397e-01 + 6.828000000000e-10 9.878072761317e-03 + 6.928000000000e-10 -1.452545395230e-01 + 7.028000000000e-10 -2.379578117562e-01 + 7.128000000000e-10 -2.721008877684e-01 + 7.228000000000e-10 -3.118914026492e-01 + 7.328000000000e-10 -3.610744602697e-01 + 7.428000000000e-10 -4.029226014194e-01 + 7.528000000000e-10 -4.180151483436e-01 + 7.628000000000e-10 -3.533732531474e-01 + 7.728000000000e-10 -1.952759500525e-01 + 7.828000000000e-10 -9.902411226855e-03 + 7.928000000000e-10 1.452776462046e-01 + 8.028000000000e-10 2.379341379884e-01 + 8.128000000000e-10 2.721234101956e-01 + 8.228000000000e-10 3.118677116052e-01 + 8.328000000000e-10 3.610975209728e-01 + 8.428000000000e-10 4.029000595077e-01 + 8.528000000000e-10 4.180375331400e-01 + 8.628000000000e-10 3.533517750284e-01 + 8.728000000000e-10 1.952981248182e-01 + 8.828000000000e-10 9.880873061622e-03 + 8.928000000000e-10 -1.452571579233e-01 + 9.028000000000e-10 -2.379551078725e-01 + 9.128000000000e-10 -2.721034614056e-01 + 9.228000000000e-10 -3.118886463518e-01 + 9.328000000000e-10 -3.610770519544e-01 + 9.428000000000e-10 -4.029199107687e-01 + 9.528000000000e-10 -4.180177452829e-01 + 9.628000000000e-10 -3.533708821878e-01 + 9.728000000000e-10 -1.952784134813e-01 + 9.828000000000e-10 -9.899898542678e-03 + 9.928000000000e-10 1.452754037376e-01 + 1.000000000000e-09 2.207322871295e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/conditions.yaml new file mode 100644 index 00000000..222dc9c0 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 10 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_10 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/CML_core_tb.sch new file mode 100644 index 00000000..42c7f15e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/CML_core_tb_11.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/CML_core_tb_11.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/CML_core_tb_11.data new file mode 100644 index 00000000..1453012b --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/CML_core_tb_11.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.668500025046e-01 + 1.728000000000e-10 -1.978704758130e-01 + 1.828000000000e-10 -3.069550951996e-03 + 1.928000000000e-10 1.561389387989e-01 + 2.028000000000e-10 2.488697408913e-01 + 2.128000000000e-10 2.833379270136e-01 + 2.228000000000e-10 3.221467647695e-01 + 2.328000000000e-10 3.723176028273e-01 + 2.428000000000e-10 4.147931582649e-01 + 2.528000000000e-10 4.286646301121e-01 + 2.628000000000e-10 3.614677855799e-01 + 2.728000000000e-10 1.982726052647e-01 + 2.828000000000e-10 5.580533140739e-03 + 2.928000000000e-10 -1.536551403474e-01 + 3.028000000000e-10 -2.474729097395e-01 + 3.128000000000e-10 -2.827981749211e-01 + 3.228000000000e-10 -3.222400643179e-01 + 3.328000000000e-10 -3.724510578191e-01 + 3.428000000000e-10 -4.149487937489e-01 + 3.528000000000e-10 -4.285094572794e-01 + 3.628000000000e-10 -3.610716711123e-01 + 3.728000000000e-10 -1.975613483211e-01 + 3.828000000000e-10 -4.936396792217e-03 + 3.928000000000e-10 1.542720670721e-01 + 4.028000000000e-10 2.478554934965e-01 + 4.128000000000e-10 2.831768205427e-01 + 4.228000000000e-10 3.224764565266e-01 + 4.328000000000e-10 3.727376628527e-01 + 4.428000000000e-10 4.151128450004e-01 + 4.528000000000e-10 4.287030398326e-01 + 4.628000000000e-10 3.611465460996e-01 + 4.728000000000e-10 1.976871290976e-01 + 4.828000000000e-10 4.962067120498e-03 + 4.928000000000e-10 -1.541857483448e-01 + 5.028000000000e-10 -2.478549856990e-01 + 5.128000000000e-10 -2.831031432303e-01 + 5.228000000000e-10 -3.224786212940e-01 + 5.328000000000e-10 -3.726675199031e-01 + 5.428000000000e-10 -4.151222726988e-01 + 5.528000000000e-10 -4.286496175832e-01 + 5.628000000000e-10 -3.611719348809e-01 + 5.728000000000e-10 -1.976471175954e-01 + 5.828000000000e-10 -4.995016715658e-03 + 5.928000000000e-10 1.542195273485e-01 + 6.028000000000e-10 2.478226151197e-01 + 6.128000000000e-10 2.831371441394e-01 + 6.228000000000e-10 3.224465270882e-01 + 6.328000000000e-10 3.727020829784e-01 + 6.428000000000e-10 4.150919188021e-01 + 6.528000000000e-10 4.286821395136e-01 + 6.628000000000e-10 3.611419365066e-01 + 6.728000000000e-10 1.976777927703e-01 + 6.828000000000e-10 4.963507878799e-03 + 6.928000000000e-10 -1.541913949207e-01 + 7.028000000000e-10 -2.478529800499e-01 + 7.128000000000e-10 -2.831092109235e-01 + 7.228000000000e-10 -3.224762894768e-01 + 7.328000000000e-10 -3.726728668334e-01 + 7.428000000000e-10 -4.151201370880e-01 + 7.528000000000e-10 -4.286543531433e-01 + 7.628000000000e-10 -3.611692599178e-01 + 7.728000000000e-10 -1.976499135935e-01 + 7.828000000000e-10 -4.990471824028e-03 + 7.928000000000e-10 1.542171227717e-01 + 8.028000000000e-10 2.478269854332e-01 + 8.128000000000e-10 2.831343470853e-01 + 8.228000000000e-10 3.224500362551e-01 + 8.328000000000e-10 3.726987138014e-01 + 8.428000000000e-10 4.150953468135e-01 + 8.528000000000e-10 4.286792233560e-01 + 8.628000000000e-10 3.611455588852e-01 + 8.728000000000e-10 1.976743961081e-01 + 8.828000000000e-10 4.966432661841e-03 + 8.928000000000e-10 -1.541946484524e-01 + 9.028000000000e-10 -2.478502288236e-01 + 9.128000000000e-10 -2.831123474050e-01 + 9.228000000000e-10 -3.224731331421e-01 + 9.328000000000e-10 -3.726757720747e-01 + 9.428000000000e-10 -4.151172388981e-01 + 9.528000000000e-10 -4.286573581279e-01 + 9.628000000000e-10 -3.611667698498e-01 + 9.728000000000e-10 -1.976525646923e-01 + 9.828000000000e-10 -4.987471597641e-03 + 9.928000000000e-10 1.542147143463e-01 + 1.000000000000e-09 2.301006397866e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/conditions.yaml new file mode 100644 index 00000000..dbc7a355 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 11 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_11 +temperature: '-40' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/CML_core_tb.sch new file mode 100644 index 00000000..aa6c02de --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/CML_core_tb_12.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/CML_core_tb_12.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/CML_core_tb_12.data new file mode 100644 index 00000000..3b0782c6 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/CML_core_tb_12.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.388323931118e-01 + 1.728000000000e-10 -1.851651732117e-01 + 1.828000000000e-10 -4.985209728467e-03 + 1.928000000000e-10 1.464303664236e-01 + 2.028000000000e-10 2.390890865534e-01 + 2.128000000000e-10 2.778147857521e-01 + 2.228000000000e-10 3.140298283994e-01 + 2.328000000000e-10 3.564486269316e-01 + 2.428000000000e-10 3.920777300126e-01 + 2.528000000000e-10 4.026431485981e-01 + 2.628000000000e-10 3.407818057760e-01 + 2.728000000000e-10 1.919413521399e-01 + 2.828000000000e-10 1.380608162301e-02 + 2.928000000000e-10 -1.377275777470e-01 + 3.028000000000e-10 -2.320727525709e-01 + 3.128000000000e-10 -2.723718882130e-01 + 3.228000000000e-10 -3.097195919600e-01 + 3.328000000000e-10 -3.525356430610e-01 + 3.428000000000e-10 -3.885938438581e-01 + 3.528000000000e-10 -3.995683250409e-01 + 3.628000000000e-10 -3.382392747069e-01 + 3.728000000000e-10 -1.897685835172e-01 + 3.828000000000e-10 -1.211190537496e-02 + 3.928000000000e-10 1.391365825109e-01 + 4.028000000000e-10 2.331433172305e-01 + 4.128000000000e-10 2.733678679410e-01 + 4.228000000000e-10 3.105714733021e-01 + 4.328000000000e-10 3.533708758772e-01 + 4.428000000000e-10 3.892622592719e-01 + 4.528000000000e-10 4.001272859757e-01 + 4.628000000000e-10 3.385642563623e-01 + 4.728000000000e-10 1.899916781684e-01 + 4.828000000000e-10 1.218033620775e-02 + 4.928000000000e-10 -1.390656421002e-01 + 5.028000000000e-10 -2.331398693887e-01 + 5.128000000000e-10 -2.733037181082e-01 + 5.228000000000e-10 -3.105518491305e-01 + 5.328000000000e-10 -3.533032068815e-01 + 5.428000000000e-10 -3.892531494066e-01 + 5.528000000000e-10 -4.000849100741e-01 + 5.628000000000e-10 -3.385845178207e-01 + 5.728000000000e-10 -1.899774211598e-01 + 5.828000000000e-10 -1.221996984529e-02 + 5.928000000000e-10 1.390720456320e-01 + 6.028000000000e-10 2.331027694491e-01 + 6.128000000000e-10 2.733156842718e-01 + 6.228000000000e-10 3.105197170718e-01 + 6.328000000000e-10 3.533171034352e-01 + 6.428000000000e-10 3.892243222051e-01 + 6.528000000000e-10 4.000997182403e-01 + 6.628000000000e-10 3.385594083538e-01 + 6.728000000000e-10 1.899934277570e-01 + 6.828000000000e-10 1.219466050150e-02 + 6.928000000000e-10 -1.390553921853e-01 + 7.028000000000e-10 -2.331263672195e-01 + 7.128000000000e-10 -2.732987102222e-01 + 7.228000000000e-10 -3.105421090081e-01 + 7.328000000000e-10 -3.532994962925e-01 + 7.428000000000e-10 -3.892451651423e-01 + 7.528000000000e-10 -4.000824543639e-01 + 7.628000000000e-10 -3.385783830881e-01 + 7.728000000000e-10 -1.899748483052e-01 + 7.828000000000e-10 -1.221334688082e-02 + 7.928000000000e-10 1.390733351530e-01 + 8.028000000000e-10 2.331082732353e-01 + 8.128000000000e-10 2.733160005972e-01 + 8.228000000000e-10 3.105237742784e-01 + 8.328000000000e-10 3.533165556732e-01 + 8.428000000000e-10 3.892279285214e-01 + 8.528000000000e-10 4.000991009611e-01 + 8.628000000000e-10 3.385625511294e-01 + 8.728000000000e-10 1.899914169425e-01 + 8.828000000000e-10 1.219669858142e-02 + 8.928000000000e-10 -1.390576717936e-01 + 9.028000000000e-10 -2.331245304799e-01 + 9.128000000000e-10 -2.733009677599e-01 + 9.228000000000e-10 -3.105397739050e-01 + 9.328000000000e-10 -3.533012749995e-01 + 9.428000000000e-10 -3.892430673555e-01 + 9.528000000000e-10 -4.000844420176e-01 + 9.628000000000e-10 -3.385768441038e-01 + 9.728000000000e-10 -1.899764612955e-01 + 9.828000000000e-10 -1.221122328152e-02 + 9.928000000000e-10 1.390717643268e-01 + 1.000000000000e-09 2.142511381663e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/conditions.yaml new file mode 100644 index 00000000..5f8f23e4 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 12 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_12 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/CML_core_tb.sch new file mode 100644 index 00000000..e15707be --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/CML_core_tb_13.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/CML_core_tb_13.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/CML_core_tb_13.data new file mode 100644 index 00000000..36de6040 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/CML_core_tb_13.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.406999838743e-01 + 1.728000000000e-10 -1.879936990253e-01 + 1.828000000000e-10 -9.262901303246e-03 + 1.928000000000e-10 1.413611635485e-01 + 2.028000000000e-10 2.336775345801e-01 + 2.128000000000e-10 2.717294842894e-01 + 2.228000000000e-10 3.082620487639e-01 + 2.328000000000e-10 3.509422339502e-01 + 2.428000000000e-10 3.871053596645e-01 + 2.528000000000e-10 3.988940820744e-01 + 2.628000000000e-10 3.384312270542e-01 + 2.728000000000e-10 1.913281233779e-01 + 2.828000000000e-10 1.537343295661e-02 + 2.928000000000e-10 -1.347916275204e-01 + 3.028000000000e-10 -2.283419665374e-01 + 3.128000000000e-10 -2.677291408127e-01 + 3.228000000000e-10 -3.052231075401e-01 + 3.328000000000e-10 -3.481601477547e-01 + 3.428000000000e-10 -3.845854123080e-01 + 3.528000000000e-10 -3.965379624605e-01 + 3.628000000000e-10 -3.363314255870e-01 + 3.728000000000e-10 -1.893723794407e-01 + 3.828000000000e-10 -1.375643865463e-02 + 3.928000000000e-10 1.361849816757e-01 + 4.028000000000e-10 2.294005939140e-01 + 4.128000000000e-10 2.686949729273e-01 + 4.228000000000e-10 3.060328157788e-01 + 4.328000000000e-10 3.489590274886e-01 + 4.428000000000e-10 3.852266672724e-01 + 4.528000000000e-10 3.970921187630e-01 + 4.628000000000e-10 3.366736237881e-01 + 4.728000000000e-10 1.896320772426e-01 + 4.828000000000e-10 1.386475371506e-02 + 4.928000000000e-10 -1.360753156283e-01 + 5.028000000000e-10 -2.293675908871e-01 + 5.128000000000e-10 -2.686062530832e-01 + 5.228000000000e-10 -3.059945800423e-01 + 5.328000000000e-10 -3.488729675224e-01 + 5.428000000000e-10 -3.852026785029e-01 + 5.528000000000e-10 -3.970350594993e-01 + 5.628000000000e-10 -3.366834486256e-01 + 5.728000000000e-10 -1.896077423819e-01 + 5.828000000000e-10 -1.389840122586e-02 + 5.928000000000e-10 1.360876217327e-01 + 6.028000000000e-10 2.293336021557e-01 + 6.128000000000e-10 2.686225622920e-01 + 6.228000000000e-10 3.059648098566e-01 + 6.328000000000e-10 3.488907093130e-01 + 6.428000000000e-10 3.851753633828e-01 + 6.528000000000e-10 3.970526526302e-01 + 6.628000000000e-10 3.366583891048e-01 + 6.728000000000e-10 1.896251667832e-01 + 6.828000000000e-10 1.387242911077e-02 + 6.928000000000e-10 -1.360702314024e-01 + 7.028000000000e-10 -2.293580006158e-01 + 7.128000000000e-10 -2.686047945045e-01 + 7.228000000000e-10 -3.059879182353e-01 + 7.328000000000e-10 -3.488722408399e-01 + 7.428000000000e-10 -3.851969589401e-01 + 7.528000000000e-10 -3.970345404264e-01 + 7.628000000000e-10 -3.366782708831e-01 + 7.728000000000e-10 -1.896058621860e-01 + 7.828000000000e-10 -1.389192450355e-02 + 7.928000000000e-10 1.360888260036e-01 + 8.028000000000e-10 2.293391038565e-01 + 8.128000000000e-10 2.686227634282e-01 + 8.228000000000e-10 3.059688096850e-01 + 8.328000000000e-10 3.488900661997e-01 + 8.428000000000e-10 3.851789257250e-01 + 8.528000000000e-10 3.970519764807e-01 + 8.628000000000e-10 3.366616134215e-01 + 8.728000000000e-10 1.896231972496e-01 + 8.828000000000e-10 1.387461571983e-02 + 8.928000000000e-10 -1.360724758723e-01 + 9.028000000000e-10 -2.293560182270e-01 + 9.128000000000e-10 -2.686070528237e-01 + 9.228000000000e-10 -3.059854790954e-01 + 9.328000000000e-10 -3.488740842624e-01 + 9.428000000000e-10 -3.851947329758e-01 + 9.528000000000e-10 -3.970365843841e-01 + 9.628000000000e-10 -3.366766115599e-01 + 9.728000000000e-10 -1.896075309897e-01 + 9.828000000000e-10 -1.388973786858e-02 + 9.928000000000e-10 1.360872156510e-01 + 1.000000000000e-09 2.108297225004e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/conditions.yaml new file mode 100644 index 00000000..1d24dad2 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 13 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_13 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/CML_core_tb.sch new file mode 100644 index 00000000..ff1a3bda --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/CML_core_tb_14.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/CML_core_tb_14.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/CML_core_tb_14.data new file mode 100644 index 00000000..73c31d13 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/CML_core_tb_14.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.445927026449e-01 + 1.728000000000e-10 -1.889320969581e-01 + 1.828000000000e-10 -5.355234564888e-03 + 1.928000000000e-10 1.489911128277e-01 + 2.028000000000e-10 2.434822449071e-01 + 2.128000000000e-10 2.838702060450e-01 + 2.228000000000e-10 3.202156401988e-01 + 2.328000000000e-10 3.629401474789e-01 + 2.428000000000e-10 3.990998051164e-01 + 2.528000000000e-10 4.099063275401e-01 + 2.628000000000e-10 3.477923521709e-01 + 2.728000000000e-10 1.968519788675e-01 + 2.828000000000e-10 1.493750763318e-02 + 2.928000000000e-10 -1.398437743336e-01 + 3.028000000000e-10 -2.362338093992e-01 + 3.128000000000e-10 -2.782887085314e-01 + 3.228000000000e-10 -3.158910292643e-01 + 3.328000000000e-10 -3.590893499920e-01 + 3.428000000000e-10 -3.957248346768e-01 + 3.528000000000e-10 -4.069627998073e-01 + 3.628000000000e-10 -3.454070734708e-01 + 3.728000000000e-10 -1.948243362004e-01 + 3.828000000000e-10 -1.337926088934e-02 + 3.928000000000e-10 1.411472162204e-01 + 4.028000000000e-10 2.372231231196e-01 + 4.128000000000e-10 2.792284454069e-01 + 4.228000000000e-10 3.166817589057e-01 + 4.328000000000e-10 3.598702175634e-01 + 4.428000000000e-10 3.963375250752e-01 + 4.528000000000e-10 4.074753309124e-01 + 4.628000000000e-10 3.456854225481e-01 + 4.728000000000e-10 1.950177434222e-01 + 4.828000000000e-10 1.342430394201e-02 + 4.928000000000e-10 -1.410850608466e-01 + 5.028000000000e-10 -2.372286880899e-01 + 5.128000000000e-10 -2.791659662153e-01 + 5.228000000000e-10 -3.166689293508e-01 + 5.328000000000e-10 -3.598026374101e-01 + 5.428000000000e-10 -3.963331138013e-01 + 5.528000000000e-10 -4.074316676804e-01 + 5.628000000000e-10 -3.457088001737e-01 + 5.728000000000e-10 -1.950000158899e-01 + 5.828000000000e-10 -1.346504722293e-02 + 5.928000000000e-10 1.410957635246e-01 + 6.028000000000e-10 2.371909425038e-01 + 6.128000000000e-10 2.791817404178e-01 + 6.228000000000e-10 3.166356138828e-01 + 6.328000000000e-10 3.598203377806e-01 + 6.428000000000e-10 3.963033609435e-01 + 6.528000000000e-10 4.074499160221e-01 + 6.628000000000e-10 3.456826167292e-01 + 6.728000000000e-10 1.950190841630e-01 + 6.828000000000e-10 1.343803454206e-02 + 6.928000000000e-10 -1.410764950259e-01 + 7.028000000000e-10 -2.372163265848e-01 + 7.128000000000e-10 -2.791624229651e-01 + 7.228000000000e-10 -3.166599225368e-01 + 7.328000000000e-10 -3.598002455584e-01 + 7.428000000000e-10 -3.963259615583e-01 + 7.528000000000e-10 -4.074304662079e-01 + 7.628000000000e-10 -3.457033629648e-01 + 7.728000000000e-10 -1.949983704767e-01 + 7.828000000000e-10 -1.345872104163e-02 + 7.928000000000e-10 1.410962716693e-01 + 8.028000000000e-10 2.371963808526e-01 + 8.128000000000e-10 2.791814500218e-01 + 8.228000000000e-10 3.166396456569e-01 + 8.328000000000e-10 3.598191409746e-01 + 8.428000000000e-10 3.963069790813e-01 + 8.528000000000e-10 4.074488078929e-01 + 8.628000000000e-10 3.456858987705e-01 + 8.728000000000e-10 1.950166421641e-01 + 8.828000000000e-10 1.344025602045e-02 + 8.928000000000e-10 -1.410790665154e-01 + 9.028000000000e-10 -2.372142995262e-01 + 9.128000000000e-10 -2.791649325552e-01 + 9.228000000000e-10 -3.166573514474e-01 + 9.328000000000e-10 -3.598022359716e-01 + 9.428000000000e-10 -3.963236588924e-01 + 9.528000000000e-10 -4.074326778223e-01 + 9.628000000000e-10 -3.457016440453e-01 + 9.728000000000e-10 -1.950001702792e-01 + 9.828000000000e-10 -1.345633761364e-02 + 9.928000000000e-10 1.410945129066e-01 + 1.000000000000e-09 2.176807579100e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/conditions.yaml new file mode 100644 index 00000000..c8e12cf0 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 14 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_14 +temperature: '27' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/CML_core_tb.sch new file mode 100644 index 00000000..6f66df42 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/CML_core_tb_15.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/CML_core_tb_15.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/CML_core_tb_15.data new file mode 100644 index 00000000..6f87c434 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/CML_core_tb_15.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.831577979118e-01 + 1.728000000000e-10 -1.548331321524e-01 + 1.828000000000e-10 2.954507991941e-03 + 1.928000000000e-10 1.412083661187e-01 + 2.028000000000e-10 2.303947789211e-01 + 2.128000000000e-10 2.725788032239e-01 + 2.228000000000e-10 3.064646814943e-01 + 2.328000000000e-10 3.412898568956e-01 + 2.428000000000e-10 3.692979025942e-01 + 2.528000000000e-10 3.751979264520e-01 + 2.628000000000e-10 3.186495551608e-01 + 2.728000000000e-10 1.849115684226e-01 + 2.828000000000e-10 2.146912258403e-02 + 2.928000000000e-10 -1.215319416200e-01 + 3.028000000000e-10 -2.147336364713e-01 + 3.128000000000e-10 -2.593628319189e-01 + 3.228000000000e-10 -2.947919001104e-01 + 3.328000000000e-10 -3.306034656465e-01 + 3.428000000000e-10 -3.598903423599e-01 + 3.528000000000e-10 -3.674806029527e-01 + 3.628000000000e-10 -3.131864519443e-01 + 3.728000000000e-10 -1.816607205648e-01 + 3.828000000000e-10 -2.002885045896e-02 + 3.928000000000e-10 1.219326732879e-01 + 4.028000000000e-10 2.146583452252e-01 + 4.128000000000e-10 2.593288859790e-01 + 4.228000000000e-10 2.947836961551e-01 + 4.328000000000e-10 3.305873089453e-01 + 4.428000000000e-10 3.597520160348e-01 + 4.528000000000e-10 3.672634041173e-01 + 4.628000000000e-10 3.128292575731e-01 + 4.728000000000e-10 1.812525079401e-01 + 4.828000000000e-10 1.956255085056e-02 + 4.928000000000e-10 -1.223539241893e-01 + 5.028000000000e-10 -2.150587893921e-01 + 5.128000000000e-10 -2.596440912838e-01 + 5.228000000000e-10 -2.950896959018e-01 + 5.328000000000e-10 -3.308452440946e-01 + 5.428000000000e-10 -3.600168265621e-01 + 5.528000000000e-10 -3.674687038170e-01 + 5.628000000000e-10 -3.130140501398e-01 + 5.728000000000e-10 -1.813584327872e-01 + 5.828000000000e-10 -1.965159115909e-02 + 5.928000000000e-10 1.223212864923e-01 + 6.028000000000e-10 2.150157103205e-01 + 6.128000000000e-10 2.596318060931e-01 + 6.228000000000e-10 2.950524078153e-01 + 6.328000000000e-10 3.308363963911e-01 + 6.428000000000e-10 3.599874022300e-01 + 6.528000000000e-10 3.674690181116e-01 + 6.628000000000e-10 3.129980588961e-01 + 6.728000000000e-10 1.813712653368e-01 + 6.828000000000e-10 1.964491680526e-02 + 6.928000000000e-10 -1.223023112353e-01 + 7.028000000000e-10 -2.150202483004e-01 + 7.128000000000e-10 -2.596144309164e-01 + 7.228000000000e-10 -2.950582886643e-01 + 7.328000000000e-10 -3.308199600200e-01 + 7.428000000000e-10 -3.599931640339e-01 + 7.528000000000e-10 -3.674538095645e-01 + 7.628000000000e-10 -3.130042913922e-01 + 7.728000000000e-10 -1.813570925598e-01 + 7.828000000000e-10 -1.965290666609e-02 + 7.928000000000e-10 1.223145971689e-01 + 8.028000000000e-10 2.150114430495e-01 + 8.128000000000e-10 2.596256780136e-01 + 8.228000000000e-10 2.950490452158e-01 + 8.328000000000e-10 3.308307530718e-01 + 8.428000000000e-10 3.599842799802e-01 + 8.528000000000e-10 3.674639698479e-01 + 8.628000000000e-10 3.129957925611e-01 + 8.728000000000e-10 1.813666711568e-01 + 8.828000000000e-10 1.964348030724e-02 + 8.928000000000e-10 -1.223056361887e-01 + 9.028000000000e-10 -2.150207890100e-01 + 9.128000000000e-10 -2.596171721225e-01 + 9.228000000000e-10 -2.950581404305e-01 + 9.328000000000e-10 -3.308221104591e-01 + 9.428000000000e-10 -3.599929167296e-01 + 9.528000000000e-10 -3.674557320782e-01 + 9.628000000000e-10 -3.130039671541e-01 + 9.728000000000e-10 -1.813582011282e-01 + 9.828000000000e-10 -1.965175786777e-02 + 9.928000000000e-10 1.223137237372e-01 + 1.000000000000e-09 1.953703252853e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/conditions.yaml new file mode 100644 index 00000000..e829ebf8 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 15 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_15 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/CML_core_tb.sch new file mode 100644 index 00000000..7ae2f531 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/CML_core_tb_16.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/CML_core_tb_16.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/CML_core_tb_16.data new file mode 100644 index 00000000..c0c44c66 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/CML_core_tb_16.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.908214410229e-01 + 1.728000000000e-10 -1.609006026552e-01 + 1.828000000000e-10 -2.321243117629e-03 + 1.928000000000e-10 1.363185315112e-01 + 2.028000000000e-10 2.253864999197e-01 + 2.128000000000e-10 2.667546328680e-01 + 2.228000000000e-10 3.007016001191e-01 + 2.328000000000e-10 3.359037685855e-01 + 2.428000000000e-10 3.646369081917e-01 + 2.528000000000e-10 3.717564842409e-01 + 2.628000000000e-10 3.164681086559e-01 + 2.728000000000e-10 1.842122200319e-01 + 2.828000000000e-10 2.261788955655e-02 + 2.928000000000e-10 -1.190364341005e-01 + 3.028000000000e-10 -2.112326750882e-01 + 3.128000000000e-10 -2.547832728498e-01 + 3.228000000000e-10 -2.901354995194e-01 + 3.328000000000e-10 -3.261256516764e-01 + 3.428000000000e-10 -3.558916364396e-01 + 3.528000000000e-10 -3.643768878587e-01 + 3.628000000000e-10 -3.109660871267e-01 + 3.728000000000e-10 -1.806005122430e-01 + 3.828000000000e-10 -2.063463882859e-02 + 3.928000000000e-10 1.200417121301e-01 + 4.028000000000e-10 2.117115066678e-01 + 4.128000000000e-10 2.552245954862e-01 + 4.228000000000e-10 2.905358174314e-01 + 4.328000000000e-10 3.264964127076e-01 + 4.428000000000e-10 3.561164409890e-01 + 4.528000000000e-10 3.644937527082e-01 + 4.628000000000e-10 3.108863598347e-01 + 4.728000000000e-10 1.804066968471e-01 + 4.828000000000e-10 2.031749353463e-02 + 4.928000000000e-10 -1.203543467152e-01 + 5.028000000000e-10 -2.120338656010e-01 + 5.128000000000e-10 -2.554694201182e-01 + 5.228000000000e-10 -2.907816217466e-01 + 5.328000000000e-10 -3.266973931907e-01 + 5.428000000000e-10 -3.563354715244e-01 + 5.528000000000e-10 -3.646612654323e-01 + 5.628000000000e-10 -3.110514282819e-01 + 5.728000000000e-10 -1.805042989376e-01 + 5.828000000000e-10 -2.041198102925e-02 + 5.928000000000e-10 1.203139122453e-01 + 6.028000000000e-10 2.119789678115e-01 + 6.128000000000e-10 2.554499136191e-01 + 6.228000000000e-10 2.907352766216e-01 + 6.328000000000e-10 3.266827936599e-01 + 6.428000000000e-10 3.562972261563e-01 + 6.528000000000e-10 3.646559193667e-01 + 6.628000000000e-10 3.110272539685e-01 + 6.728000000000e-10 1.805126920434e-01 + 6.828000000000e-10 2.039901072518e-02 + 6.928000000000e-10 -1.202975671206e-01 + 7.028000000000e-10 -2.119881389434e-01 + 7.128000000000e-10 -2.554339974826e-01 + 7.228000000000e-10 -2.907449786827e-01 + 7.328000000000e-10 -3.266672756474e-01 + 7.428000000000e-10 -3.563063206496e-01 + 7.528000000000e-10 -3.646410588059e-01 + 7.628000000000e-10 -3.110359790738e-01 + 7.728000000000e-10 -1.804978632753e-01 + 7.828000000000e-10 -2.040852410596e-02 + 7.928000000000e-10 1.203110667878e-01 + 8.028000000000e-10 2.119781439274e-01 + 8.128000000000e-10 2.554465105638e-01 + 8.228000000000e-10 2.907345088651e-01 + 8.328000000000e-10 3.266793442083e-01 + 8.428000000000e-10 3.562962712815e-01 + 8.528000000000e-10 3.646525269207e-01 + 8.628000000000e-10 3.110264147595e-01 + 8.728000000000e-10 1.805087495738e-01 + 8.828000000000e-10 2.039807927138e-02 + 8.928000000000e-10 -1.203008828088e-01 + 9.028000000000e-10 -2.119885143169e-01 + 9.128000000000e-10 -2.554368509477e-01 + 9.228000000000e-10 -2.907446372900e-01 + 9.328000000000e-10 -3.266695427412e-01 + 9.428000000000e-10 -3.563059183968e-01 + 9.528000000000e-10 -3.646431522847e-01 + 9.628000000000e-10 -3.110356032735e-01 + 9.728000000000e-10 -1.804991631480e-01 + 9.828000000000e-10 -2.040735001275e-02 + 9.928000000000e-10 1.203099974113e-01 + 1.000000000000e-09 1.927324868168e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/conditions.yaml new file mode 100644 index 00000000..88e4213c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 16 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_16 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/CML_core_tb.sch new file mode 100644 index 00000000..047a1eaf --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/CML_core_tb_17.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/CML_core_tb_17.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/CML_core_tb_17.data new file mode 100644 index 00000000..1e62d263 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/CML_core_tb_17.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.857852225245e-01 + 1.728000000000e-10 -1.572533595452e-01 + 1.828000000000e-10 2.540381659783e-03 + 1.928000000000e-10 1.434374080790e-01 + 2.028000000000e-10 2.351272809546e-01 + 2.128000000000e-10 2.797956268783e-01 + 2.228000000000e-10 3.144243918962e-01 + 2.328000000000e-10 3.493618787392e-01 + 2.428000000000e-10 3.773715695689e-01 + 2.528000000000e-10 3.831823569325e-01 + 2.628000000000e-10 3.264482498061e-01 + 2.728000000000e-10 1.910530045686e-01 + 2.828000000000e-10 2.436059711742e-02 + 2.928000000000e-10 -1.220220612332e-01 + 3.028000000000e-10 -2.180809390746e-01 + 3.128000000000e-10 -2.653775774444e-01 + 3.228000000000e-10 -3.017848824321e-01 + 3.328000000000e-10 -3.379021858146e-01 + 3.428000000000e-10 -3.673696540777e-01 + 3.528000000000e-10 -3.751149757425e-01 + 3.628000000000e-10 -3.209083740174e-01 + 3.728000000000e-10 -1.878979131572e-01 + 3.828000000000e-10 -2.307531260616e-02 + 3.928000000000e-10 1.222703025101e-01 + 4.028000000000e-10 2.179003509445e-01 + 4.128000000000e-10 2.652908784701e-01 + 4.228000000000e-10 3.017672646237e-01 + 4.328000000000e-10 3.378931599738e-01 + 4.428000000000e-10 3.672390198172e-01 + 4.528000000000e-10 3.748903812400e-01 + 4.628000000000e-10 3.205316331029e-01 + 4.728000000000e-10 1.874647700937e-01 + 4.828000000000e-10 2.258819957166e-02 + 4.928000000000e-10 -1.227112688171e-01 + 5.028000000000e-10 -2.183172764214e-01 + 5.128000000000e-10 -2.656203742551e-01 + 5.228000000000e-10 -3.020800906145e-01 + 5.328000000000e-10 -3.381553362553e-01 + 5.428000000000e-10 -3.675051891202e-01 + 5.528000000000e-10 -3.750972240389e-01 + 5.628000000000e-10 -3.207148935088e-01 + 5.728000000000e-10 -1.875700292984e-01 + 5.828000000000e-10 -2.267596999196e-02 + 5.928000000000e-10 1.226776663562e-01 + 6.028000000000e-10 2.182733434309e-01 + 6.128000000000e-10 2.656053081095e-01 + 6.228000000000e-10 3.020411985396e-01 + 6.328000000000e-10 3.381435634392e-01 + 6.428000000000e-10 3.674743818406e-01 + 6.528000000000e-10 3.750952532513e-01 + 6.628000000000e-10 3.206986438750e-01 + 6.728000000000e-10 1.875816736609e-01 + 6.828000000000e-10 2.266940437016e-02 + 6.928000000000e-10 -1.226596158426e-01 + 7.028000000000e-10 -2.182776851932e-01 + 7.128000000000e-10 -2.655888997029e-01 + 7.228000000000e-10 -3.020470638059e-01 + 7.328000000000e-10 -3.381282771084e-01 + 7.428000000000e-10 -3.674800981492e-01 + 7.528000000000e-10 -3.750811166601e-01 + 7.628000000000e-10 -3.207046174850e-01 + 7.728000000000e-10 -1.875682790354e-01 + 7.828000000000e-10 -2.267703281628e-02 + 7.928000000000e-10 1.226713327530e-01 + 8.028000000000e-10 2.182693863135e-01 + 8.128000000000e-10 2.655996099454e-01 + 8.228000000000e-10 3.020383466326e-01 + 8.328000000000e-10 3.381385294735e-01 + 8.428000000000e-10 3.674717742910e-01 + 8.528000000000e-10 3.750907045119e-01 + 8.628000000000e-10 3.206966644115e-01 + 8.728000000000e-10 1.875773616331e-01 + 8.828000000000e-10 2.266807684955e-02 + 8.928000000000e-10 -1.226628120211e-01 + 9.028000000000e-10 -2.182782381400e-01 + 9.128000000000e-10 -2.655915506047e-01 + 9.228000000000e-10 -3.020469590318e-01 + 9.328000000000e-10 -3.381303351991e-01 + 9.428000000000e-10 -3.674798958779e-01 + 9.528000000000e-10 -3.750829516380e-01 + 9.628000000000e-10 -3.207043265993e-01 + 9.728000000000e-10 -1.875693454762e-01 + 9.828000000000e-10 -2.267594148777e-02 + 9.928000000000e-10 1.226704651969e-01 + 1.000000000000e-09 1.977257563344e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/conditions.yaml new file mode 100644 index 00000000..69338d4c --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 17 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_17 +temperature: '80' +vdd: '1.2' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/CML_core_tb.sch new file mode 100644 index 00000000..31f675ce --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/CML_core_tb_18.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/CML_core_tb_18.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/CML_core_tb_18.data new file mode 100644 index 00000000..16422ca1 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/CML_core_tb_18.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.213526702696e-01 + 1.728000000000e-10 -1.557909441213e-01 + 1.828000000000e-10 3.476956205809e-02 + 1.928000000000e-10 1.811250151598e-01 + 2.028000000000e-10 2.596166993269e-01 + 2.128000000000e-10 2.853727091731e-01 + 2.228000000000e-10 3.254453264627e-01 + 2.328000000000e-10 3.792799604087e-01 + 2.428000000000e-10 4.176388066249e-01 + 2.528000000000e-10 4.205544301124e-01 + 2.628000000000e-10 3.463528198985e-01 + 2.728000000000e-10 1.792096076204e-01 + 2.828000000000e-10 -1.442396833933e-02 + 2.928000000000e-10 -1.649237711275e-01 + 3.028000000000e-10 -2.471596975948e-01 + 3.128000000000e-10 -2.748735614517e-01 + 3.228000000000e-10 -3.160128767795e-01 + 3.328000000000e-10 -3.707930594343e-01 + 3.428000000000e-10 -4.104823651943e-01 + 3.528000000000e-10 -4.153692056047e-01 + 3.628000000000e-10 -3.427931169871e-01 + 3.728000000000e-10 -1.769552164151e-01 + 3.828000000000e-10 1.590673093360e-02 + 3.928000000000e-10 1.658834812043e-01 + 4.028000000000e-10 2.479775600913e-01 + 4.128000000000e-10 2.756409688001e-01 + 4.228000000000e-10 3.168596600790e-01 + 4.328000000000e-10 3.715133147191e-01 + 4.428000000000e-10 4.111218222953e-01 + 4.528000000000e-10 4.157229971644e-01 + 4.628000000000e-10 3.430019798682e-01 + 4.728000000000e-10 1.769456026445e-01 + 4.828000000000e-10 -1.592886494610e-02 + 4.928000000000e-10 -1.659782283296e-01 + 5.028000000000e-10 -2.479947853664e-01 + 5.128000000000e-10 -2.756931315881e-01 + 5.228000000000e-10 -3.168416717549e-01 + 5.328000000000e-10 -3.715547211919e-01 + 5.428000000000e-10 -4.111034138799e-01 + 5.528000000000e-10 -4.157691346087e-01 + 5.628000000000e-10 -3.429925568898e-01 + 5.728000000000e-10 -1.770024985869e-01 + 5.828000000000e-10 1.592938202906e-02 + 5.928000000000e-10 1.659292038608e-01 + 6.028000000000e-10 2.480043512000e-01 + 6.128000000000e-10 2.756533285421e-01 + 6.228000000000e-10 3.168576585763e-01 + 6.328000000000e-10 3.715156583068e-01 + 6.428000000000e-10 4.111207690964e-01 + 6.528000000000e-10 4.157343976531e-01 + 6.628000000000e-10 3.430135347581e-01 + 6.728000000000e-10 1.769734665185e-01 + 6.828000000000e-10 -1.590652763180e-02 + 6.928000000000e-10 -1.659537152419e-01 + 7.028000000000e-10 -2.479812550746e-01 + 7.128000000000e-10 -2.756768834918e-01 + 7.228000000000e-10 -3.168350969677e-01 + 7.328000000000e-10 -3.715419152243e-01 + 7.428000000000e-10 -4.110983779981e-01 + 7.528000000000e-10 -4.157587194411e-01 + 7.628000000000e-10 -3.429901444601e-01 + 7.728000000000e-10 -1.769973775521e-01 + 7.828000000000e-10 1.592723735432e-02 + 7.928000000000e-10 1.659318535084e-01 + 8.028000000000e-10 2.480017799848e-01 + 8.128000000000e-10 2.756559811492e-01 + 8.228000000000e-10 3.168566227283e-01 + 8.328000000000e-10 3.715195500188e-01 + 8.428000000000e-10 4.111190536097e-01 + 8.528000000000e-10 4.157370668569e-01 + 8.628000000000e-10 3.430103710665e-01 + 8.728000000000e-10 1.769771675859e-01 + 8.828000000000e-10 -1.590770493918e-02 + 8.928000000000e-10 -1.659501582149e-01 + 9.028000000000e-10 -2.479827571068e-01 + 9.128000000000e-10 -2.756738772283e-01 + 9.228000000000e-10 -3.168377001445e-01 + 9.328000000000e-10 -3.715391180409e-01 + 9.428000000000e-10 -4.111007797151e-01 + 9.528000000000e-10 -4.157556639381e-01 + 9.628000000000e-10 -3.429919881202e-01 + 9.728000000000e-10 -1.769955652012e-01 + 9.828000000000e-10 1.592430721908e-02 + 9.928000000000e-10 1.659331850974e-01 + 1.000000000000e-09 2.332140069758e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/conditions.yaml new file mode 100644 index 00000000..a140860e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 18 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_18 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/CML_core_tb.sch new file mode 100644 index 00000000..b3d13ecf --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/CML_core_tb_19.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/CML_core_tb_19.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/CML_core_tb_19.data new file mode 100644 index 00000000..6e384890 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/CML_core_tb_19.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.162777317791e-01 + 1.728000000000e-10 -1.528661974147e-01 + 1.828000000000e-10 3.474832458294e-02 + 1.928000000000e-10 1.787124308466e-01 + 2.028000000000e-10 2.559986610902e-01 + 2.128000000000e-10 2.810767408313e-01 + 2.228000000000e-10 3.219404824571e-01 + 2.328000000000e-10 3.760375868322e-01 + 2.428000000000e-10 4.141294975409e-01 + 2.528000000000e-10 4.175370858756e-01 + 2.628000000000e-10 3.443891646085e-01 + 2.728000000000e-10 1.786024667409e-01 + 2.828000000000e-10 -1.272368439666e-02 + 2.928000000000e-10 -1.612661145276e-01 + 3.028000000000e-10 -2.425558656005e-01 + 3.128000000000e-10 -2.696709375544e-01 + 3.228000000000e-10 -3.115976016931e-01 + 3.328000000000e-10 -3.666762080522e-01 + 3.428000000000e-10 -4.062269757432e-01 + 3.528000000000e-10 -4.117682170104e-01 + 3.628000000000e-10 -3.403932990270e-01 + 3.728000000000e-10 -1.760595961534e-01 + 3.828000000000e-10 1.438676142530e-02 + 3.928000000000e-10 1.623380571180e-01 + 4.028000000000e-10 2.434588647096e-01 + 4.128000000000e-10 2.705169080514e-01 + 4.228000000000e-10 3.125303134845e-01 + 4.328000000000e-10 3.674735521527e-01 + 4.428000000000e-10 4.069324770669e-01 + 4.528000000000e-10 4.121668816011e-01 + 4.628000000000e-10 3.406314536055e-01 + 4.728000000000e-10 1.760592839129e-01 + 4.828000000000e-10 -1.440702618479e-02 + 4.928000000000e-10 -1.624387020945e-01 + 5.028000000000e-10 -2.434775787799e-01 + 5.128000000000e-10 -2.705727170369e-01 + 5.228000000000e-10 -3.125119373252e-01 + 5.328000000000e-10 -3.675184828947e-01 + 5.428000000000e-10 -4.069140356329e-01 + 5.528000000000e-10 -4.122173977207e-01 + 5.628000000000e-10 -3.406230488723e-01 + 5.728000000000e-10 -1.761225643375e-01 + 5.828000000000e-10 1.440482600394e-02 + 5.928000000000e-10 1.623840500109e-01 + 6.028000000000e-10 2.434858819416e-01 + 6.128000000000e-10 2.705285901327e-01 + 6.228000000000e-10 3.125279242462e-01 + 6.328000000000e-10 3.674758375852e-01 + 6.428000000000e-10 4.069313048189e-01 + 6.528000000000e-10 4.121794941223e-01 + 6.628000000000e-10 3.406442721772e-01 + 6.728000000000e-10 1.760913923029e-01 + 6.828000000000e-10 -1.438048626859e-02 + 6.928000000000e-10 -1.624102913298e-01 + 7.028000000000e-10 -2.434611919520e-01 + 7.128000000000e-10 -2.705537859875e-01 + 7.228000000000e-10 -3.125040211699e-01 + 7.328000000000e-10 -3.675038904367e-01 + 7.428000000000e-10 -4.069074652851e-01 + 7.528000000000e-10 -4.122054838885e-01 + 7.628000000000e-10 -3.406192567768e-01 + 7.728000000000e-10 -1.761170868219e-01 + 7.828000000000e-10 1.440247036537e-02 + 7.928000000000e-10 1.623867436405e-01 + 8.028000000000e-10 2.434830143217e-01 + 8.128000000000e-10 2.705312548291e-01 + 8.228000000000e-10 3.125271394700e-01 + 8.328000000000e-10 3.674800931307e-01 + 8.428000000000e-10 4.069295144266e-01 + 8.528000000000e-10 4.121823557439e-01 + 8.628000000000e-10 3.406407407456e-01 + 8.728000000000e-10 1.760956573916e-01 + 8.828000000000e-10 -1.438135361500e-02 + 8.928000000000e-10 -1.624062315135e-01 + 9.028000000000e-10 -2.434625084707e-01 + 9.128000000000e-10 -2.705503455528e-01 + 9.228000000000e-10 -3.125068466958e-01 + 9.328000000000e-10 -3.675009271833e-01 + 9.428000000000e-10 -4.069098943042e-01 + 9.528000000000e-10 -4.122022218921e-01 + 9.628000000000e-10 -3.406210058100e-01 + 9.728000000000e-10 -1.761154015725e-01 + 9.828000000000e-10 1.439913133121e-02 + 9.928000000000e-10 1.623879640093e-01 + 1.000000000000e-09 2.290402036537e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/conditions.yaml new file mode 100644 index 00000000..81fac9cf --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 19 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_19 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/CML_core_tb.sch new file mode 100644 index 00000000..0c1eba16 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/CML_core_tb_20.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp -40 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/CML_core_tb_20.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/CML_core_tb_20.data new file mode 100644 index 00000000..3dfcf241 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/CML_core_tb_20.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -3.365386572536e-01 + 1.728000000000e-10 -1.657072094068e-01 + 1.828000000000e-10 3.099865584261e-02 + 1.928000000000e-10 1.820426436768e-01 + 2.028000000000e-10 2.627018214462e-01 + 2.128000000000e-10 2.893736945719e-01 + 2.228000000000e-10 3.287984169352e-01 + 2.328000000000e-10 3.833334317825e-01 + 2.428000000000e-10 4.238785365972e-01 + 2.528000000000e-10 4.280322768716e-01 + 2.628000000000e-10 3.532409470363e-01 + 2.728000000000e-10 1.834641899168e-01 + 2.828000000000e-10 -1.474496205711e-02 + 2.928000000000e-10 -1.691349612478e-01 + 3.028000000000e-10 -2.530204867896e-01 + 3.128000000000e-10 -2.814070764654e-01 + 3.228000000000e-10 -3.218416847899e-01 + 3.328000000000e-10 -3.771799136100e-01 + 3.428000000000e-10 -4.187055626636e-01 + 3.528000000000e-10 -4.243036771430e-01 + 3.628000000000e-10 -3.506062035467e-01 + 3.728000000000e-10 -1.816763297909e-01 + 3.828000000000e-10 1.601938741723e-02 + 3.928000000000e-10 1.700087907901e-01 + 4.028000000000e-10 2.537596951165e-01 + 4.128000000000e-10 2.820887501770e-01 + 4.228000000000e-10 3.225625541805e-01 + 4.328000000000e-10 3.777928583784e-01 + 4.428000000000e-10 4.192485534625e-01 + 4.528000000000e-10 4.246080285894e-01 + 4.628000000000e-10 3.507916132015e-01 + 4.728000000000e-10 1.816929452641e-01 + 4.828000000000e-10 -1.601075067965e-02 + 4.928000000000e-10 -1.700562644838e-01 + 5.028000000000e-10 -2.537513990380e-01 + 5.128000000000e-10 -2.821086741965e-01 + 5.228000000000e-10 -3.225309737549e-01 + 5.328000000000e-10 -3.778081660132e-01 + 5.428000000000e-10 -4.192196231589e-01 + 5.528000000000e-10 -4.246325132019e-01 + 5.628000000000e-10 -3.507765562578e-01 + 5.728000000000e-10 -1.817315603141e-01 + 5.828000000000e-10 1.601468821266e-02 + 5.928000000000e-10 1.700220210141e-01 + 6.028000000000e-10 2.537612841477e-01 + 6.128000000000e-10 2.820810469197e-01 + 6.228000000000e-10 3.225454957468e-01 + 6.328000000000e-10 3.777800822765e-01 + 6.428000000000e-10 4.192350742948e-01 + 6.528000000000e-10 4.246071005326e-01 + 6.628000000000e-10 3.507940665347e-01 + 6.728000000000e-10 1.817094337521e-01 + 6.828000000000e-10 -1.599736953115e-02 + 6.928000000000e-10 -1.700405869499e-01 + 7.028000000000e-10 -2.537437685408e-01 + 7.128000000000e-10 -2.820988428465e-01 + 7.228000000000e-10 -3.225283133162e-01 + 7.328000000000e-10 -3.778004844844e-01 + 7.428000000000e-10 -4.192180216890e-01 + 7.528000000000e-10 -4.246257635725e-01 + 7.628000000000e-10 -3.507760422929e-01 + 7.728000000000e-10 -1.817278922025e-01 + 7.828000000000e-10 1.601285231965e-02 + 7.928000000000e-10 1.700238629540e-01 + 8.028000000000e-10 2.537592487741e-01 + 8.128000000000e-10 2.820829438407e-01 + 8.228000000000e-10 3.225445511573e-01 + 8.328000000000e-10 3.777829985044e-01 + 8.428000000000e-10 4.192337708379e-01 + 8.528000000000e-10 4.246090234999e-01 + 8.628000000000e-10 3.507916632731e-01 + 8.728000000000e-10 1.817122417436e-01 + 8.828000000000e-10 -1.599824136343e-02 + 8.928000000000e-10 -1.700377849177e-01 + 9.028000000000e-10 -2.537449127629e-01 + 9.128000000000e-10 -2.820965585668e-01 + 9.228000000000e-10 -3.225302446360e-01 + 9.328000000000e-10 -3.777982010874e-01 + 9.428000000000e-10 -4.192199753705e-01 + 9.528000000000e-10 -4.246232587341e-01 + 9.628000000000e-10 -3.507775800865e-01 + 9.728000000000e-10 -1.817263367247e-01 + 9.828000000000e-10 1.601066647660e-02 + 9.928000000000e-10 1.700248857455e-01 + 1.000000000000e-09 2.385375784000e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/conditions.yaml new file mode 100644 index 00000000..c3c068cd --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 20 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_20 +temperature: '-40' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/CML_core_tb.sch new file mode 100644 index 00000000..39e95ccf --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/CML_core_tb_21.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/CML_core_tb_21.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/CML_core_tb_21.data new file mode 100644 index 00000000..86f9b023 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/CML_core_tb_21.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.747912795524e-01 + 1.728000000000e-10 -1.327955908449e-01 + 1.828000000000e-10 3.931332790349e-02 + 1.928000000000e-10 1.782957289495e-01 + 2.028000000000e-10 2.573194188668e-01 + 2.128000000000e-10 2.870254911902e-01 + 2.228000000000e-10 3.228650321442e-01 + 2.328000000000e-10 3.690575149088e-01 + 2.428000000000e-10 4.023791308175e-01 + 2.528000000000e-10 4.034409994944e-01 + 2.628000000000e-10 3.332295993533e-01 + 2.728000000000e-10 1.767123870243e-01 + 2.828000000000e-10 -7.574880255958e-03 + 2.928000000000e-10 -1.550892096227e-01 + 3.028000000000e-10 -2.394679486139e-01 + 3.128000000000e-10 -2.715465054757e-01 + 3.228000000000e-10 -3.085580168164e-01 + 3.328000000000e-10 -3.560821219044e-01 + 3.428000000000e-10 -3.914831036325e-01 + 3.528000000000e-10 -3.956717314322e-01 + 3.628000000000e-10 -3.285929470428e-01 + 3.728000000000e-10 -1.747908753666e-01 + 3.828000000000e-10 7.882784627431e-03 + 3.928000000000e-10 1.545893087045e-01 + 4.028000000000e-10 2.389887597051e-01 + 4.128000000000e-10 2.712307710628e-01 + 4.228000000000e-10 3.085047043395e-01 + 4.328000000000e-10 3.559448484744e-01 + 4.428000000000e-10 3.913507819782e-01 + 4.528000000000e-10 3.953547803018e-01 + 4.628000000000e-10 3.282585464854e-01 + 4.728000000000e-10 1.743078825018e-01 + 4.828000000000e-10 -8.291328068348e-03 + 4.928000000000e-10 -1.550293895867e-01 + 5.028000000000e-10 -2.392804293874e-01 + 5.128000000000e-10 -2.715405217782e-01 + 5.228000000000e-10 -3.087067361985e-01 + 5.328000000000e-10 -3.562070457914e-01 + 5.428000000000e-10 -3.915132320474e-01 + 5.528000000000e-10 -3.955548280332e-01 + 5.628000000000e-10 -3.283427048941e-01 + 5.728000000000e-10 -1.744282326244e-01 + 5.828000000000e-10 8.270645751064e-03 + 5.928000000000e-10 1.549582711486e-01 + 6.028000000000e-10 2.392860039329e-01 + 6.128000000000e-10 2.714820836214e-01 + 6.228000000000e-10 3.087161022039e-01 + 6.328000000000e-10 3.561494137047e-01 + 6.428000000000e-10 3.915273490759e-01 + 6.528000000000e-10 3.955079501007e-01 + 6.628000000000e-10 3.283677191723e-01 + 6.728000000000e-10 1.743944727908e-01 + 6.828000000000e-10 -8.238033211244e-03 + 6.928000000000e-10 -1.549849820320e-01 + 7.028000000000e-10 -2.392533741503e-01 + 7.128000000000e-10 -2.715088112944e-01 + 7.228000000000e-10 -3.086845279612e-01 + 7.328000000000e-10 -3.561786907982e-01 + 7.428000000000e-10 -3.914967682891e-01 + 7.528000000000e-10 -3.955360247734e-01 + 7.628000000000e-10 -3.283379458960e-01 + 7.728000000000e-10 -1.744219452106e-01 + 7.828000000000e-10 8.266285029230e-03 + 7.928000000000e-10 1.549592969714e-01 + 8.028000000000e-10 2.392805186707e-01 + 8.128000000000e-10 2.714837558368e-01 + 8.228000000000e-10 3.087120651005e-01 + 8.328000000000e-10 3.561520690508e-01 + 8.428000000000e-10 3.915233230940e-01 + 8.528000000000e-10 3.955100606400e-01 + 8.628000000000e-10 3.283632493206e-01 + 8.728000000000e-10 1.743968536756e-01 + 8.828000000000e-10 -8.241845610385e-03 + 8.928000000000e-10 -1.549825747228e-01 + 9.028000000000e-10 -2.392568734068e-01 + 9.128000000000e-10 -2.715063119250e-01 + 9.228000000000e-10 -3.086881712182e-01 + 9.328000000000e-10 -3.561760305782e-01 + 9.428000000000e-10 -3.915002731039e-01 + 9.528000000000e-10 -3.955331724158e-01 + 9.628000000000e-10 -3.283409163093e-01 + 9.728000000000e-10 -1.744193777973e-01 + 9.828000000000e-10 8.263272108901e-03 + 9.928000000000e-10 1.549616575981e-01 + 1.000000000000e-09 2.229820050464e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/conditions.yaml new file mode 100644 index 00000000..1443a18f --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 21 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_21 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/CML_core_tb.sch new file mode 100644 index 00000000..579cefeb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/CML_core_tb_22.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/CML_core_tb_22.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/CML_core_tb_22.data new file mode 100644 index 00000000..ef0e6c8e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/CML_core_tb_22.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.701426652476e-01 + 1.728000000000e-10 -1.295079168872e-01 + 1.828000000000e-10 4.028305902420e-02 + 1.928000000000e-10 1.769160181627e-01 + 2.028000000000e-10 2.543038782058e-01 + 2.128000000000e-10 2.828787064062e-01 + 2.228000000000e-10 3.193333275112e-01 + 2.328000000000e-10 3.660596632426e-01 + 2.428000000000e-10 3.993599084345e-01 + 2.528000000000e-10 4.007883413226e-01 + 2.628000000000e-10 3.312419521143e-01 + 2.728000000000e-10 1.754810620333e-01 + 2.828000000000e-10 -7.142746942805e-03 + 2.928000000000e-10 -1.527779354444e-01 + 3.028000000000e-10 -2.358001938178e-01 + 3.128000000000e-10 -2.668485168237e-01 + 3.228000000000e-10 -3.044746718514e-01 + 3.328000000000e-10 -3.525545062341e-01 + 3.428000000000e-10 -3.880254364838e-01 + 3.528000000000e-10 -3.926522183008e-01 + 3.628000000000e-10 -3.262954780243e-01 + 3.728000000000e-10 -1.733443838482e-01 + 3.828000000000e-10 7.573790689709e-03 + 3.928000000000e-10 1.523487073311e-01 + 4.028000000000e-10 2.353677758316e-01 + 4.128000000000e-10 2.665695097895e-01 + 4.228000000000e-10 3.044490522149e-01 + 4.328000000000e-10 3.524353166192e-01 + 4.428000000000e-10 3.879041587545e-01 + 4.528000000000e-10 3.923389296672e-01 + 4.628000000000e-10 3.259554596391e-01 + 4.728000000000e-10 1.728458619818e-01 + 4.828000000000e-10 -8.002573892585e-03 + 4.928000000000e-10 -1.528088090159e-01 + 5.028000000000e-10 -2.356747724378e-01 + 5.128000000000e-10 -2.668925685814e-01 + 5.228000000000e-10 -3.046638401901e-01 + 5.328000000000e-10 -3.527112223433e-01 + 5.428000000000e-10 -3.880786380631e-01 + 5.528000000000e-10 -3.925506229445e-01 + 5.628000000000e-10 -3.260495799326e-01 + 5.728000000000e-10 -1.729761662154e-01 + 5.828000000000e-10 7.974498187451e-03 + 5.928000000000e-10 1.527311696558e-01 + 6.028000000000e-10 2.356760074325e-01 + 6.128000000000e-10 2.668297167568e-01 + 6.228000000000e-10 3.046702367069e-01 + 6.328000000000e-10 3.526500635637e-01 + 6.428000000000e-10 3.880902250634e-01 + 6.528000000000e-10 3.925010528185e-01 + 6.628000000000e-10 3.260730653917e-01 + 6.728000000000e-10 1.729410953112e-01 + 6.828000000000e-10 -7.941970684065e-03 + 6.928000000000e-10 -1.527585341072e-01 + 7.028000000000e-10 -2.356430884825e-01 + 7.128000000000e-10 -2.668569558480e-01 + 7.228000000000e-10 -3.046384985761e-01 + 7.328000000000e-10 -3.526798341051e-01 + 7.428000000000e-10 -3.880593641809e-01 + 7.528000000000e-10 -3.925295324367e-01 + 7.628000000000e-10 -3.260427874257e-01 + 7.728000000000e-10 -1.729689796013e-01 + 7.828000000000e-10 7.970639231343e-03 + 7.928000000000e-10 1.527324506408e-01 + 8.028000000000e-10 2.356706370408e-01 + 8.128000000000e-10 2.668314718812e-01 + 8.228000000000e-10 3.046665550415e-01 + 8.328000000000e-10 3.526529348742e-01 + 8.428000000000e-10 3.880863283995e-01 + 8.528000000000e-10 3.925032166540e-01 + 8.628000000000e-10 3.260684590033e-01 + 8.728000000000e-10 1.729436324779e-01 + 8.828000000000e-10 -7.945691115533e-03 + 8.928000000000e-10 -1.527560420249e-01 + 9.028000000000e-10 -2.356465048672e-01 + 9.128000000000e-10 -2.668543449819e-01 + 9.228000000000e-10 -3.046422495200e-01 + 9.328000000000e-10 -3.526772110923e-01 + 9.428000000000e-10 -3.880628732866e-01 + 9.528000000000e-10 -3.925266759429e-01 + 9.628000000000e-10 -3.260456785141e-01 + 9.728000000000e-10 -1.729665660062e-01 + 9.828000000000e-10 7.967487161613e-03 + 9.928000000000e-10 1.527347010769e-01 + 1.000000000000e-09 2.198236907112e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/conditions.yaml new file mode 100644 index 00000000..cfd32067 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 22 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_22 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/CML_core_tb.sch new file mode 100644 index 00000000..f3078de4 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/CML_core_tb_23.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 27 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/CML_core_tb_23.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/CML_core_tb_23.data new file mode 100644 index 00000000..7b2e7ab2 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/CML_core_tb_23.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.957054612407e-01 + 1.728000000000e-10 -1.475216919691e-01 + 1.828000000000e-10 3.196996632833e-02 + 1.928000000000e-10 1.773696584526e-01 + 2.028000000000e-10 2.602670445343e-01 + 2.128000000000e-10 2.919684489720e-01 + 2.228000000000e-10 3.273690981683e-01 + 2.328000000000e-10 3.736661732429e-01 + 2.428000000000e-10 4.086769482098e-01 + 2.528000000000e-10 4.113258498473e-01 + 2.628000000000e-10 3.414272197123e-01 + 2.728000000000e-10 1.833836328070e-01 + 2.828000000000e-10 -4.501363849837e-03 + 2.928000000000e-10 -1.562318489881e-01 + 3.028000000000e-10 -2.435570784568e-01 + 3.128000000000e-10 -2.775386220390e-01 + 3.228000000000e-10 -3.142878056355e-01 + 3.328000000000e-10 -3.618442790176e-01 + 3.428000000000e-10 -3.986028140213e-01 + 3.528000000000e-10 -4.040381865127e-01 + 3.628000000000e-10 -3.369104214062e-01 + 3.728000000000e-10 -1.811830752063e-01 + 3.828000000000e-10 5.355128083595e-03 + 3.928000000000e-10 1.563630270676e-01 + 4.028000000000e-10 2.436522664355e-01 + 4.128000000000e-10 2.777202130414e-01 + 4.228000000000e-10 3.146716935396e-01 + 4.328000000000e-10 3.621309165835e-01 + 4.428000000000e-10 3.988648293319e-01 + 4.528000000000e-10 4.040567761896e-01 + 4.628000000000e-10 3.368362274946e-01 + 4.728000000000e-10 1.809052635954e-01 + 4.828000000000e-10 -5.606347307292e-03 + 4.928000000000e-10 -1.566747533637e-01 + 5.028000000000e-10 -2.438438929936e-01 + 5.128000000000e-10 -2.779365198916e-01 + 5.228000000000e-10 -3.147868656031e-01 + 5.328000000000e-10 -3.623069078218e-01 + 5.428000000000e-10 -3.989546307961e-01 + 5.528000000000e-10 -4.041975741324e-01 + 5.628000000000e-10 -3.368831845243e-01 + 5.728000000000e-10 -1.810020824460e-01 + 5.828000000000e-10 5.593858826262e-03 + 5.928000000000e-10 1.566090374935e-01 + 6.028000000000e-10 2.438493522755e-01 + 6.128000000000e-10 2.778818285943e-01 + 6.228000000000e-10 3.147972496077e-01 + 6.328000000000e-10 3.622530927659e-01 + 6.428000000000e-10 3.989689895438e-01 + 6.528000000000e-10 4.041528360847e-01 + 6.628000000000e-10 3.369065350765e-01 + 6.728000000000e-10 1.809679655825e-01 + 6.828000000000e-10 -5.565139497590e-03 + 6.928000000000e-10 -1.566366178225e-01 + 7.028000000000e-10 -2.438204188033e-01 + 7.128000000000e-10 -2.779089356335e-01 + 7.228000000000e-10 -3.147686522157e-01 + 7.328000000000e-10 -3.622826637804e-01 + 7.428000000000e-10 -3.989411843085e-01 + 7.528000000000e-10 -4.041807678845e-01 + 7.628000000000e-10 -3.368790616195e-01 + 7.728000000000e-10 -1.809947630224e-01 + 7.828000000000e-10 5.591512634984e-03 + 7.928000000000e-10 1.566120178189e-01 + 8.028000000000e-10 2.438458933358e-01 + 8.128000000000e-10 2.778849719194e-01 + 8.228000000000e-10 3.147945034671e-01 + 8.328000000000e-10 3.622568751046e-01 + 8.428000000000e-10 3.989662140554e-01 + 8.528000000000e-10 4.041558823701e-01 + 8.628000000000e-10 3.369030769235e-01 + 8.728000000000e-10 1.809706945647e-01 + 8.828000000000e-10 -5.568483515763e-03 + 8.928000000000e-10 -1.566340912711e-01 + 9.028000000000e-10 -2.438236181184e-01 + 9.128000000000e-10 -2.779064153414e-01 + 9.228000000000e-10 -3.147718720666e-01 + 9.328000000000e-10 -3.622798572716e-01 + 9.428000000000e-10 -3.989444036153e-01 + 9.528000000000e-10 -4.041778978449e-01 + 9.628000000000e-10 -3.368819513246e-01 + 9.728000000000e-10 -1.809921012276e-01 + 9.828000000000e-10 5.588724287086e-03 + 9.928000000000e-10 1.566143682128e-01 + 1.000000000000e-09 2.267750497136e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/conditions.yaml new file mode 100644 index 00000000..25af9d3e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 23 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_23 +temperature: '27' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/CML_core_tb.sch new file mode 100644 index 00000000..7c483691 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/CML_core_tb_24.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/CML_core_tb_24.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/CML_core_tb_24.data new file mode 100644 index 00000000..a01deb89 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/CML_core_tb_24.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -1.908985659112e-01 + 1.728000000000e-10 -9.049079150817e-02 + 1.828000000000e-10 3.945873683219e-02 + 1.928000000000e-10 1.521437177417e-01 + 2.028000000000e-10 2.220068772324e-01 + 2.128000000000e-10 2.535092334052e-01 + 2.228000000000e-10 2.861973397174e-01 + 2.328000000000e-10 3.239843013312e-01 + 2.428000000000e-10 3.520113017607e-01 + 2.528000000000e-10 3.540468115658e-01 + 2.628000000000e-10 2.949447709683e-01 + 2.728000000000e-10 1.587983397866e-01 + 2.828000000000e-10 -6.865354773069e-03 + 2.928000000000e-10 -1.448078480843e-01 + 3.028000000000e-10 -2.275605338030e-01 + 3.128000000000e-10 -2.625604064747e-01 + 3.228000000000e-10 -2.958552078644e-01 + 3.328000000000e-10 -3.351711406638e-01 + 3.428000000000e-10 -3.644984224381e-01 + 3.528000000000e-10 -3.669950471097e-01 + 3.628000000000e-10 -3.072796408874e-01 + 3.728000000000e-10 -1.699866077827e-01 + 3.828000000000e-10 -2.842045316933e-03 + 3.928000000000e-10 1.365086891956e-01 + 4.028000000000e-10 2.207869920157e-01 + 4.128000000000e-10 2.567713461579e-01 + 4.228000000000e-10 2.907030026757e-01 + 4.328000000000e-10 3.302687598301e-01 + 4.428000000000e-10 3.600803190405e-01 + 4.528000000000e-10 3.632331450943e-01 + 4.628000000000e-10 3.045482678871e-01 + 4.728000000000e-10 1.682698274629e-01 + 4.828000000000e-10 2.058504292284e-03 + 4.928000000000e-10 -1.367871396964e-01 + 5.028000000000e-10 -2.207717990252e-01 + 5.128000000000e-10 -2.567684885934e-01 + 5.228000000000e-10 -2.906651825463e-01 + 5.328000000000e-10 -3.302494358660e-01 + 5.428000000000e-10 -3.599712284157e-01 + 5.528000000000e-10 -3.631239508150e-01 + 5.628000000000e-10 -3.043584109358e-01 + 5.728000000000e-10 -1.680958385636e-01 + 5.828000000000e-10 -1.834034512727e-03 + 5.928000000000e-10 1.369613450439e-01 + 6.028000000000e-10 2.209618957221e-01 + 6.128000000000e-10 2.568952536478e-01 + 6.228000000000e-10 2.908171185353e-01 + 6.328000000000e-10 3.303549214919e-01 + 6.428000000000e-10 3.601082390759e-01 + 6.528000000000e-10 3.632059905221e-01 + 6.628000000000e-10 3.044557238628e-01 + 6.728000000000e-10 1.681292777859e-01 + 6.828000000000e-10 1.882442241730e-03 + 6.928000000000e-10 -1.369637862409e-01 + 7.028000000000e-10 -2.209363992802e-01 + 7.128000000000e-10 -2.569065829626e-01 + 7.228000000000e-10 -2.907936706940e-01 + 7.328000000000e-10 -3.303682701482e-01 + 7.428000000000e-10 -3.600879594395e-01 + 7.528000000000e-10 -3.632220959958e-01 + 7.628000000000e-10 -3.044401007882e-01 + 7.728000000000e-10 -1.681486407544e-01 + 7.828000000000e-10 -1.870004957548e-03 + 7.928000000000e-10 1.369437070838e-01 + 8.028000000000e-10 2.209481957039e-01 + 8.128000000000e-10 2.568879030180e-01 + 8.228000000000e-10 2.908064848389e-01 + 8.328000000000e-10 3.303493303219e-01 + 8.428000000000e-10 3.601006147126e-01 + 8.528000000000e-10 3.632041339109e-01 + 8.628000000000e-10 3.044528281549e-01 + 8.728000000000e-10 1.681322760827e-01 + 8.828000000000e-10 1.883536763259e-03 + 8.928000000000e-10 -1.369582535540e-01 + 9.028000000000e-10 -2.209346296842e-01 + 9.128000000000e-10 -2.569016830366e-01 + 9.228000000000e-10 -2.907925936742e-01 + 9.328000000000e-10 -3.303636164667e-01 + 9.428000000000e-10 -3.600871302257e-01 + 9.528000000000e-10 -3.632178492939e-01 + 9.628000000000e-10 -3.044398392752e-01 + 9.728000000000e-10 -1.681454261603e-01 + 9.828000000000e-10 -1.870628705438e-03 + 9.928000000000e-10 1.369459433541e-01 + 1.000000000000e-09 2.037746084522e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/conditions.yaml new file mode 100644 index 00000000..98b082aa --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 24 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_24 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/CML_core_tb.sch new file mode 100644 index 00000000..48d7a9a7 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/CML_core_tb_25.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ff + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/CML_core_tb_25.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/CML_core_tb_25.data new file mode 100644 index 00000000..182746dc --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/CML_core_tb_25.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -1.878715792581e-01 + 1.728000000000e-10 -8.812036120597e-02 + 1.828000000000e-10 4.046526586524e-02 + 1.928000000000e-10 1.515705626527e-01 + 2.028000000000e-10 2.200566198342e-01 + 2.128000000000e-10 2.503583455541e-01 + 2.228000000000e-10 2.832914205797e-01 + 2.328000000000e-10 3.216696186231e-01 + 2.428000000000e-10 3.500303926946e-01 + 2.528000000000e-10 3.524815741411e-01 + 2.628000000000e-10 2.936462106779e-01 + 2.728000000000e-10 1.576219496242e-01 + 2.828000000000e-10 -7.121462127754e-03 + 2.928000000000e-10 -1.436071598858e-01 + 3.028000000000e-10 -2.249496922999e-01 + 3.128000000000e-10 -2.586592240194e-01 + 3.228000000000e-10 -2.922419569702e-01 + 3.328000000000e-10 -3.321983211521e-01 + 3.428000000000e-10 -3.618684381611e-01 + 3.528000000000e-10 -3.648249016007e-01 + 3.628000000000e-10 -3.055379959953e-01 + 3.728000000000e-10 -1.686105488568e-01 + 3.828000000000e-10 -2.582643774162e-03 + 3.928000000000e-10 1.352182085241e-01 + 4.028000000000e-10 2.180702244722e-01 + 4.128000000000e-10 2.527783389641e-01 + 4.228000000000e-10 2.869845016096e-01 + 4.328000000000e-10 3.271697550530e-01 + 4.428000000000e-10 3.573213651505e-01 + 4.528000000000e-10 3.609341509143e-01 + 4.628000000000e-10 3.026708512688e-01 + 4.728000000000e-10 1.667591862946e-01 + 4.828000000000e-10 1.676053368052e-03 + 4.928000000000e-10 -1.356064331336e-01 + 5.028000000000e-10 -2.181494577446e-01 + 5.128000000000e-10 -2.528581012316e-01 + 5.228000000000e-10 -2.870203472690e-01 + 5.328000000000e-10 -3.272198972187e-01 + 5.428000000000e-10 -3.572767955086e-01 + 5.528000000000e-10 -3.608816832152e-01 + 5.628000000000e-10 -3.025243774497e-01 + 5.728000000000e-10 -1.666129730216e-01 + 5.828000000000e-10 -1.465204057357e-03 + 5.928000000000e-10 1.357749931272e-01 + 6.028000000000e-10 2.183376260095e-01 + 6.128000000000e-10 2.529831758691e-01 + 6.228000000000e-10 2.871716452249e-01 + 6.328000000000e-10 3.273254918206e-01 + 6.428000000000e-10 3.574148326524e-01 + 6.528000000000e-10 3.609652866209e-01 + 6.628000000000e-10 3.026246199120e-01 + 6.728000000000e-10 1.666502220733e-01 + 6.828000000000e-10 1.518129196282e-03 + 6.928000000000e-10 -1.357732099566e-01 + 7.028000000000e-10 -2.183080403425e-01 + 7.128000000000e-10 -2.529912058397e-01 + 7.228000000000e-10 -2.871450109118e-01 + 7.328000000000e-10 -3.273360198503e-01 + 7.428000000000e-10 -3.573916245859e-01 + 7.528000000000e-10 -3.609790664977e-01 + 7.628000000000e-10 -3.026068066478e-01 + 7.728000000000e-10 -1.666683959674e-01 + 7.828000000000e-10 -1.504711775466e-03 + 7.928000000000e-10 1.357534602326e-01 + 8.028000000000e-10 2.183202914392e-01 + 8.128000000000e-10 2.529726082081e-01 + 8.228000000000e-10 2.871582302084e-01 + 8.328000000000e-10 3.273171284192e-01 + 8.428000000000e-10 3.574045685766e-01 + 8.528000000000e-10 3.609610284998e-01 + 8.628000000000e-10 3.026196909841e-01 + 8.728000000000e-10 1.666518528053e-01 + 8.828000000000e-10 1.518315117290e-03 + 8.928000000000e-10 -1.357682747942e-01 + 9.028000000000e-10 -2.183066580359e-01 + 9.128000000000e-10 -2.529866332266e-01 + 9.228000000000e-10 -2.871442829871e-01 + 9.328000000000e-10 -3.273316607928e-01 + 9.428000000000e-10 -3.573910212469e-01 + 9.528000000000e-10 -3.609749965926e-01 + 9.628000000000e-10 -3.026065830591e-01 + 9.728000000000e-10 -1.666652414066e-01 + 9.828000000000e-10 -1.505286118034e-03 + 9.928000000000e-10 1.357557668798e-01 + 1.000000000000e-09 2.016242513907e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/conditions.yaml new file mode 100644 index 00000000..efe12cb2 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 25 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ff +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_25 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/.spiceinit b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/CML_core_tb.sch b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/CML_core_tb.sch new file mode 100644 index 00000000..77437bd5 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/CML_core_tb.sch @@ -0,0 +1,71 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 740 -940 740 -920 {lab=GND} +N 740 -1090 740 -1060 {lab=VDD} +N 600 -1020 620 -1020 {lab=Vinplus} +N 600 -980 620 -980 {lab=Vinminus} +N 860 -1020 880 -1020 {lab=Voplus} +N 860 -980 880 -980 {lab=Vominus} +N 1150 -850 1150 -820 {lab=VDD} +N 1150 -760 1150 -730 {lab=GND} +N 930 -850 930 -820 {lab=Vinminus} +N 930 -760 930 -730 {lab=GND} +N 720 -850 720 -820 {lab=Vinplus} +N 720 -760 720 -730 {lab=GND} +C {code_shown.sym} 10 -1220 0 0 {name=transient_tb only_toplevel=false +value=" +.ic V(Voplus)=1.2 +.control +set noaskquit +set numdgt=12 + +* Save & simulate +save all +op +write CML_core_tb.raw +set appendwrite +tran 10p 1n 160p + +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/CML_core_tb_26.data vo_diff +quit + +.endc +"} +C {opin.sym} 880 -1020 2 1 {name=p6 lab=Voplus} +C {opin.sym} 880 -980 0 0 {name=p9 lab=Vominus} +C {devices/code_shown.sym} 10 -620 0 0 {name=SETUP only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_ss + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice + +.temp 80 +" +} +C {iopin.sym} 740 -1090 0 1 {name=p2 lab=VDD} +C {ipin.sym} 600 -1020 2 1 {name=p4 lab=Vinplus} +C {ipin.sym} 600 -980 2 1 {name=p1 lab=Vinminus} +C {CML_divider.sym} 740 -1000 0 1 {name=x1} +C {vsource.sym} 1150 -790 0 0 {name=V1 value=1.6 savecurrent=false} +C {gnd.sym} 1150 -730 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 1150 -850 0 0 {name=p5 sig_type=std_logic lab=VDD} +C {gnd.sym} 930 -730 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 930 -850 0 0 {name=p8 sig_type=std_logic lab=Vinminus} +C {vsource.sym} 720 -790 0 0 {name=V3 value="SIN(0.6 0.3 10G 0 0 0)" savecurrent=false} +C {gnd.sym} 720 -730 0 0 {name=l4 lab=GND +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {lab_pin.sym} 720 -850 0 0 {name=p10 sig_type=std_logic lab=Vinplus +value="dc 0 ac 0 SIN(0.6 0.3 12.7k 0 0 0)"} +C {vsource.sym} 930 -790 0 0 {name=V2 value="SIN(0.6 0.3 10G 0 0 180)" savecurrent=false} +C {gnd.sym} 740 -920 0 0 {name=l3 lab=GND} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/CML_core_tb_26.data b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/CML_core_tb_26.data new file mode 100644 index 00000000..c21b093d --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/CML_core_tb_26.data @@ -0,0 +1,85 @@ + 1.628000000000e-10 -2.135873679018e-01 + 1.728000000000e-10 -1.054229355639e-01 + 1.828000000000e-10 3.485798650969e-02 + 1.928000000000e-10 1.569675139767e-01 + 2.028000000000e-10 2.330635404696e-01 + 2.128000000000e-10 2.680443549179e-01 + 2.228000000000e-10 3.014044829899e-01 + 2.328000000000e-10 3.394080314353e-01 + 2.428000000000e-10 3.679529618424e-01 + 2.528000000000e-10 3.700593040123e-01 + 2.628000000000e-10 3.097824620429e-01 + 2.728000000000e-10 1.706514675999e-01 + 2.828000000000e-10 3.558070014658e-04 + 2.928000000000e-10 -1.428409974599e-01 + 3.028000000000e-10 -2.298289579719e-01 + 3.128000000000e-10 -2.678794741753e-01 + 3.228000000000e-10 -3.017454056957e-01 + 3.328000000000e-10 -3.410620518407e-01 + 3.428000000000e-10 -3.712405389398e-01 + 3.528000000000e-10 -3.749327973471e-01 + 3.628000000000e-10 -3.157484466493e-01 + 3.728000000000e-10 -1.773087198166e-01 + 3.828000000000e-10 -7.070252178339e-03 + 3.928000000000e-10 1.364462941621e-01 + 4.028000000000e-10 2.243241068758e-01 + 4.128000000000e-10 2.631279769125e-01 + 4.228000000000e-10 2.976097246349e-01 + 4.328000000000e-10 3.371159716785e-01 + 4.428000000000e-10 3.676405775058e-01 + 4.528000000000e-10 3.717787254056e-01 + 4.628000000000e-10 3.133854979421e-01 + 4.728000000000e-10 1.756870158595e-01 + 4.828000000000e-10 6.171257018760e-03 + 4.928000000000e-10 -1.369680995621e-01 + 5.028000000000e-10 -2.245781248931e-01 + 5.128000000000e-10 -2.633829468620e-01 + 5.228000000000e-10 -2.978042748481e-01 + 5.328000000000e-10 -3.373348877854e-01 + 5.428000000000e-10 -3.677584906255e-01 + 5.528000000000e-10 -3.718812762918e-01 + 5.628000000000e-10 -3.133649557524e-01 + 5.728000000000e-10 -1.756479312047e-01 + 5.828000000000e-10 -6.040608056278e-03 + 5.928000000000e-10 1.370690415770e-01 + 6.028000000000e-10 2.247181767783e-01 + 6.128000000000e-10 2.634617265965e-01 + 6.228000000000e-10 2.979157296699e-01 + 6.328000000000e-10 3.373958940353e-01 + 6.428000000000e-10 3.678612954525e-01 + 6.528000000000e-10 3.719309221475e-01 + 6.628000000000e-10 3.134447453066e-01 + 6.728000000000e-10 1.756687688086e-01 + 6.828000000000e-10 6.090200135509e-03 + 6.928000000000e-10 -1.370702307281e-01 + 7.028000000000e-10 -2.246847420648e-01 + 7.128000000000e-10 -2.634701196121e-01 + 7.228000000000e-10 -2.978849158722e-01 + 7.328000000000e-10 -3.374068878437e-01 + 7.428000000000e-10 -3.678336110941e-01 + 7.528000000000e-10 -3.719446503824e-01 + 7.628000000000e-10 -3.134227431793e-01 + 7.728000000000e-10 -1.756868885858e-01 + 7.828000000000e-10 -6.072676723321e-03 + 7.928000000000e-10 1.370503070743e-01 + 8.028000000000e-10 2.247004966695e-01 + 8.128000000000e-10 2.634509722982e-01 + 8.228000000000e-10 2.979013793804e-01 + 8.328000000000e-10 3.373870921905e-01 + 8.428000000000e-10 3.678495602861e-01 + 8.528000000000e-10 3.719256264749e-01 + 8.628000000000e-10 3.134381864470e-01 + 8.728000000000e-10 1.756688935561e-01 + 8.828000000000e-10 6.088345643719e-03 + 8.928000000000e-10 -1.370666831053e-01 + 9.028000000000e-10 -2.246851372638e-01 + 9.128000000000e-10 -2.634666121684e-01 + 9.228000000000e-10 -2.978856025968e-01 + 9.328000000000e-10 -3.374033621769e-01 + 9.428000000000e-10 -3.678342837151e-01 + 9.528000000000e-10 -3.719412125322e-01 + 9.628000000000e-10 -3.134235677100e-01 + 9.728000000000e-10 -1.756838495744e-01 + 9.828000000000e-10 -6.073781243164e-03 + 9.928000000000e-10 1.370527135588e-01 + 1.000000000000e-09 2.065229990524e-01 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/CML_divider.sym b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/CML_divider.sym new file mode 100644 index 00000000..e46eb233 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/CML_divider.sym @@ -0,0 +1,30 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -120 -20 -100 -20 {} +L 4 -120 20 -100 20 {} +L 4 100 -20 120 -20 {} +L 4 100 20 120 20 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -122.5 -22.5 -117.5 -17.5 {name=Vo+ dir=out} +B 5 -122.5 17.5 -117.5 22.5 {name=Vo- dir=out} +B 5 117.5 -22.5 122.5 -17.5 {name=Vi+ dir=in} +B 5 117.5 17.5 122.5 22.5 {name=Vi- dir=in} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout} +B 5 -2.5 57.5 2.5 62.5 {name=gnd dir=inout} +P 4 5 100 -40 -100 -40 -100 40 100 40 100 -40 {} +T {@symname} -44 -6 0 0 0.3 0.3 {} +T {@name} 45 -52 0 0 0.2 0.2 {} +T {Vo+} -95 -24 0 0 0.2 0.2 {} +T {Vo-} -95 16 0 0 0.2 0.2 {} +T {Vi+} 95 -16 2 0 0.2 0.2 {} +T {Vi-} 95 24 2 0 0.2 0.2 {} +T {vdd} 10 -39 0 1 0.2 0.2 {} +T {gnd} -10 34 2 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/conditions.yaml b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/conditions.yaml new file mode 100644 index 00000000..bb398631 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26/conditions.yaml @@ -0,0 +1,9 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/xschem/simulations/schematic/CML_divider.spice +N: 26 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: ss +filename: CML_core_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/run_26 +temperature: '80' +vdd: '1.6' diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/simulation_summary.csv b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/simulation_summary.csv new file mode 100644 index 00000000..1422d52e --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/simulation_summary.csv @@ -0,0 +1,28 @@ +run,corner,temperature,vdd,time,vo_diff,frequency,amplitude,voltage_swing +run_00,tt,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.111e-01, -1.870e-01, -3.563e-02, …]",4.722e+09,0.382,0.763 +run_01,ff,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.099e-01, -1.895e-01, -4.060e-02, …]",4.722e+09,0.377,0.754 +run_02,ss,-40,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.163e-01, -1.876e-01, -3.217e-02, …]",4.722e+09,0.390,0.780 +run_03,tt,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.915e-01, -1.780e-01, -3.803e-02, …]",4.722e+09,0.357,0.715 +run_04,ff,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.909e-01, -1.806e-01, -4.276e-02, …]",4.722e+09,0.353,0.706 +run_05,ss,27,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.959e-01, -1.792e-01, -3.599e-02, …]",4.722e+09,0.366,0.732 +run_06,tt,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.689e-01, -1.692e-01, -4.423e-02, …]",4.722e+09,0.319,0.639 +run_07,ff,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.694e-01, -1.722e-01, -4.907e-02, …]",4.722e+09,0.315,0.629 +run_08,ss,80,0.8,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.723e-01, -1.701e-01, -4.252e-02, …]",4.722e+09,0.330,0.659 +run_09,tt,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.623e-01, -1.963e-01, -5.713e-03, …]",4.722e+09,0.421,0.843 +run_10,ff,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.622e-01, -1.984e-01, -1.024e-02, …]",4.722e+09,0.418,0.836 +run_11,ss,-40,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.669e-01, -1.979e-01, -3.070e-03, …]",4.722e+09,0.429,0.857 +run_12,tt,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.388e-01, -1.852e-01, -4.985e-03, …]",4.722e+09,0.401,0.803 +run_13,ff,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.407e-01, -1.880e-01, -9.263e-03, …]",4.722e+09,0.398,0.796 +run_14,ss,27,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.446e-01, -1.889e-01, -5.355e-03, …]",4.722e+09,0.409,0.817 +run_15,tt,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.832e-01, -1.548e-01, 2.955e-03, …]",4.722e+09,0.371,0.743 +run_16,ff,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.908e-01, -1.609e-01, -2.321e-03, …]",4.722e+09,0.368,0.736 +run_17,ss,80,1.2,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.858e-01, -1.573e-01, 2.540e-03, …]",4.722e+09,0.379,0.758 +run_18,tt,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.214e-01, -1.558e-01, 3.477e-02, …]",4.722e+09,0.418,0.836 +run_19,ff,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.163e-01, -1.529e-01, 3.475e-02, …]",4.722e+09,0.415,0.830 +run_20,ss,-40,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-3.365e-01, -1.657e-01, 3.100e-02, …]",4.722e+09,0.426,0.853 +run_21,tt,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.748e-01, -1.328e-01, 3.931e-02, …]",4.722e+09,0.400,0.799 +run_22,ff,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.701e-01, -1.295e-01, 4.028e-02, …]",4.722e+09,0.397,0.793 +run_23,ss,27,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.957e-01, -1.475e-01, 3.197e-02, …]",4.722e+09,0.408,0.816 +run_24,tt,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-1.909e-01, -9.049e-02, 3.946e-02, …]",4.722e+09,0.365,0.730 +run_25,ff,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-1.879e-01, -8.812e-02, 4.047e-02, …]",4.722e+09,0.363,0.726 +run_26,ss,80,1.6,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.136e-01, -1.054e-01, 3.486e-02, …]",4.722e+09,0.373,0.747 diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/simulation_summary.md b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/simulation_summary.md new file mode 100644 index 00000000..014379b0 --- /dev/null +++ b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/simulation_summary.md @@ -0,0 +1,31 @@ +# Simulation Summary for CML divider frequency response + +| run | corner | temperature | vdd | time | vo_diff | frequency | amplitude | voltage_swing | +| :-- | -----: | ----------: | --: | ---: | ------: | --------: | --------: | ------------: | +| run_00 | tt | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.111e-01, -1.870e-01, -3.563e-02, …] | 4.722e+09 | 0.382 | 0.763 | +| run_01 | ff | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.099e-01, -1.895e-01, -4.060e-02, …] | 4.722e+09 | 0.377 | 0.754 | +| run_02 | ss | -40 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.163e-01, -1.876e-01, -3.217e-02, …] | 4.722e+09 | 0.390 | 0.780 | +| run_03 | tt | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.915e-01, -1.780e-01, -3.803e-02, …] | 4.722e+09 | 0.357 | 0.715 | +| run_04 | ff | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.909e-01, -1.806e-01, -4.276e-02, …] | 4.722e+09 | 0.353 | 0.706 | +| run_05 | ss | 27 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.959e-01, -1.792e-01, -3.599e-02, …] | 4.722e+09 | 0.366 | 0.732 | +| run_06 | tt | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.689e-01, -1.692e-01, -4.423e-02, …] | 4.722e+09 | 0.319 | 0.639 | +| run_07 | ff | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.694e-01, -1.722e-01, -4.907e-02, …] | 4.722e+09 | 0.315 | 0.629 | +| run_08 | ss | 80 | 0.8 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.723e-01, -1.701e-01, -4.252e-02, …] | 4.722e+09 | 0.330 | 0.659 | +| run_09 | tt | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.623e-01, -1.963e-01, -5.713e-03, …] | 4.722e+09 | 0.421 | 0.843 | +| run_10 | ff | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.622e-01, -1.984e-01, -1.024e-02, …] | 4.722e+09 | 0.418 | 0.836 | +| run_11 | ss | -40 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.669e-01, -1.979e-01, -3.070e-03, …] | 4.722e+09 | 0.429 | 0.857 | +| run_12 | tt | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.388e-01, -1.852e-01, -4.985e-03, …] | 4.722e+09 | 0.401 | 0.803 | +| run_13 | ff | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.407e-01, -1.880e-01, -9.263e-03, …] | 4.722e+09 | 0.398 | 0.796 | +| run_14 | ss | 27 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.446e-01, -1.889e-01, -5.355e-03, …] | 4.722e+09 | 0.409 | 0.817 | +| run_15 | tt | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.832e-01, -1.548e-01, 2.955e-03, …] | 4.722e+09 | 0.371 | 0.743 | +| run_16 | ff | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.908e-01, -1.609e-01, -2.321e-03, …] | 4.722e+09 | 0.368 | 0.736 | +| run_17 | ss | 80 | 1.2 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.858e-01, -1.573e-01, 2.540e-03, …] | 4.722e+09 | 0.379 | 0.758 | +| run_18 | tt | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.214e-01, -1.558e-01, 3.477e-02, …] | 4.722e+09 | 0.418 | 0.836 | +| run_19 | ff | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.163e-01, -1.529e-01, 3.475e-02, …] | 4.722e+09 | 0.415 | 0.830 | +| run_20 | ss | -40 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-3.365e-01, -1.657e-01, 3.100e-02, …] | 4.722e+09 | 0.426 | 0.853 | +| run_21 | tt | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.748e-01, -1.328e-01, 3.931e-02, …] | 4.722e+09 | 0.400 | 0.799 | +| run_22 | ff | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.701e-01, -1.295e-01, 4.028e-02, …] | 4.722e+09 | 0.397 | 0.793 | +| run_23 | ss | 27 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.957e-01, -1.475e-01, 3.197e-02, …] | 4.722e+09 | 0.408 | 0.816 | +| run_24 | tt | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-1.909e-01, -9.049e-02, 3.946e-02, …] | 4.722e+09 | 0.365 | 0.730 | +| run_25 | ff | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-1.879e-01, -8.812e-02, 4.047e-02, …] | 4.722e+09 | 0.363 | 0.726 | +| run_26 | ss | 80 | 1.6 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.136e-01, -1.054e-01, 3.486e-02, …] | 4.722e+09 | 0.373 | 0.747 | diff --git a/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/vo_diff_vs_time.png b/modules/module_4_type_2_PLL/CML_divider/runs/RUN_2025-11-11_17-59-49/parameters/ac_params/vo_diff_vs_time.png new file mode 100644 index 0000000000000000000000000000000000000000..b3049faebba33274e93528743f61a9e391cf7306 GIT binary patch literal 188877 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�wTWw%38sW z%OWDWHQ%8h2^7LjkTZouGT4Z)10YQjw2;&f-htfpD+;cF{|&*e(718_$|EUwtwre9 z{i{;~MaRWk@1~uOVbcDXt$Y?q9l=5OVPoE(T$dkvh8}y?4KzO1wbb!^UBtq^x`iF4J&F?1ZVO z2EGOqwzgq~i+QW*U5cg2t8CFwDYO^B;Pm8a{&=uH-PM`;ijO@)-CUn8Udvc*+eSBd z0VY2&dIm|FM3$z};j^OIT_p|?dbcPOeCPO{3_0j?t4cPgM_RN-P>4iDcc_zoaUzuo5&e#Y}nkXd{Mz5-hkEnLk3k2dr78s~%H^0F&9|u)s!7!JiMktdLaF&6JAd#PdybRz3Ro7S+f`C&FYI%i+}v7!%pgMw zc0(YjL*O{$E&+SaSdDMM53Qh4852J0<3B$d4?s!w6Rw~)prHh)o)Vs4C)9z51poiv zcaa+;wUj6F|~bul6mfH);nf_neT%Y>Mg~e1nYU_ z{v5g69bU@@OArRxy2Uh8&vWi)oXr|vE1jQIgOHK79tFMKFDDeAza3>yBNqaFytSAp!|a4=+oT_`^&bzp=Ye!8B8lP@Coi-q8$?+3u~+xcA`8xa_tG& zu2rl_+5FTUNf*kpStF<8d3fttlN(euFZJH3e*WzNo|Xm$2Uke3!+bpL%!Ou2ufto0 zleIW+N@=2Wi7%cpx_tGh|7BdpB_A7V={8&_X!BZ{=8Pp}-NoMcRR&8Jm+ zc=3Bvfgk~Z*Y|BCrzXtwCEjdO7p-_b*Ot&uKM)331$c1CZ6}QKp zj?M7!NVhsDRNHxc&wHQ5B=i}>%1EBh$MRDd1$$K$VMzhe>?@~Yy{*#2+_Vd4IknFV z!-iR%BB`BD4`YTOL_KP1?40+7I&{@o{?voH!P0RCgI0x&Nr}Fk7vzCVx*CsU=#5zg ztLPQ2Xn?5>V{^E-Rb~~s%v$#@^$UYP$ECQ~&W-&BH}b>git7NomHTfG^MPot{M~b7 z_Y#MZZvEHp?lEsX_0s z1WQ*2nB?{ZJX&t=->h%eOy(B4NC(>~Gj^@fddjDgds^Gnbc8bx5@RUKQzy5MXa)uc zuwAFRSB{%g2;@%bT3)|rTBeAszIO>oUg^3%H1Pk#j&~)9snb%WG7xA+MKRFjprD@rw{YBwrt+)wPj$aIDfmUOW*hfpc*D zfVAamq?XsJQ-^>8v5wX1GxvE`M^BR;0}JZFdlOV2n${H@9GgeV2dE-m3k<$IO2SKJ zG01v?)C5Uu8{ajZ?-9{f&fT?nGXMAUQJ&n*o?*#fH@}!Sw^=vHOJX3NTHClTJ=cT)|lV#%5bga=&~n+{s%rR z_!iin>m41Yz94~a(&)IJos=gD+*_WrZzQu2WWPE_Q0&ETm&u7clkwyAb@%Xz%aJRipKsSEE+;dfk3_O~uVy{z<}*E*l- z;8!~wMRqgh)?vNEev__mJhd~ytWp{YW$I>Jw?}KJILqbG_ zdu`PPUlh`aHoprL{V~d$e?j+5BjN-+1&peYxWqWTz z*K(|+jBS(TRyeozmhhb)KK~?XBZqd@AUq}P;P`DlZ}(bc~f{d0`w zWH{c#jjnLrNcBxl;Wmd*fpU2Y$|Pzoai#I)#>bw|mCMr#JJ-BpWc>>8K6ja__N*QD zQQMN(h)Jpr5GwQCtdg$XJe+fyeYR4@NGwev9(R;-GGD1&+@x=DM*5e!_wg5FLYV+# z-t+0;I{Y=p%ZZm}C75y@h&LIXb7qn{H&Y|2lcpoIoM)EqT~mq#WC!K&fP6{^+)veMH^yi+Fkb&*sS&5U`IKA8hrO)#_={Ogk(f__b9pn4wY$`fS%8_PNJ{Fd z{o5AduL@F$WW49Lr8+@>;m86zw>|#Oa;WT>G~o3B;D)2dHw(MYjpwybbP{?gQwX2J zA;X%rCgJdHcLfOC2*f~w=Md)UPFU%xs_%upc5XoA0|ND@1D~MxK3eWz2Mz;m8u(*S zxgoU19@+l=@kN;fs#pDtS4Ig`TI&5(hQFV4!LN^xHDV3QyV|iqL+-Po`2F53!NXUj z7axrcJ-}=%3QnZ3T=mQ`yWHPE$Y?;bNzw0(rW%P7iqt)$yDd#RH9l=px8GokW<8AL#%(*KvH6X+& zpSaU~h4wZUd|sX@*q{*f}`v!RGdZ#BpML9CbVbKl3kx^`Jk! z*adim08qyX)htvZyGx%obsz2{R6m2DVjRWY`KrcgY3E69pc5U(@^Dc{Dl{!38+B9^ zJ}Nx|h&|;_nL|DrN#GNKe;Ij*;+c(g>`sKsCx@9sdTm{S#ghBm9ay4qy34nk zP9jRpqMO+T#_ppMH{ncWW$6-?V|JO+9r{Kid*`I^^>5@D0B$~u>0~08-v5IA{bl~w zqeI^yOkvJyyr~N&Mdn$LoWD2WRlQRw74RtwDc4%Scm6Ijs`2_!amJw~qooXK0!f>t z%EsHgX)Er&L73%5=PJ(ZmKw@}*!sTQ2aK!U0ghi^{oo5;loLAYEh&FT1~!r$yZ$5& ze)H;30E%-!ZRT+GGLstw?my2n#DNy0yVg`!}5)6cmWHhCmbarvO8nVu!3?P7_6Yu*p6-pa-(98-S|e zploDq+?pz%wipDTsfwi~J*eR2LG^|KUeK(D3UTBjKn2-=C&)*(HcmfBS>5ovVcSMM z#BeQ846y8O2R8Z}knb37Zb*--l#{&?pGdW|GU2oL}_KXNC)+JTUb3~{#sK=K{~ zD+81_*!H-m$ru<0kw4kDs=|~Hm2ZKo07M0e>FIsI-swSV0xGX`3;CKsOsNfYvB*vJs_JIM@lk=exEnn@!n1 z`s&!r6!eYYCZNfFP`*&?v+L}c#&PZFe*DS&RU>5_NjXwk!`BI)EL7P1o=}z__1&8w zj9(w+Wn&vHnj&oTa8?qk(RnS9LBnfoYPyeF>3~T@hD8h%VF1wur#nDu59zNj;G(B% zdl~ct{w)kTE;yf*4U-nqX8(Qm{6h%Z{ zs}3;H&eqK255wwn2>I6fMF188JcsEFBwUXfJR{m zg}ZkYbQ9peFJ)ZX@IpUPcdliPEiQDgAqL($Xr}?0=u!N`z=0ba!5~3GLEFdPeuxqU za(wxg930E~zn?%k9^8&Ve3GEXJXTgL11e8RMq1y5GH4}7-b|m5lLQYr-obnI9FSaW zkZAjGN&a6P<7QR?3ZE9w+{qgWx%fYmjJB&5gOrq%{UcR(s*cFn)T+@Zjs68U`fU3h z8RRL)06Mk^ECO)GU?`G7lY%|qhyZ-5OZ9-AgA4nl0k=1sj|uX#lTC&j7VPYs>?QvqHf}O`t-glaQvdu!(zFS5dYP@1tK1uX1^i3(G_iw&)q71C8 z1Ic5?5B15i*#pBrp;=Ah;0#*!kZj)TVHjy?2QD`Tn`jgoQh+OhnJtEL9teQ$Fu80X z_j&)^oU7--0D~pi-ygvXrVdV00OLwsfn|j-WTfX$<@nQnYiI5#9Hm-Y-5kq${MuL9;|GU|T7K55 z@x+~AFkPZc3x?62>vbzW(jOLD4mK7^F?^)6myUkJ=?sIZ$Z+~YZ%M|k?(Cpf+t$gH z4J&W(e}m@?Afr=IQXq!9A_BfvIvM`9<=Td;ZG)0lAlLa698ea(?q|!~D!MGwLW9`E ze{qX#txLk-G;W61?8zhFFN?pzQL0Fo2`&_Jgu#E0?5flAQuLica>7;Op~c=2Og1y20W`BHK&RF(XP{^$X^EhiJv9`8als664M*G@Z*w8<|0j zmuz2$*gT4o%rcdVoDHR~62OXO^I_ebDx->=*4?Dp!FJX8#fGm`>ChIYK-GQlOn&L< z$>Bz^OiQtMplEU6&yRsLN$h)2C4rg)>yEW_}W{xgyG@GsaVjPf&85k zP81oPvg&I6$Brc=@a9I-Wrbx!3;?#MxR8V5^dxW7FGHfAxQ4nXGj<7kRUyA(5hVgg z$n>BT3+&j`4&T4CyR38POxx(T^lN8LM3j)kS(glU+8VDste~6ZoMaY~)G=4KUv88a zQtz+v(FiTOraqjh(tFj6dTsBy0TI11vz&87WO)9|G3g86I1=UvJ2055T06fU;yRKu zL=Tz}hAO&sxFx7i@j*@m7boYpgRmoGTEbe&*-x(`-s$%`yT_C-m`M(mcVC{vX(E$O z^v)K^-DKfyTsb}@q5i+10Q>)q0*v~P6kz*_`1Le4u4gVj(h$GYd(+~w&Guu64T1r< z2eceSeYg<=0|Sopjg?-Xfk3i3Y)>Hwx4sNAqml_p^bp(Wj zia}vT>+l*J)<|T6%#bjUEFe|Xb42=0&20jnzx%TlMur;#G6!EW@b6~LY#;5TD+Nw7 z6u1qu_Vx*5F(rCamn9`faax$JHl!KR&!^BO+$)&8FQA88oncpP2mF32(@JpYzi0M(O8oKC(ac`d`NKQRs6pcCYPaQMciX^B?m% zD2?zmD};RB(oE-z_}?V@R{sm4?_UBq;QAP7eJideQ5F{#B0}2>P9#($pO8>B;UY%~ zYzX2DVbG0-(o#Saz$3~xJVhk*q67Y8T`=7N@G8NZ8Uv?LE$Bf(!x=EV2B&8R3=Rn> z9SvTk5V|vh#2SnVpz=hX;>ETgRK4peJ^^7Nzy+p5@(wEd1z{IdQG5xX20c+HTu@Xo zfy4lCS3pSE9?T_BhjGds_!9cB<=g$yK;}=TuVn(eW*uZ|O7kx(DQdXKK=E4uCA68U zX6xSQdw32dhoE1elbrq%h~^C-3{jSX|5k3~O#7YID~e*F|M#5UpI`++8=5m`G@PBw z_ASu2hjt$ncZGp0!l2Sxg)S<{;xg<%E1o$-Ykbd|u(OK8MP;TuCMCyu=wNmKh; z+MnY_^~S3+oP4PoL;9p_z&x6YXImkNw*(7RZ^SzUk?+Y@J z{{|ApV2UhM;n+T~j8kI+j`!5%qR4d} z5*Uya5PcX_QnR{h`?7=|QMLb>69h^bOnIZd!P zBTqJHN7Ui|68zmWc>$?*U?@PrMCg|faFDPqE#1t7n-YlS;KeoA)6k3?{OiaJES@V( zf}nH``F-%@HVj)Z@cng9^UvM}nF##k8(^z`3U8X*P#v{dxqjIUwTgjhQ?>Nfo!2B1 zqlH?uNF>5DkJM;+d8`{>x?^eK+=5uPJC1YprTdm`fxc}sGneiIl{k1!ea$o9-~$Y9 z{%#!RajZ%2G?VLpko2Cy{#fux@@xOENo{6oK`mn2x;D5plji3H(><~)6xNbQXYbzs zLWOBeKP0&zJ{rL+7OozfIr>nR{sl-6=4R@MQbk26hQ=f(Ibu$%cKfEUn9|crZN|t_ zGwel^$Wvs}Geq}t{h^s+byvqRu;sw*Js7b%VW*q<86xwc=uxV24q0E5J3p9Ni*&OG zCQFT6te4;sYzGCK_veu7_V~No-WEDOK8F^FaOwfoRKT#^lM#ywEtIxc=UVP$0n1yZ zRnx_rheANU!T@wsv61Fgc_Zg#(N97z(W;`XX=mvE)%){%Q}Dd$gz!fUE}ZG*F9oR9atkfIwA@z}1qe9%K{|8Dv+VRm23BJXLQtR!p=$8V~ikp&3u zH71JW*8s+Z!w$us@;+NX%e+d6qWtZarx=B*)h~`JUBE zTW1k0y!JJ!vL|a2r>cz@!=SL&Ay%pKSl?f^nU5-{&4#0QJf0+#?qn)pJG?AP(pq!f z8rYfyZc{j}D6S3;kL2EY$+JJ%lVo>>!@1^+kEAR(H@*=T2Pi$YY~7M7)bx~~0G{_R zTS6RXXH14=OtZnKTVc=BlS>`7>*(pi(4Ioa^0uIt^Lv(gLzL0R;02THcdpVi`d<7T z4B2xMw*z<;VrTGW1!pluN>mp}zqeVLHVQqwewob0i31N*gptdxQ~+sP`FJlB17cgK zBTUE3BTKUopIG^nu7O3*QEDvcsS7q9~ooBS>99S##SgFUpahEz93zHe_YGm>rNs1 zh%y##GB`6Ce9GnN=Kp-gILS}@a@Dvk>z-fYuYemmqKEC44@bco5X&Utq&EU;8KvaO z7Xltx&e|^|F+`T_Q4y9=4N2a)_Zdj%vNCg(n()=tRft6jCN?fNbY*YAUliy4ht)YG zfX^4&yVK(!1k8H_&9$j*^2@BuHHll%VZ7PcP3-FQkWZi#UADOJ4PF@<~7UEiT@%8Y_q4Z?R|M8h@=*(vy?B%>AGR4T_=0_6PN3eA03)zTDPZ@WGnYPB`jCZD+-aFyI$;90n+N=;HY8yA-A zYzvQ!flpaN;c}>2Qd63J{HteQS9dj-+n5y}$$kvC+BY{&j~wRW@++s;V;2|W#M1Mf zr)h|KEwK66GD3E9VOgrsYc~c{{5_$qn8fR~L#di@8g-2eQeHWbUQ!vGN1BqNalO%Q z)RYnP0YKp$O)U@{XL%#ucz;H?M;#Atl*kLhBvow`@Tk4MmddudLEX9CB|T8NH3h+~ zt|eVP2QU8Ki*Hi7;LO3qjf|&Q@wTmWm$Ed>i&NY#E3i|`RLJmC_3SC+Nt81fU#Dl zh`?m~_eztT`p0@V+;UMuf>x0XMxS2lIvzUo{3!HCQ_|hht$2M-y@v2;4BwEtM#Bl> zp$Aymn>s!uotosVqHkT#ochX0RA8~m@$%cU(;a?>>E60Tp%iQ*#dj9Y9k9CB8^c z)3mUCB!bAvUI_G^!Ra7MD#ECe zkj&3Y-7p#G7%Fs^)g@O*<-u%f!wS7bELq|8+b=+MS8bSN(MY#~x6IS{H(nHlm^m@4 zX_NJ5iSZpi8g^4WxAhk%_B?@C+FK@EICyjSj9bxtHywDiaa=Wdo`z3+PlvY@DJgT3eSNn<*xvsP#-4q|MaDCY41Wj#BH%G_DWHI} z1)vZh)4L$cc??T3hI!ydjX6J>Fac$q0@e<&1N85ZWgUPmBt%3m4}dETxy0{*tf0fv zrbNZIjb;{Nit)%?s){7_s_Amc8o`9Pg7-sUI89Y1!{H?%pJCiDP_Ca2&95K;z+pAH z^Nf^`R8FMsPWee3NiO*v+M+Jbt43+OV5?NVr@x3Zrmtae%^D|_A0=sAsIJ%Ys>K;r{H^(z$7mI*VF|-I`2>8rLQRH1+>nH@LOtc^BQ)B zN8)v5)1sz|3Jy3QA23QK<>eVIF`-^qIGYe;+tu5PiqNo8tts${q5bx(z*wp?2dD%H zA^AG2(oaCJw_yneT+&JYTXFI6*WsB9_Jc_mah33Qf$H}(hB;L50qza_BeGq<&18Z6 zhQ=l)!XTG@#BZUbt^Ht08g$TL{(TIAbw~;c(L1(C_FZX;>S@c@w31X{`3?Zg^W@PV zz&7D&?ujLgS^E|)F8SlsiOcdb{k6tz0cSv)7{P`V`0&t?0pN+)O9|dWB zz(o_c*^Ge2)*n??);p3TT`erI*FabSK3#Z-+vyWLrM}!d*h58Y^KMO^6FL&Y5cB=g z7X-hMJNv}Sy+zfcXnGqt=um(=@KVp0_e^-H0sImIyulvujK9R<7!XsIjjj;4ir|fJ z-~18Y&&$g@oFrz&PlI+-WW0k4)($X_qM%42|KC7A@=>1JMA4=NMQ@kB#Il26%9Mh^ zN+R0~#BZUcyaJe24Ebt)qdpE^!5M>3m1`vgEp(Ek9$`OQ!%%U2gKr}g|B8y3;3v0a zVE7|9pjuwlkze*YM_Jq(Z%-^(T-hG2@j%sx_4M6CXEyg@qRxCH_5@C&9XxZhm~l!~ zzz>pAAGys#CgOB)L9J9Hn-}VJuTf`KZbi=G3Yc?jW;gq9kV{UC@ zB-Th5Ugo|Tqp_3wZ9SMpW|TAM-rFKvxn_2={LE3J>%ij&0L5Zn@0hqsRqs3%1E(=_ zXeytXZQZOtK#wV3KK*B=@#n%nOk?-=vUqL?$c~P{Vp8z&=-KI0I$sem>hmR+w_U#ffyUOK_3I2oenoRWwtJu zGStX$Ub?i=A=$;tON)a-FW&&Lnc@KIX5@ta8xf-W2_kQYyFm!l1rE430L3D^qfq&9 znf&P~P{i<%|C&QK3IO3y1dtObTY!&&96_FupD!Wj9awsh)_~Q?TfuJ*id{<>?SM50 zoPH6iF(5t=W|U1hQ4qYkDfboP_Ix@=EWEsa>Gr{4a5}czt8>%L3f;0&0lVCJ(n`T|(reZD&)9pIaPj?6iz6w>Aj?wahoaFN|zLI>&=XtT4Vlz$3Z@N;`92!DYsG^FJ z&sCD=uj-?syNYgI^)#~`S7Ci_Tr!YM)~y*s6dN%dEifz}qg&#RX{*RZkEWS!itO;3 zU9P^nm)t~6+%2B3?`>qAvRZ#p!kSP%X@xz+Uwb^ zkBVRTGTuhbndOQN7>p@oHPQT!v}EwoG`O`@lGx#3DJPzj@!5JRSq*H~=c^M%UW zikK+o8<-|!yM?=(cOHmAc8ygyp<>v;F*;3TqwebZi9`J+m>!|HQxqYhfULeR%5=Ad zb1tS0r8Pll+zK#zoA3`;;W#qQdZ$(RV~&mOmzB=!jvtU!M`zrZ+U3e73^_pe*Zi@p zJmuw-vlzrmf(qpu6Y4q`_#;M70pMS#tmq&6CU?f{Ev_d4Gf^&rGt>T4IUiNtDS!=%x+GU8gV^PTa#)kjRwyxWQVx8xm-Sg zpl-A)fYxb3x-Nf@{R}P-*J$7$sdE^9i6wfoB_nJJZzulY6`w2*8?h;A-8*W?}azhp98%e+}Bs+KR9 z%2%iE#99+{oASKju8B(;JHZ%4HCi*vM8!Eep2M%L_^SERS;~V(b??RYhy=d;zmkrd zrslPh3Qm3k#fbt#Hjd!5sD&U#d9E7q;jw=Y5P&z1%;s-EKkeWbN(zJ*CL98t@I7Mm z1yr`)`tlyK0oLF*qpVjXg`utgaQmN-NjZ2pHw)=vWU2<-$ZBy!jkbe1I~M0q)(}dq~VtlpYjJC?pOkg6QM$Ae&t!r<|>J z3U0$J>g+Z$C>_w>cQgZwB}f;5S~^uy6Xm26e^7Wn_~aYWViV|)tjBAFy1@C2B3Y5{ z0%hlAGd1nS5r;omwd)mj%ERQ&eaIPVQpNTvzlTly*%o%F>e+kU78(^7!yGjVw39fd zNWbg>x+C7rwLj|3+bdG{i-dM2|5_qratCGvUU3_-cE1V%YvX}+Xt=jtQxQFa~7B=+yBH?iUx>Is!0t*KYn`1ZSXnR_j_{};S!aAG6O zzqy8`DN*kV{|8^?^TdaKko_ol`S~ua9%yp->rHLs9~$ZF0|8zHN-;yqF&O#4PWH@l zwrJwRuD@*XAj;&2VhtTzTidqVO}}Bli&6dvNx^Wb(3m;=3%t0=z;=jc%$+{?KXZ!* zzM?w!lg82ymY5V26n%p-VgYS1=MkA2>S=1`!PQ`dv>FhqOwJ8MDt}a-|J$EHeBDH% zl;FY7FaHFi9Rs{q`sGsv#l;gqnZq2b0EQ)umb?RaQN4zI0%tdw4scTb4ey4}^XJQ- zU-IzQtEhlGiV5m6SHL+OQ~&jitrNIU*WlCx9G@rIc+>kwIYCO+HyHQU!%i`y>I!4S z(;s61i@iFqe{kv0gi|m%#tF;#V_bT+rLk})NAC-Yl+28k>QrU+bn*`ik*ZDVm(_>3V8ypCR$+7G6mDm{`AY=N8y`o)>57(Ce%N_KB1on zMM4w=mVkD#oGKy^bfJ>LCz43M#UfJ;3DBz`g8;vwRkVF4KW3i3KJn z*r|N`Q=_$x4Cp?Qrzc?-Up`HxPC0+hga*rN{t;nkd=E{eVnxB5G$BU*6f1A)mi$2% z#Y#8XJL;Hk@*ZK?vHn=K#>lI`?y4J*)cKj?y{IpNY$; z21Jhigo-$3hRO?dg4OEjeEpyn^@k{>0I*v@pVBH=CJns!f!PHiXfbp`qn>FLa}CbL zy}UrhoY?<5YB(u2un_v}PQY=74Eg9J^IYo@24)2%hJc;FySp3Fw+|i=qqZ=(#*c;V z?$^F#!4FQ&7_o<~%>MfI@dg(&IHOSZ4J1k-plou|7(#lKfc^(s4?{e&QkS(Z`sn^U8e&_yZ3%(ysj2kV{~e%K*^EdeovfrmiH;6iAY)*`?! zXw`Md1VysE#y*T^aS;9uQ+y%d2m|HfQz)_REE~uc*GQV?sCuT;JJ;_$bScTA$X(Rne7#2r8_%f^KDVI&W^+LTF!eY!W!R`kT6C0@l;Wmm;AI7Hg6Hrr=jT;7j)N*2 zSF|BddzkN>8-OqHZj#&lkui+@w^;@f@qP#}NO=`3Edfq)oZJ!qNwVt7%f*|sAHpIt z7KNsu)8`~F|M8KI&e!7SLhimd7c%;WhALAje?r;;N<5fs7Gz^vtH@fs@Z~b72w-57 z{37lP2iqM%|M&|_6Ptlgrl=J~U%B3%DKC2{D_&TgY@c{znuug<%i7ekP`rKiQwp6N z^Us^@s~4oT1;vh6-_sGBP~lnBuoTzfM`$uz&l|@BlR$UeUeVVjO}<2sX|3ju~fcvQYpd{!D2j@kN)@x=1OtA1A%y~7Bf0CY)+l&@fIq@D8P z(q1d5txW>^j`jI3qT27s{cN!>t&G{>myk`>QYl_G5a5dM+G>0_$u1E37Wck*&6v5i zAiw)8W=vhIWI2U>zn#G@@xp?jgl;i*_H*f8kq$gud>2D3cWQI%{R5Ez(GtyMa*|Gt z0RA^ay~`L3^J`>BS^`J!($7wag*iXct`r6=D-z zsnh&DY^xpvy6xRL3<`rMJW@7M^I=JLP6wi|Mwv$^D~exLymC*QXYEhwrJ?I0)MX}7 z_|oOA?|(ukod$`ajkzM??VE+B1nXUmiXIl#LH6p(+lIMb>0`0fimBf2p3G7Lz2i#G zv9Tb?AiEUrG(c{|YrAq0-U>D5jQi_a)g~^tW-GSJO?W;YG_B%Oa=s}v5*XZpqJgJ6 zfEO-bj)uSH7PR1A$-v+ zCq$p6!u#$BIe=(?JbK}h2sCvc+^N&`EdLNrKZEGp$@^A z$-Y;thKjxgmZQb8Be{!xu`p4oCbNF#lv)MvX%NL|UU~4EoUx@?l`A2yEQyc!IR~xb z8qp`r(RK@OLhU_At#~Z5!su7mlM6*t-!6OFmNT}*$WHAvKAg!@4HY0HcBAx7Q7!kJ z8Ndig>a$1*2d3Ub^v{XR6~%?mB85yz5xmB8J;j>QB92mYPh#K?@a>l;4QvXXqlti5 zIm}lbGy_yj7o&Ugl($_Zt|tQ?@|V3Y4T1lKQOe7sA0tg&qDS$8&tv=incT$p)J~JU z`SVZ(%Sb66CP`-ujnyYQG5q#)3YXN; zTH8;~8tEhYu;}{=%jt-!-3JqwHR{wpcKK2@}=H-SW7Yq@ys|m#ktECseMq zQpTw^Ff?aG9YgN!yy-n3iN3yC0*=+?hb7OaxXAB- zwnvc2fWQ+t@bg=uyqX!Jm{q5=8rH}1mF!}bMUA~anJ-&4&F~5=d$KyON8^<@WukQuI#81^~j&|q^mkOKsKwJ=jLB%|xUPdwYgLTtk3%;Y}X5JP84srv1 z!6w?+@$_o5{=|b9CvBLGx<%uOv7G`Tjalw|yfvP0Pr+jje1O>_*p65<_4*Rb~W&$K$(2h)`)iN!Dl(}VX^>S_iXF7p&S;>*=t`KCeK-0#j_-R@Z1W7*O=U$QPM zSKJ!jHJJjRQZhqA%<#-PZt57eF-3z5Ab(K*dg`L3vHv%A-d1{poxv%SR)u$x$?3^M zcz%!PSN#>>ZDMz2qYSe$HOf{zyp_fG8^tK}N>lUIo3 z?&*?Y*1J0wuxb`+Q>f-etiD%KqwzjefN)u5_bR*HZ~JN4rlR+IeqNxq8{Z4EmX_p& zVFJRaoSQ;foT8%m-_NXc(CF1!xjG(h4BX8bysV~F*E2mKp}l+IADgc3ONRze=3!Ov zq!G~yR#47|XJ>rA%)R2(f>heDI(68KKq=iDNNYVwQJ?y9FT>^!h)uB^f2G>NmWirD zzkT~=86t?tO2`k3ijF?V$$3B1{dqJnw57k}j>tvwBVhf5^xf!LSLES@mYIX$OOx+) z7%tgnG_r|bKaWA0pY3=hVTR%kRi1imdJ_Gm1FRU`{8dLoBGE!G@?vfss#Hn+mIv^| zSs3VCI1t{yAn9$3DU!+QVXm!wg)lJ8go*dvFJ+t)q>ejx$AL}zCX8wkuk?GiDB=qja}|V@6CvF zLN9BUy)MrVe1RZhmgG5b<~<4d{TTTHK}1^zWx~M_P>9$whfD}bf;6lX8{{sv7ZLVY z?%;FxW&y)5qQ6lCOT*#~;4Fw4#2=svM8wX)0)?t`p&8gF;ZY8&ebx+c0Ehwvo&d=V z0ogwV0G;gSaYMiaUecTGjPuKj#296V)G9ycUOoE27VRMuP(c>6alw#=E}B3a^M62X$_d zy!3p`cp9k}y<^hrA4^G_s2yL75I((JM@7g=F>0zu;WT8N3iH&QhwM|YJFVUKd-VNy zYd6aj9>f!;%Rx;qCwWTdl%$*2m6=P52~8zZYIe9>``A`n&vw6QRJ-VwvtORtGUh=h zX62@GAB zfMwNuOS!?KE_&lXW*Q%h_}7gK|5;Q3 z8*{MKwmGV|1!FaMz`-n#8f5tdsVHFa4TF=R6ylAoTarL6aTnqiCmP+X;P8N|Zsfr| za{R!fWGkAMoctQ@>3^>SmAd;509Igew60%&Z}HRkrIX$!2)ohVy#bE;f+D<&;~#jE z=eJTEW1^nztJ;zzih5f`#krrkG=Vj2(m!TikK4>nYne)utsENu-qG%~p{ra}@0wyI zsrKEX0biUTi@Oxj0@R0?HEibR9jCHflZf4A#G9xM>{R#&@RyWOJ%FE=HfOy1nXg#V1zwon{zXRb+ z`L-hwkTmm8x&S!UW}o}=0sfCFmXQ1a@^v@ppc#)Egj*1I-Z>JM^Z%NNVIMrBiOI=O zqjS$|5%On)e|+FVI-lP^m;Q_cE9~=pt}x?2I-iTd`P};dBj+>Z)k4>&b$O7(zsD_e z2nxmn35LLQFK=(;lDMR+`yL*V>!29<1ikX&ZqC2k&qAXkM1{W#81WSr_%$#%NRAV> zwY5b*4QPEfK#{vmFMn0O?G?=&TJW29L(c*P(sK_2@lvR*4{?tFh0x$vy!YXj0gAbX zjW+E68m56x@4HfIP$`g`NeoK2ZW0#T>8fZ1Q5m@zt**{U0 z@m(6K7^fzik4eZ@**N4*EnqSv(4n`m|Ds)+!BICcnR1vHF}fPa+8~_8AJ;*QhM|*h zp5S7E-!tHL$|FTR&unnmINFjVqerfk*7bkon(j-a${gwe?^$F&yPg`qWqlM7Zzwt+ z-U=A!A8SMKu(9W18JjWyhpWKlVPAyR z2iCPfFP9Fw!GJ0|wW)u{P^11z|I|k}FguFu?TV2S77e_Y?Y{&_j6g><0W01AiuU_JGtL2c8!L*y;|Hs|Wn&CEZ6{X^>a&x74!HbykXt7Zqj?U2okwn7#|OzyNci zfD^FeOf?V5e0iY^;I3TYVRMOH0>oJYR)4L*5)$q~z_E*(Uy(&8^aR{ovM)e90l6Q@ zkPm;4Kiti!c1URfAt1Hz{NpIH0M-xGDO{1PgPc~uFJp!K5W+VO3~X%7dmGYo!as&b zM!0J50^DqESs}-@0C0ouHo->B-NheHP^|_!tsyY z4}`pecRf0?%v(2clpOd=I@toa%^qXfs_Ao76E;10Zu_p>jPrOB%u zSTHkEY9!6H-l|&df`aJWo=XmY6P?ZeaMDsyjl%tkVwfRC4s6SXwQ*o$Nn%F=F1TD6 z@GZA3`$CnjP0iMDq2c_t+^?MM;E)k(Q+@rXfG)-Le7V>F8UYYcB4_jQoC~5Up|C4v;}0H@#1Z|%%S@eA5ideT96FJ=m($R>7OwFg4-L!qPz3M zD;{LDw?5CYZe~1fHiy(hq`?9i3*3Njo8yMAqh395tL@|^gn*PQcg*n{Fgo2R*;)S2 zcRf&pqGX&8~G7*U?u^TdnP1C>_dd%s{Wu;+#Ou@2y~#Pf7Xl0rMkIB3q4mA&9se zi22pnJ`PxmW;{&4QX*l=neIP$_-9t;%WlcQr-YEthZ&C#7cX7PzdK4!j`In3+C;%T z(ZpcdWIDc8P_QD#_MPu{i?>+MV;pFMlvT(In-oGHss&ahizGYU3J%d0p};3&QQZj6 zxxu_Q+;+3|@#CPy1G!Chky@Ba_R`m-o#g~Ym$e*4uAj^VpEWab!=~3EVov)?)c2u2 z*YL@^uY@cDA~DkW1V%? zgk)=$diT89#0OL|broja6^lime&se0Rb3{K);9Xt(SIcH_VtVvv7@vtKf{K*((94W zu1#Tq)Kb6q{41`U3tZr~=apr;=B{QZR~UIp_rtQGDO*!_C?@p9=6(89PR@s~l;F^Y z9cCJ2Yxh-U#6X={e!NePqHw=hXJPn2Ci!brULV{i1D7Fu`;D*qeIKT(9X2USDbJ9x ziSK?**SRcv^Am2}(xy^H)FkMv?!1vwr>9b{Izoy&xvvYaA$5Kb&>*0vWI=c0I`6j{ zcjob%OvBAfP64-~^Xe_#(mZ4HqO1jP0O#F%(v!t~TrW{j3;E(8aYbdaD1Oj7@+}h7 zKwJRGW@WAgy#s!~8TB2&YXoJQzzv9U#=mMWC7T~l=sc5r=(URISP+!$g9^=WwtmY6 z@9@J93_xt&8N+&5{R1#^FDv?bk)%FSxW`1Od$a*yh?P<5p zC|p{ft@Og6qbGmRtrrnu#YD#@JRln7ph4zCmz{h6<45NwljZU?(HqSfzw~|C{hW=t z$tJme5C3jp!^f)KQjleqFjeQnYanP)zyGFGx!i3=j(4L5ia}aCCs!!;ODTmDvM=+pn%>e*}p# zcf~`-%GCDz_wRov^3n8avrJjvSYBDF1f(Xhk3Xnh-9LUgP@1DrO9GFg3yeu!=D(sM zMrYvsZuoM*a2w&hj@$9gVGO|?r_nGAVwYgTH@z}GuNHiE?)RA@M z%5D*WMiTn<>lsI1pum1sspmHt7zC;^lS)0+qQ~M%;*(eHGlcl8R?GE5S8Hh_Le;^T zlAIN3Cs{Yn>j{R_#WBAY;bwQG%GdLvAMsZEDmD6HACcE2jaXH)NytYQe4=d1BDwaK zz-~V4T!y{(9|lUuU}VjN?KE|idmuvE5?O{V)kW~8=q2Z3=wC`=vkxeK`iXx&A#fqcCD5Ivn}_S}OAH@+ zNVb%2(o2era47>tGc&UmWwuSFCTgGVXfM~grt3-PO#Nl9PH<*hqwHbU8iV3%R^ zt5G@v&;EGBFGj9d+hsMw^WfVJj%;m~29Q2chzESxO+AZ~r(1wg<2?u^04NJt>Z5kB zUn2AI$__eVhsN;maKsUe0L4M?3nj|G3h1dk{r!8X%m|7La3mm=2@*98^I8CAO(gU( zGBbCP^PfXS0`Hrokr6G_`m_kp08(PMPd;QwM=tX~X!^C96&O9Wee&uy20FT1 zT-PcPr@`-lV5o<79HBsa85)Yv^TF}<-}l=D$teig+7+JUKAe0>U`Yn0YbyKL99$I; zCJus3Kr-Utwo$4aU$f-=-eoZ~6hlc#$*(}c)x`zHZz2s9kQVYl*iaMMN1sn3;D7=b zXz7IH!mlqbT|@buYHko=oMRhUgt5^mz20hFezdYMn_oi zD5_&eN@w{m*F!fZo^?m6P35?rjAjbu!cW*Ods%(IJ0)^-x|s2!zYfj5RCc>fyxcj% zg`SL)@iDdJb3AIXxD9cSlipFY&|4K3=dVk00XLamr7{n<<$U;8TM7l6_2E|R zd7g2fF=K?su5|u)i|+&9>sy`*TN9e_oUaoY*rGn{u2x?>4x);5PfR*#;VSs}0VC@D z^{Ag0Mr$5CONHX@F>ht&kRWP=r-WoR0>3Vm*OrWzcUEWs;>Uqk(%;|zHHFg*IUFE_ znW`t5LwqR!pfbH6-%|tlA>0n2APE5_G@gPOqOL)7JYciJzIoFUboKX1aF9vAvG)oo zD3swJ!U!t&`x)My_FpnvQBl~-m*`m?A30V_ht~D#ofwd0Bp8|jlYQ2AS9I=z+{ld( zI*5WW-bTa)h%Oo_R>sH2iEDikojdePppJil*mC^+{mIK8xV3mF6~x0Km;Aq&++L7B zt6Dv{)diOX2ri*R!qcHWW(b@<5G0iKNu7eP389-av$C4~2qS#?`t^me{PQOPz!C_H zj67;)`50Vvy45Quy^5^L6>O4Qx&M=Nl8h~{{lhU4@x0KrD!yI zZ1w$1`B|G);H>v5EdpYnyETe1&VDA_!J$C*=K9%s44J@P34h=ph31 z-5%EiXz$#i`6!3>J@jakBH$y1*)`{$uQrbDYSdvEl#>UQdS-z#?>}Z27kAwg-rz7i zpn6G0jFZYgTO`RK?;y}{zBHy<-SYN<8Cr|=EM}0gNp6#h%NYlT?Sd@(t7WL~- zVjh}O_hVlAnMwCqnsZUY(|riPo$7Y+p(PCA3_JB>o~zd(^;_7|Y|xJHma84SA&9@c z!@f~`<7x2YtH~JwaB%!KGam)kK14)iI(>)B@;+oeoTe-la?jmW0d#y za_$@UMffeWb1_p>tXm2eE7@csiJ-nAjE<*`pyvV|Z1d6y_&+Wk@WcuOk?adyHOs#2#h>BU)whd__JaNzm1~*g4Rvky5;$|{hhHm z8l%3t7O|F&C33SLurcm|*eGl79pgVN)s+|z`u>}EQo=l8ys718vy&Q(y7u4Z6Z0Ns z`BTz0G73HjG72U5wnY}nBL0&OFIbo&Re6Z;`IG5gvnpQ}D@UGxiK0oC81h-E%Nt`- zHrfw=1>hXj%JpO9l9SxWk(b2VGGJq{=hm%7%XXi4unA28hxed{ zJ=3{O+`IRNy$im}=jik*<2{*3{v>J;JT8yUSmk8&8#{b`7Zntp+J=+|I@awC&L ze5?S_&E@j;tBJ%EkMLTs1oz8RKffjVsk_@k%_CQ>%9}}W7!)EbM1Sscj0Ovmq+*{ zfj{$`+Jd|mBYig~Zjek(^B0V=_t#|`3HQ3Swj-Kj2F?lyh^WJ~P`6LWP^uk-55DIG zMRVy|{I#VR(b37#HPG;6awnQ%qi_?Si|V{$8ZWv#MH5rl#=11ff;(JGEB9ECD5_m4 zq^5cb0<6MEjHG-MD9gTG7>&zuzgQ?t#*&pSxO)@tbl3&Q}=*m1z{*8KA)(X|-2 zdl)H`qe?$%yTa0kF{;^73tEooQL-Pi3eZrz`O-ywu~GO?P{LNImOhLJ4`-E zWWmtzFi-#Y*x0iP2Fl87kIHJuh6uwmB2`&2KAHdU$c@C7GRnFUl*JWvUhBg1mIPg6 z;h5|=&qUk6@Ri(9gcUZ}L}X$VLJY6rFbi`^NQJ!!IY$?XGES{)5yBlXj(HG>u5W+i zxXhy7@M8eAn!U~)8+X>Uo8Bc>j*@q_v(FWxBJ+En$!Yka1gYE8yf(O*T}mC%swZ!4 z@{g)g_c3L(rRZd@m+N!U_v*|64GH7*&n8FEOtqL%awhd6HaFq~Yi4~a+Y0^y2LJnu zZ0jErb`or-O1;!1w+R>GS!6+rC6yZ(o4JOOLS-xZn-AVpUOC(yJ~XrfBKi#6h?pO< z#^^!1CO`VeA0>StHS#avZ_pA~(%xkGG9f^!>o}wIx+he}dZ+FxaED?TM+uE_U(eRs zu}tP}XV~aHEu#n5VuDoXT4rx6D|2$CVn(TDPQH}H;XjR|vCNgZ71e0UPZ#t0nF7_FDhz2xonwo?EMuPCrB;qyIZ3`NbGkW{|0=H7s1IQQu%z8hz))Mii(+~#ecx8} zJ<5SdVnv%4!@G*GQ~`xlK<2fX0J}o8A0|< zIv;+neA$kHB62HFFLGwXhZ<`vat30b=R_-yYetGjbV=CDS6dgVZYRg1yGzmznYfW$ zp-6mSh{}B{U6hXDz57`4pZA*&y+no{f|EDZ;;hQQ_o;PX&M4YtXI=}H^qNe!a@Z%U ziy0}@Fy4^}4KmbHhNHYCvTebMUW?z}zfgP{m#uQ>EZ9UZEl(Y*P1cLlkf;_!FVd>(wtB>_oH^{O;ER z!wQxI@~`wImuyGTy{{RsomS_b;w79qxhR1l%5O& zfeLb4D2r~wgm%V^MMgO?+TH41`mwA96g{d$(zrCE9SkHsw&SlhiPY=#t=t+1_&f5r zdDJyD1~|;DPrYuf@k+^K6ZqbsDmx++iXTq#qKfhn*(OtJ^FuK`Do!N#ez=A_+brJ| zCjo+CylR6-RzgI5)q@d&GF+xHKg9V^G*F(bI~dk;76)@OtMKen50?{-dxIcoS@&{Em6M&E7X@U{8$Q?Y_cZCgsyj)X6S=pA2`h4HR&q*&B}3#**8 zbPJ_yMy9Cuh1&k_vJDh<#n~oRbjfVdY1?J$o4Xw>)p=SJ*rPHUEgUp?mC=L2SH&4K zzYhXdJsj4&?No}GG$LNYFB$RMqA&32dEc7;q)iRq9JyN^9QMfi*1X1F-0&mI`^Pj_ zbU^~&32fNBDN5u_c!uMe{z+uv=d=w5D-A{Vyq6hbNOu+7z`{!0h^A9C4SV5#E`#!p zw9$F-TRzUW4>DA^HC~&ef@Jknz!${NN~uNPSp;EJqie!8Uo0_Ed>)=ps^Ib z*-q;vc*E0OO5MLn&D`0yo9ry`l0`&5QTp3xkmMMLk+Q-&J`kPW<>7%S+%w?N#`r#x z%58!47pebJ2xEMEA^3^_U6SR~FkU>NaL_Q{?+cqBqosfQePxz6u2>}xlo?#q(Qm$@ zQL4S|@#D$HG+o+=Da^NNCDn1FS(>1qy z6=ff)x;sn2qO`q+=WcGXvw7$|tTXDfQfzPBmo&7Ut!V$1L!$fApGh$Xv?`d_=(WvF zNGAtaFR?~thAQ}pGMXW&<~$&w=-0wAy+^l}tnUr31|~JpwB>Pu65QFAb<-&il-wic zdKuOTYvlt#W3ZB&=X%gSCavA*F4~tT5v3*RoNG207DKJ z`4N}}OpcJAICvynfYN^68y+3~9wgK~w(udX9iP)V+FcG>+uE8z&NCuu5N)=EmIe|I zi)4$zM2Ucy_&Y%86uiCvS#&2yj-%#(VaL~c9;H`97@`$z_15%j^j$%g$iAgsR0&Tj z(fK5ju{yGBc9o82cF*QAo4iCa#i*tIRXRcpLT+u`WUPg4pY*Opyja@HB7#x57*u)| z+gtX*WsDviX(xV+xgEctvv}c#Th@ECFLNzP_%n^YUQz&kLi0hiOj+y@1u^6t6VzyB z=PcaY&6Ib`DJ5qvFM)b2WN01TUDTm4NO$MgC7a%6e@TI_JC9C3U7&=U&y^F)nVNG2OePV%r+=bZz3v&=@G}^vnKU2_^YHh`0^H5k^Q< zg9+WEN4StCRloZevdMt67NJ{u=i$RxaF-V-?*ywlP6I?m@_)<-vE315iuPwUD@L`D z5ezNx0NvJoq2c__bJiPf__=v`2$9gr*7mUJ79cASdgJAvLkO=1nD9LAj@&8Ic4GZl zkA{-^D3l&+hHeuZ9Pv322L#l;j@7cw{6g0ZxYC1&1ZL|HBtZ;~HgIAfsuIL?=DMmn z#|z$eh+H@Xd}cyo;!C-_h2R_P+11sy4WA(j2?@%A`3eP(6@l{G2dyjTiWB#+&=6(; zsFEbg#}0wK2`$=&_4n!E50Wn(iHGh63}O1%H&39$3(?$JXTLwg*K$}XgH$%i)CN&O zvU4D$VdWPT*Wi%JQFZtLPKyhr51W?$}q?6x2bst-%B&^wlX4(Ksr2t51d`HMcN8T6B*cnl5iUV zqytOt{VH(Bh|yR-&M$n4n%}O!qr5d-#Fy>P(rQOFF8LQ%5tq-2{$Zwz8A0N9+q$!< zHU>cvPR{$BaP^vm^Y<8Fm%p&X9Z|X7x#EDXOu!`>+QFz(ke^4NCxx;bN8WG~C+X!-Q_tk~w<(*85@FPaRzv!9b3e7S=)H3i+|UCiqp6RbLW zrH6aiidLw;x$TcfeA)luzdlo1S|XWe-8Nu%qe;34gU_tDh9b9XRz|FN%LLN!tb}YH8Z4_yed|@#iRiFoe7;;15a?}J zOBb^bmP2lM(Ges&;vz)4g;X0VF3)T98_pKr?4O=Khmj(ZjlBYfl@%C$tPQqyOaC05-JD0|+MpM^(>5rl7UZtfX~M`l+(XZ9Y$ z+IkLq6@2Eed)ONz!EKufXU2Zx+}~(`yC(pW9t`%M?KFXtLKk@HJnMI;0^#4-nK0O4(dSqicg!+}5pY4Y=6vqRiL zpwA0jfdAern}Qb@c|iWIqO0#*eX3P6mI6Q&;05di0jGHss8BDV?eQF%fe4{}YpN~= zdeCo?p6iz{UzTcJ;Z%HgG@FG3T`frh2;-hk}NnobH` z6t?MZv|gnd?`|eXKe`)BVzYR7=Gs~G%k1bQkrI13Q#+w*qFCxdl^?}2;(YAvY*sYY z)l5|zR;R9dE1@1dwe()HnEv+d61DRL0dA=K&Q`_$bwLzF16amT6ciNZ!PI;G%PgW3 z0YSzq<6Rv}Hn5GsjvNfc_dk(F040IXGE`}0hGOgJ<_tsy8+uGwpddgQ2px!pm}=Nu zke3|Vx(m=_#(1_j-}+_m+YN+!0-q9gRQm;G7TBaX@ek!)p`8oJlApwxu3uWbLt5uA z%CK+TIHcX(8Slcv!jfQ5HshgcG#ndhF!ot5K-&K($cy;pXiyoEb|Hg}Ajq6S!YE2g zOZ~TnGgQIZ)?4pvOxg|_L%`s&fP4HonDa!g&X$lDqxnJ@7^-ysM;gc!2N~G>X%_$m z45BPxKYUVU9=cj8yt4G3Ah(NOAhP4mHhG=ltLGD z`92Ak{(`Xi*3-H~(q`U%V!)eFddK_p zBkFqHJzyLGN+K2ZMdvv+HMLX93KSUT$&kpx=*>@V3*5ne7+Z1RmzzG_?cIHymPQ4p z%5m6sKyzdCMGG>$HAo=EmWh{_Gzg$xS#ETwsHlH876f&CgvJ=hHalxX&-GMPqWYY) z?~@pf-oJC_`lpFUAV~v?II{7>`rh!J08j98)Y zxy?{jAwu~=bV`Uyvd(1amV!?iYQCb=(pcQwdky;^^tDO{!%KUO`<0z|`lIre^B+ZJ z8cRuQ4CPb!G8ZRZFsQey^$nQWcm4{6|M7M0w`yv{V}apwavrHh@z!y30N(v&t}CYi zB5^s~LY;!vVKhupVHC%=rmts0OPX@}h%iW(m-7Z{`)Ai)zh~T!oYDwUWI-KdgKd_b zj_BLt{n=aHCaGTs~^{e+^=$cx;w{FH>L7Ki`k}zG`S65NB)sr-n8Vi z`h1tQXu&1ZhwCJMluJoln7gM+5z;&ZR?8TdR0h^Hwa1DyI^K$uN^_x^r^bRA_Otoc zpO?g6UZoMDqo%5k?UrYj+^)XI=^;wj=R75Ja26-G6L&x6jCM<;h5JR!{Rm`B0^jes zF~CgjaB#%HML(g|p9u#2JNWP}?2K;8*m@o9??i{^cEaf3^HD}plB}_@F?q=1n)?-$ zi1jeqLh>XKa5W@pEJLaBS24lX-65Km*?WgwBT=_>o6A9iB(7>ifTGRam%D`N7V> zQKSG7_BfmWq4M zTZQR;&*)cv^obneBA{s4C)ca22W}~3j-!5K`|K=;PLg|yUkjJ!aeYOZFzt>iVO*Q* z{HjXJJtf$NdR4>`brRpM|DX!3syT7({gm-t(hfP`!46@(-B?i{7L;-qg-7c7$*^Uj zP;uzW{@Hesg7KN9_?%44%0_V1*^1q(R&s)3H5pj+X2pg22GS}jcnl0pgpm?@ z4{K~GHA-w9dN7$`F7X>BMZKa#o-$!Kmh1c~bU)MamQperqt7mVT(}PuUG5U)sokkF zxhIvK0QwbRYG)g73v(P2=-YEUnSb$S)lDK?9$fm-7x(`q@^Jb8i#*K!Pa=;LFS+fn zsa@f|)JaOOrnYxnKJc&l@USPp0scIf$Ce%nY%o?fHUQ0Q8}n3E?PWgw3&;p3(04dN z*z-lSyQSSueq#d$rY}DQD=RD1pO|YJif_SlKJ5VU(7cZzD7s@wM61}Y5H%gRZGh!c zTRZj#z*qzH8~j~GbP$OqTvt1xqk$w<1LLn~w+ZZh$b=sXIyth1ysnx|_}$xrFG603im^-8kc zczbi~N52B`>OG3HT*g+dVdLFZR&C-}st(X|P=FJly%BXL-QjY>=FIJ}dKk>d$;(8YN z5g0LK?1r6C+jb&h#sElyr?dihF3d0ZGgMKb2qF$nwod_neULP5`j zUO?ibq4)&N%|0;e5j{qxivb)7$oO&3ovYl{5i|%LFs}w5!Rd&_&aVc#D9z&kvi^V% zwl&+74xzoLFzB9rJ}idRH=xWw?!ky~C?n$+a(RG6qz^sJ`ctKW8 z!#xJCF(Nq!O$HnZAk>Cy_7ezQhX2P8M$CwO;$8-j=HodWj^KUEuc(NHzlT8i5JAS0 zF*zlr_n>c}2ndnJ3|;X+jC9nNudAa2K1cV+4naW4fe{2qEkjxeCDF?2KBycKNjNaz zE@sn#WWbdgiCCY&_i+FM+=HLoeQpg`ARx{I;WW&^k|8`1PNp^pZBm=uP5nS9AuW9k z9$0fXA?P|`|J2mcSrL8?E|p723_JPzPfJa-4SwRsvtCPhAQAD~^f9+QY?gz5ei&E_ zQw)UTg^Hs((eW{!Fmlz9)Om_L61p=MgS~Kgh8^}+lg2)&^ZIp-a}u1iQ*Ohu)}89C zhdndJnkj)4Wxc^l79A70CzP_|HV@bHWBS5VMEOEbzM`C9+@beEXQ2*6r*9RYA{gKs ztKe{bTK@K0*Iar?mmyxzCo!y7KR4NI;srTh|Mgoc4!Ak(tRb|SD{qp_y2nv|?{Q`b zJ=PEEA!|o_Nz1z9^Y_vwlBjnRP6L?RU{IA8WvN2I6_R*s-iv})>9<x=6q( z-&XLoPu*D(?&t^SWLwd*f7#sxXtenrFFh}5-6raHQ)pSS$17TH8jX^lhvz^W5)7LlWqgm(77tuHxkMFrCj{s#yB~zIzt{z(AtO z6F`8*h@R-h{H}uRKoIV9fO9||k`h7ka0gZeqma<~F!_7T#H1u-Q9+&E4irc%eEicU za3@T!Oe3xxFuy;=-5hw7%Jm9{kXaStk_7c2od8WR2fU)&2brzU=0QBU1Q%HFMj-;D zTL~4+VAO+x=n!<=aS;CjOgg{mmyese5c86pTquX)6kM)Bv^x*4@=1o4rsm+CH%M+= z7yvJT$GTqiQJ(s@fB5`*Pq0f1T3UKKbg%Rtyj`+cQ+r)^b^6et*8itbR`?dS>heGr z|ECXE(jWcSe;IEsjVTzFX51hP{6YPctQz?<VOvkT9sX)Mxpwlq#aN#3Ow7dOdScT*>i2*8zOH*zG|yAA zdmW+XzJ9cw6cAAM)BB3J-Tzpe{lSFdKs_h!ji*5)7AuE?D+Cmgj5ZHX#m|B`+E*Vr z31x`*BJq=2-oc$da-L_0@~*y{27wXpLPb(+PC0{o6Zp z?RZ*ls`~lXQ+I`v$jLCU@K+*xVme{HPcH z^uGWvsOkPbp{O7dzXf9VmjhNJWiQo;{9nUukbpanxFPRbI(;5s+IRP}`xR98Go7X) zt^J7kF=CpoKYmqLEg9^LPC6tg!mS;y1( z!c3A7{nmGcRL$YE*Me^MU1ZbRDo8WjAK-_Mq3u7;a7NYFRfAmU1=q`JNk!0DT5U-h zpp~utqUe&zd!s8QmgdE6rC%m3PRpwNf3^)!D3NV+JA-!+zVtQ;{uTMp=%?C)=7+4`fq_4~J-o0!OGe#d! z^C4KnHhE#0Yr4_JDZj*W^nN&o7gv_yzIA!kZ7=i_%N^0BfSaqo^G0g3HKzzfloCDI zkcQ_{jv@mQjmt(`OP?H>p)6BN5qL`T8(9YN?(1WLf!5t?ZcY-NS7B z`%{PU^&1?2xeo;b-wIt~>qfF4Xa0HLJ|R(|*t0f{QTwU@Ro$qCFbKVcGYHdNOZ4Id z{x}49xbMqmJzL(X`0&v3rlec&p@lH%M7)%Fitw8il^!rS(=ai51Ql`LEd06xoXdLCwfyVn zUE7$$J6z87Q`1cC7|O_fSfRE$D} zC>V!dZ*GvwobRoN4a~=O5#IPRn~UC}F+Rg4Q|F~Thm=%>Y+A=&A|y%4mx=4OLNxBL zpZ6_Pn`&U@9twXtxb~cw_%3>tSo>yF)c7Hzsv&ww$iq^pejeWV^mJ(lhaKy>T_=H} z3hjT(6Rg+=7V&TEMs7b=()^owJE4n$Dx)iA;X8^|$w3J%1|>HEK|jy%C&*`oWvJR1 zlN&5GoTfW$!-|HpMOM=nRx>D-t-&%esMTJO`G%$Hm0S&~{hO!|w@|%EDYuE(8s2?4 z#WFR>_AWnUDKRi_VK?L5ZtRhJGpXRz-^V}o0U1sIC?`f9f(>g)zX!=(2X*QJL8H#7 z!pDYx?3kG8vE4iQ_+)WAo>WoRb%eLDq`)J#IBq+8p5qp(`8haTR_!$J(%;Pf@rN==uq+9ouU<+;5_^)b{`Uy%QAX<>g7#Ej56KH zTxYgvNNcCyoiYu5F%*$E%_^_*Fgm-oDU8!&SKnd00u=zV-P^Z%yX1$~nTZmI-(tXn z5IM1YN5$58$5BH~5$};KU3EqjAtOpflAFq&xs~1f%F6we&-S7P^sMBrg&O%v-&T&! zL@GTziLc`Cog`Awa8l{WT&vM1rbi!UknJ_l@Np^jAuXL#o$Xst)mbYDo{S`#yuOR2@^f7**T$T7iCa~o}*3|(K_C(`uBZwbYCcNQj@ z7`a=z@)@J}mDxiVv7wsp-+!zOBB;YI9O?oCglo6`>aCxLqSfo}(v^a3j9{dRWiCi* z(vmD69wK5j)B5RzqREA?k@G>4S&N`dt!+pjKQ|qT{cdk>*K%m7*em>5%+tQKKkk1p z%$IXLFr#|Gi3Lm{5v)$+P-0)p?%oe*79tk8&f`ri><`Vd!Uq$M*48<*qste5yeqH% z#5+wG>8A0@q2=dW7s}|5WBp{fzMRS!_Xh2?L6h?;c0e8~zTBIn(NW!I=+$aDOr_6% zq)aNIP0fD)Q3R`Ix>RX@Jk4q}Me?4#(EnZr4&-GRf763nQG^#3j4K}VYHvOam2QON zjq}2i6XwqEskMQysMpptNjb61VcgJ%Tp>uHVa5V79HuJsMcMrblE-h)MPzyKzAZT% zB#miQ59hvJE-ri|cWHiKu=Zd!cNwm|1&EDgvR6EI^@4r4By`bf0)O_iFNee=S{@NaU5N?yGD^2kAYm<>hz! z@rAkHU)_h0d!KT?;@bDmti3|M&--4fd$x;R-J(K zm2xcM69E$XQR1ohB$I>4`M$kgO{4|q3@u~8A7+(Ac!`L7E<=6mc3LUvnITiZumY}U5 z3d4daC!ehpZB%sI-1{ZMKNTL+P{kZ1#)}}GP~E!RojsC~<(CYH0)FAacA1uFHG}f2 z+LVMM!BrJ}9x}eR`gcirJ}IYTe}w}xs@7DKb~duFFn+nq0HvF< z*DCC0K&>ks^lTBSy$kT5>>C>if`8Kl#XYFvev3AzRhE%vFpx>BW3haDz`jgJ37TtB z)dTIPPu0?gHlV+<{5oWOi`(?N!8Iy)QqFIY7*jwPmb{>oYpHNqQTl0lD1pBe>Gl6A zX<2y(Wj(s2!0%(=H#!H&&9oq4b#pMZX?7P#)xevj;X%fgA|f;}l!D8l7c^eZ-QEo* zoT0>h-s_vbtZUhu?wlwxcc|{xja95$(oQ84#`FDZjOZ>N3)_!Op(s4GR5$r0AIbXs zo$EuCxxjz^F&lU2dV5d3BO=>#h7Dv%xS}{T)Zg@nK4C$1>F%^}x!bPBIQXuw`Ku%r z7SFI3v7qdx7AlsVz4WR^mS%k6x5e988cd(=GJa<94}bpUK%1B$UgS8Dl1Sj?q&lTH zA*X(>F0&-H7=1N`jzye!N8_Rjh4|@~1#`gg?NJKWueeWw=-6?@J zS^Bu#5||g$UQ1EXfsO&8#fQFj<|iuGUK++~6yoM80#U*>PgC*fbm8|u1FN6L4CNin zAE>6%Sk#VP5EQ7%u}h3BC}CLtdKqpBQ#OEgV!*wx!`=}DJR~ED=X6!1(F|cbRKqT! zT&=8G)mS&Bg5CYa8=f*~wY60?BP@2b7PFtFNo1=|X^-sJDBZqW zyN;`ORySXw*h{fqO@0!l8(rF;uWr2f>(1gHD63%($&t`X%+)Og*VY24T27m?l9Jkh zu{mHjhJrInzfJh;4Xk9@~?KvnNjLs1j z3@j8n2q*-1Gh#FWnW^6{n9ug11q@CHKS-pxLH0l(q|wFGVt3qdG? zy0-RmW38(Z;AE7biwJ-QfOyQiG`fd07~lo2&GZ=jvP5Dxx43qYQ7;6vXAf9;K_4Df55~AKqJ^&w zcSayH zH3CB1YofVN?@CV6Ykue26aJE{vhY1cGc&yHNw^}VY9f1h)uc~w-&E_-t$P)^pJHr$ ziJ_q8du-%R3aYomnk6?Oq%t3G@~x{gN;vIlE~7^u(0M7hu3~QLIbk(mrHG5S{jci^ zhvF7z<||1u5<=(kQ)X;yw|M5MUreXwARe|WzlewxzziRKcu>3uM!MXFhE#|sB9~mV znO+7LAdI(3B0P>l@1oe?%QAef&565*LhopsJwOtaoebsC_v&$L5!xe^xpu?0#Dhnn z+sxS;2SVQrC1uu#m_M+X+jKSzcc)of*;+uz1Cpu);YaM-5bcZ@T0vr?;H2Fr#ykAa4sL!uhR(CCmd_!)o<+K7ai7p&+fq3yQC zmv`dRI|of?7^C<`id2-9MM0-fOWR0Ev+6X!TOR|q^#S*G4&UkOZrZb~6~!ULn{k2v z)`vfdWii)Xx^gMG_wf;2ft&Ua9^(O|61hT`RP)J`E=cx3DeqWWe8YiET##g2Fd4%5q=Hc?J5X;CGI^eEpIl3wD1lZ&jv$8e2R2u!7xYu z`g<$rlOW6yY3U;dHBe|Y7^+%Y-c>57lDGB!_xCg*BSXd2^^>D2Of*1M)GPka50Z_4 zz&JzWK8eW5xS1i`h+zbXpVVDSb`Blhu!sm#pm+hzI2@S@fCdnevQz>JY8DPyhsJF_ z_WF4=SepKS#rD2lyIi{Uj~-0Oh{=z&{7d||Z&GO2t`&dyU=BV}gj(vg5fmB1J2@>H|nqU89phlWH;kde8-5H$1#WYO%wcqRm)F2NK6 z1vga7*UJdzHgG^a0G*XYneKld6`*O5jyaNN0C5v~70*z8nlfSRlQYHFyX=@F47Pa~ ztpo+_eEJ|vb8|M}!hQ!D<7S!Csy_f)>W%QHK>+19)&#c;@V1^uE51f&dohW0;OO0uqCkZ=gO+Q{Vxv&%-!`MK#A)z2c!Xf{{F&! z`>3;LE*b1`K5vN7Yx?eM)@nbyaRZ}fPD14m`LCjW4ejfnHA2&@`YEuj98F?uF-;7m zBE^yh)1<3a=ek#X?^UWcX1U0VB5_ej;~&hDD99-ZyF?b+?cTNHZ=GAkVLL47k_(Mb zJqDz*L6&U~Phw>%`=2I(E8}C@s}~HIEX}J%DLP^6%f4B%N5iyeR!?)WK^%B@6a&>ffnSv)RBD`W!XA{6`n$ zwJjjY6X1M3rMwPal6N3J4H{#$fD|Ce8|&X}I(30qGehS#QpjnF?2pDX_@6B5H+Qp; zXapkROE&VLL;-!N2_Um!=_UYn4KUxoAZox5e+G^+B-r{Hyx)kR$BJjR;zhAmp$jaw zEGIf-oC2tCkp)2**UZp4IykhORyx6*Hz9U@W?tl=^)pb-G3mU5fTlMm;2Y8UOrmte zv~H@glYI`}OR!CrH=U&Q1tDT2IAY->b^^~onsLY}d`*eF2?*B^25hfJY(UTV=f?a@ zkQazrCxBUwCVI8Bkc9IRhRo4do@ zWuPU*$r*;D%GOQj68JnI$)QEQw*TmVEpl&O*?9`|pw>I{!%82=hb;7e@?5R|d+=LboQg*d z?Tv@Tpw3GxQw?kueV6Zhmpg$npF1DCzYG&uHMRYlWqkZ%(F8JtI-U8sxN1 z&vJ7(-ou)3$%Dz1V8l-2cNHj`p#_MnzdvBX@9gWtq;Dft%&jE4k$r&MvGP%lU|6hy zaXSjDgh1fcj8=G-dUxWZ=u9d19o13Un8nF2c;IPSyz>$~LEXbN?BgBvd#()?E&}33 zRb9zC`yguuiUXpGM#zh>0wiC&Q;a4tzp`~kvA>=Z_EB?LK%=V(|5I5t!8kW&m<&HI zK2sHQdDU zWQrJC{BSiz2s!n;g@uI|xOze0&IJ=F43NbbJ)qhXyLO@wihpb8!qcn%)U)#a`%qXP zkliL55D-8fo)6GF5?K(-_~UQp$;XJTi=d&QMQ<{1cGVoN_N^jkDwK}T&X3lirWoRf zsXKc|qZfvirRJaMm3p;)Al3$e9iqi+w?_KAv8A z9sQ=txCsUFGjOIL5Fto`%kMjnGlg;cgJhc4g;< zfP2)etj&}SaWQh{s}CDSE;+GQ*=`QJzs@-;n6gjXl?f*KuwRypSmGb6Vi-nAUOW#z z?U2gr{JP+PGAutFR`%YQ_~kSKm-^7(Hg0AcqU*nfY=Zw552f`_h%O5@?aRXrSzkZ> zK4)`OfYN>G>48VCxYF#Mon2iExBi`Bf*P+gj&mZey&+TkUC0+_mD)utk&i52U+6CQ zJMC2)sFxIM6+izroKmcfxwATDwTo|m(CVT@O4@l{P~$U`%|SJf+S4}ABPXZ1o!|eaL3vi7KMTsUZmJsnZS1*IFOd%W&CaC` z?q|`7Gai{75xKi9b+bOKh=5`Y;#0bMdNxg&PJRgJe|BTW2w8Yp4vp1?`mu7o%3!4S zLP{XeN`n<*xl|89lOV7&i)5pAC{5%+2SnMi59%}^-G2Tl3IMX{X+zjjmxOn%CaV53 zU>FV&J1?INDxTMm$b$Q~0$BO~fD66>^lxgD#-2Yj zgp-l|2UOdLU?i478t$!_du3zcVm&i$&8N$s<_uut_JflWIekSS$`ZN_M>g%; z&~F*xI`ZxJ<*^%CCf>$<_Qmz#XA17$b9jq;0ghZGzSc~+jcBRUVY>TTis7{=v}+g+ zuR(sD)g4nAx8zJS+r~d&mXdJ67V&+GVL|G)TljtSJI7PnJbhCV>itQ3aY404ZTi2& zw&?B!tfg4qQmPO`8G3i$CE|T&?Ig|8D1^ z@hqA?r#RSj>Sk^dH>@!Yy(C%16V%)QVa&Ertadw6*^-t~;W0>RS}t;%z;Q)6yb(R!rgRMbZkB z1;LFYEiKItF$QU9YDxhTw2#=&?Vx&x;=bTM>^2B<1`)#4O}i+U*9Gz*BL{6g>edBb zL%dwlsI27)VdD2~kCsM)9%Jz}6c43iu}{4caJws+rr?Hi?JXCcsTQ&C$yM}%)>Ao3 z5ehM)usWYHBjMW=OGyk{JtDUZ3+cx3!FL^WALvW8HG^~IzDy5!dxed+WMNfNJ?!$pbRlxSCFGNcV!9r)z( z6Z*AZBCUYh0ekW!RkOt z6q_d)?4E4F*$jG1Ns0}dht|5(3Ru{5o$FVNl;mR3x_J`$wQ28yC^R?UFgs33R9M3DRy@nf^C<9BEqr^0KRgoh=ZX&iE zVP%cC?Iw_^2%7d*9aq;~xRjct0xtO3}D%>6rMiWBOq<$sUI^#Jv zBP+@YepfI7rGf_#xx&L88tIVS+dh3X*7<*scGgic0s;ckElLRp z(y2%&ASK-;DP2<1CDIL&f=H>Pgb0GPbl-QKFYo=nJI0MOIOh*ypS|{)YtA>G_xH@( z!PuSDY-@jiKcJmEjd>0QbCG!vD3$%{|I-9bbneDAzVqFDiET)5zSow4x_jV3i6d73YskHzi)X z>+PSUuezlyqb^6Y-6%w~PJq$4KhSMD5hy*caJ=QMVZf;1s5QS`b=*X}5#(`MtY47Z z9{o#{a7Kq$b=AoY%kRrWLi3sVIkX|-5jFd6Y1MA~V5^EhZ|ip+ts-fRdbVNtfFmpE zIlkHE{1HF@b7}4|Qqn4t#$r-)T|a@DA95Aq#KrQVkJ&s2(m6&=^VF$Rx+2wH5a^jc z=Mw%SjVUD$32_RU@cMf0+O!i_WE?vB3o7X(J|7`f+@*eOMwLR-gPD3ET7l)gdqS7K z$T(`FKlc;aNNg0(xLzHa$xxWLnVk8iSm>4&8Dol=4c=Zi)3d)WKf9HEL222e!ioUTl$}x6+wVEGlGEIYIlUWhRFAUGxYpOTOFiqH3aoY88n0xG zrU|jet96HxaO`Tx#7toBZW_W6WT*#<*4)LshcQ3ZLx7Qe6p+)EGxpe-hJqQcEPNrtx#Km=T)lPqeW1t02y5S_2#|~GU($bMbcnyC7$wM2v#t41E4iUn0rNJjZg_jx*Fp)HHO=t zVd69v$@zD89TAgcWB}FAuPG9y#Bh;Q4lJ!8l|VdFPghjEA@OwzZ52xab3(){5wS!> zyu*+}GR({lFCqo*U~mkM06{M)E$!NUf;~v>$N-fNHQ^qp71TjBX?R7&Fl-CP1D3$C z4RN+b==e}!u7vg(>==W_PAZ@OL!HPdDms1O2F1gMv;!m?efaR_6s=GSJf-B6lrAIZ zh&~)*Mr3}RmzURIMh}Vv0DD7*vtXAZX)0;pOCIL2K#qP}SZ z)Alg#60oZfn>|oeI;y|?`t6%j=%!)411mI!*xtHk_czcb_ZHWZisnDGS-bhJzW!?L zrvRu#Y28z_ShV8yoRH7?kmpV&kw+<7uE7+7- z*w?XBXsb&&j6P{~oGT7gJ*}9;kN#9eaP{v^#&*i#kvGaqGc@)>R%*o^R52~+^=y%2 z8)sAsJ9jaynUbi*aa6$!)Z$y%96{Kc{^iO> z^4IFb%Cf(<*Y#<9xs0zdFmpU3CH1N#oig}ZKjug!%l&!Do`8Oz&*JU-o4ujqrIyq&EN5}Dx-=$APzvX6?kZqQvUk;WxoaM>_tx3nEAfVSCN^vIRF_?DmCu}Gl_p$}6h{1- z9xAr4)-=|uO?vwDG;%EA%tJ!2`RwG!%!~>YF<=m`M;Tx>tJy$p1J&hAs7Gt`=}spu zK=_gim{Ml&%SWThrH8UKv}E~T3OxpuxWmwxSbpK_PBu@B`2~ph`Ln35CG&AT zp$T`TWQJnl@5X4MD60_)9t&igK4YI$S^!d{bZ~P|? z7Pjkf3G36sNpGmJhii_7xlSu%7InZ~TiXYkit<-$KQ(Gr;q7ET4hJ$@UCIwAHf3E5 zPRh&U%}T*Kp43Dxw@JS%@KQar7g?QXeoEx@_Li`kokB3$4QAn$O_u8rrd!YuX*1(e z`|+pG2EIbESB=osb(W_hH92@t7oVE6DV;VQLL7_~+;H5eo(doVWL2Yi9p>iW;2T9T zE4iI2PnF~qv7bap#QZ_u$71yvl`k}tm>Y1@8+sFA`w{~d2{UIOjlPlLIni^M8&7tG zr;;-8Y1w9lm&KA<@lh_G}8 z@lUR4h17F|D|%xDevDdL5;I?Ky_Q&fHP#3_N8Zcl(JI%up@B)yLQ%WXwQ%XYcRzlF z<(Fc=?#q}ne&%0rCy81t{<=nm>cg~@u}-fas&CGkn$`&-&+mrfT|)Ey`?r=u=(ObE zEC~x9e^I{Vl!PE>n=--ZLQnaa=16 zB?&EtCtA4fEvIkQnP=J9Ek&}I8NliI>(~p)>!Um#E zXrTEz^!N;@OJ_^et=CL>Tyu9~2~K4+wB9=kby zo~$aiCz{^JCa3Syxl^c3nVK$jrH&cXX+o7Zu@tdsyDq;Ru9;+M^D=p2DJ`lxR2F4Z z$hutNu1IFsQ{{EHNJNy#=@ z`6%6pM>IH+c0*X^=1mbwi^`XWX8yeE;$Z6i)#9r2`kVD-Eh{G67NgmY z+ns8n`?Xif-iAvlRO2b+j+5bXHpI#p#yTw#=|TUnigYWZ5~kgPh}}cSsa{ar%jNTl zx%z^fR`kc1N>_`+^cM&7w>23K7+-&zjI!gtNv~TA0u;_B86{=r$(KX~i8o*l*q& z{WPZEyYKri=diD}_^#7VREyM_4umRE7!~#5)E4YnQcJ!`ljU#VBTz5i@g)1!enj}o zvI$!m+7BO&F}^;b$Q&a!T}x7>68u<(S7EYpXObwi*(MRuQ*RQ>8)=j@! zI-6`U9=Ani62c(t%9C}hM1VMRTfBh|yxgki2<0y8J9i605vBX)8I^P9{@+gW2tzhgF9q$>qyx!P6kNzgOk z@{y5K@;QHg8cu&8a9u+_(YdHt-*vhgvjFxKhnsJ&i`HQ4ew9D1dYIt+58%od;dX_L zjNqfHn1lr0h*sAMvHhhrzixMgr+F14x}Nq|n7a?rC$pXBH>d8~)w){P`Pr?>=qOiU zB{ot7exCi!QB+Imqwr4inv!L-`Q<$dZ5Dm0bfZw!Y>}$Y4wr7C&9}VQw%#wUAE4CO z2@X?xXkQNYIn#E-*120nM_Tz?AmEzr6~%{VhGz0V33iLnYXaQjiJoEEu8lpxAjzSZ zF3w4rj=F=MsUB=HL{Fpe$iPa*QOo2JR%TqGC3#5*msXuQ`t?8nFLC)*Nu`nBO)<75 z#6fRP7PkQ9w^;K>$!L)`X&NPneQN{Ry({s1OCR3Z`)&1L}qK)spozx@XBV@9*yBY6w&Tkn}pszMt zM^5?tR0|EW;3GTxl+=Bb0sE-}&i4!r{o5K;>iyN@SU6sbxv23yPPMC%?xmfDyv!!p zw&zz`l!F;r>AqiWeskv9N?_hQe!QpP+POh~E;MPtKPgEfYveg@%1FO8R3JdcWWAaA zDvj&&Js1}k$tb<16g-bbv9n^_1Dup48$fcTYLz0bb7F1d2@;lVri9Xyca| zkwyrmPWq=SLI&d_ZH;(h-s&mhHKOqDNR{V%Hzg%j+w#;9xAgzi~Nfa(YeE28-bn zKT&XF@<_J~zso`d*P!jY57@F#S(Rw1;-1LLR>cRCV)^Ew$o&|9C9SfkWPr@E%edsP ztw{LIt*z%ni746CpTiudyNb0?Oc%e+ zoWxs4cF&e9mp@Cp(u;XjJ2FE$P~1ni87~lbvWO{c(E`5due@Mar#F7S85LPyv!;fD zB`hfGf^|LqDiDd4E!j%m)B0p*+DXeWowzIgqw^*6fg_CSZHN@=aD^uNDu4l+2b9gq zx-)GoRPD%6)mpQRKd(Qa@o(jfJ4>+r>a7v7?0_-%zJB~YXK+-;l>g|DNTs~p`0s^z z==#o_;l78L1ROGPJWh-5*RwHY*Q@<2$H~>M zcacB&bm-o_QDi!R1sfL;y8aBp;uD&iO*1swrV>jmo(%d2-XV?KEp zzSOvfhI+Nce(JQ3mO5IV%#kBsd5aw_Uth)UwxzC(xjPXm+EkpFWMXGU;qpfDLaXYA z`OY5?eIil~Gj2YY*gfpC~9ebsC!Y!b7xpC+R|A?RTb+&e)6lZN_oY{+@rfc7Pf|o~}!l%yJ z*WF4t4dV;?LW=%ULq);z0d`^D3!|;ZicvexU*=e>sF{=M(MoDkVv|YS2Yn2jQ~TQ; z_ooVP*vhTc#5gS5KKx)L8@=jrP&~3I5LQHRo|!;OK`Ut;Ia8jtblZ^;wwWJ#J zTJ5V!MYiN_7<^IRW}YqmoYy=M+OGSlKy1+1Y9frCE@rRsJpXV}(WUvFQp{l&GKYi6 zVYz$UOhsvTIW`NT|GSn=?;P#Y2Z+$r1agt)%u(lIP|boBI@w$Cgr}ILm6w0=zFmVAo|fc;PqpDc&Z%Pj z2gXN&nZgE=v<%Cmy|eDb+$-}YAWeb9X}CN!G*o?UdE8O)#=4-x1R}<|4ZL`9!Uzblq2}cOWJ-h~}1UShEoNNe{F`DGp z4z>m2>YE;CHRIK%S*D%fmQHllmEI2_y`(nniId&4q#-<>+C(FZGqBx>SACeAOW52p z_m}jl(4qs3@uJVv?OdBIe{Z5tK17zQn)S)>0naxAkyG9rmz%6NIY?H&ep>#;>4?w# zd^$-9AFX#U>Pd8orc#P?!cV(h1CEjw8@+50`&1g80E8tZd%WD!*#SBcTcEevfmRi? zP6rTE4!8r*Gxzv;_cutMmO$zD69hpEApL$+(Ro9lASzm_o;GBJ1voFF}5Ht?v-T>-Y)?UY{?RF(uiqEi&bv^KGEsl zky7Ws%xq>FNLinsYWlivW!_p<6FyXk-S{LkbU*8gr|;u@)999!5M`X02!DgiH5(WV zU2Dp{-^LrTlgscH{b&l)k7&X^T=E>*?D%8)v#5!)O5a!gtomtSgic67Tf?OCR zlbt;-0p;fA47lh(sasKZ|4*#CF+(=7^i6PID&`G(x+U>#B)JyBPc{cr5xZ!`OWtSPnt^^`Nw}%XA)A|3A)G zppZaDsgVZ(G|08HUQ;>ZHz_WGni$Fw5C{XsjHKCc^W=don7#qH0^UC8EuIX%HLE=G zhPDFq^|HQM316J;>Vr%NDgJ`QqPb_R2@Er)y-wDltOS-smkmAlwBUySXmIir z8p()$C`ClFxaSm3(bRaCk7LR<13q=LkLGIyDi+QgF7GJa4#%!cOlzw9W{CJCOE}dj_cVmUx{1;{-_U%hjjFk6?ZWAu2c@2bz5K3~?jnneQ z73+Glr?jPCc_<>C7mEQ z{7_sv0kzSiZ?~Uy+8GWyK72;N(vi6 z76VD)j#BiExcE*@SNe^=pVdFdmSUyH6*iYA#gTl`7BK8!tN-jj=Oy)|v8+6g`OycaEHi}p~m|Xq+iHXh7k?4eL4mQ zqrghknKu*qOeRR*9-El%GvFgWLn}$a%S#+T(C=R`GXhv%&8OwBX6$l?pThbYti-oNlmBiWA+iQ&hBGN|Hi!JPYV4P@i79)imUy45Uqj9|%{d?>H>SmR|fHu)KMA z@%?K?)mHH@{Ify33>!rn=nDVB!>R#7pbY4IL17{x!2u+A2zqThSmM+dwjl>ZQ(JX$ z+aPDA&8qsRqX-@@?((RYNDSakv$MYF&Eygiy5&0iDD13S{N2hDefUN-RmnfAIsF~} zc!6%m;^|wKQ6UGeyGKQ9PJRM0FvxUIAcAf5L(lJtN&)wXZ2$9ZmVPC?#CNlvLGm1I zVngkb?={OrPMLH5iZ!`aglFe{BM^-2F5xFzxwuz-MN$%qJr~UxRZ$91Fyk-=!^b!d96|NvNj#zv@h59>$AKh2^kv+#g6TDA z?v-;gNTthK&1vxquE{$lFf{aS&-p#qBsyARcXYtPYY*~Gi= z=Q;V81;DGAflvp0xcEMtyivvWM=O2w`p0v&n`>-~dUo$!c5d_Vyzk$RB_$#8(dX{5 z62mn^cg+dI9fC{Fmt$i}-B9e|YdhHjw(U8s) zM4o?cchUn+5>aN(iqU~e5XeI8Fg9UK$?W_kO&DpA87x(re&E2XWtb9$7L}r#n+OVASrNV%U_D4l=RMyxK!@vJ$$4G&cQ_5**9B|@r#KE~Kf!8m z16v*>_RUgbi2a1XB|S3yi;6hGdkNUb24$BB33I`jr{@e&4gL2Vy;uMD96jVInEOv0 zJwK${`~CVRhHI>`tVEmHk-%+nR_yJ5X~AH^dA~OX4@4L~I81VLi|*=G;Y*lCtX!^H z%gbvHNZBVtVPc|x(?(?$Zi&||Cg*%&Al6#O!VpZX^bO_kcdgJ3)hg_6{idSCVWafy z`otRrKc;vod9iQn)Q&-~?Q=TTIhkcwe_)Cfd}3|>GNn=`oRVr`B%^lF*g*C)QmWM0 zQu6N9Wy&N&6l$L7o~)GS$C0`QW9EgIvWAU{-BR{k_WI%Xo-j-fVg{ zxl-ktquliV5A21XYjZgug@rp96(9QCTZvK@6t5_4MbU~xj~-2AsukC-4qOl_wu&*{ zy-Nd0O4YN`$P+I&w}wFEVb`%mp==^%)qS@DhA1-T3)I*fN;CjF z34s)xCCK>!F9l;u3Y5up;EUGW{Nt&b)PeOG_+jn97@NAje)zzXj(IyC)6S6F21F=L zPOZeFjhSYes2&;Um?rM5Ip6j5?a}^83;Sq30v z!u+>CLDgUZfn*C|>c8-fjzXz>F*TwuSB@pJV6Nh+Rqq(=T5_{bbk*a?Jp$EI!5&Re zYB^(SL=v|;;lMP-Wy-pEv#&$@0tV}M!kY{vhtBGq?c;$>RH3pMCyJC?~3Y$>~Si;>O!Zbi^N+2!U>R-F1+=B}BKb8@7t znMTF}}!8iELn$ z=f>TQd$z%S?X;>@O$nKYq!@xxm1vbJUB<1>|EfX`?>jKAayuMuO)}1UW2cI_g2wx` z=yjphH2%8RyTc4($?EK|0*7(}u0e?~$G_1EhGNL#V)ze}#oVz_x{)YRuXi!-EYL^! z6Z&6G7NNDxW_zOeMOJ0n2v*CF(uvUT+sg|-u93^dz{r{1-nSkv?kIltNW)cR^b6vm zV6c!)K%DIOsgW20Y=)<{+3U8>igS=9HRKl~F3wr7(zg8vL@ zfu#LN69b4#Y#^gVtP>&SCa0hX>X^^0sHk{-rv^01(DDBra7GvUA9Oy1&j{RMUeG=O zp|AcMxG!pix=6h7jU$(UE<50X<6uUsraw>4=%0CFLpxt^2kGmc$cI$mke$nDg1mq? z1@GB2Q^&I4TAZ`C*gfqzHf?g+wam|EEPQ}2(Zy-Eow*h5A%|v9M66PuMrMY){YRch zj&Lj7>qmI_wgN}pk)Q*ABJE6fr%lWq?r3m(>A%t^?U(LPl}C$R8lA$QfXz9q*DR6u zCFqOmIMwb4XC^Z;YzNM#SPP>+Us>o~vo`DDIcU?(+aP}>swMT~d(>7`M)*t)ql`F3 zRENKHousV+H=k6d`i!Eb9P^wqS)2;pA9k=}DHncf$8saJ`d2__w7$m2dK^(3+UpC) z>6;ALGpcnY59*kcvbxoUveR{niqJ4{s$Q9Yb)D+Ht?)A5=5$^8I zRQ4w}CRYcJ=pz1$au4SGw)fIwV_)`pUI07_(Q6?2NsAerVg_GUo|mORT!Z=8jN!4^ zH#cE+1#&SfD=U>}9rF(m`%Uuv(UsdxcUQvku&D&BE`vuI1k}gpUx1rE(dsRsDz^8P zWA6^w;2{IIh$0Va}zSaZ4gD`qz)`i8BaDiStqW7oDy+XXr#S+oc51?5Sb@I z_~{@Lb9+~`to&}R6Qe77wk_lST*Cp58%wL(b%J}{%)L5ydui@FcqJ%4Du@jV+C!zS z-kY<+CO3G&D58c;rFWX9lVcBr8JZXY*-i!F1bPT1F=Mt_wE|*CB+$gBj2zMSn7% zb{thkkm&%;DDery_n0zM3aHiaP{AD0}K+qWz4 zKiGo0$RUX0*G?{Aa3~DY!*T#H(|}+Xn1ga!T3Q)w(SN{e28TM?@zQb1cIeF7;A~(d z%GkBXfB&M&D2u{NQZ2MVjf4&R_DG6k$a1{vYr=G1*5Qj;E`JHJ0 zTu60_?V(w8MSGb^!8$Krkf)08#)VGtv|LS7xO`T;z*4n%4*Qry%KTgD0L4!s>(=4a ztTO1Ln$&*1VRYf2nR!-xf|WTOCW#Vn_wC}V|3{7gY7>VF%cVl!Tv_=%!yw> zdQ-F4+Ol*Iy~*SXz7z|iypr9)ebfIciLkxz5{R!J;wA~>pE)fpEw8mH z8jS9OZC>MMOFxXjB17mf%#M_;#8UeITX)6?5Lsv#CDHwb5gcClUw~lkzOF7cluucp zNG1e}EOj#t=Fi_2moAO_`_0xhc1E`CDjKePdX>;w zSasbi(1i6>lV?l#-qo#h-An4vY=y-9--j_5Qn2Na<~)0I=V8@4>6^YZQGq`q59}YE z^S%prrCtFu`mZ5`>g>~-sR z*=l>Vk2){i4RCBBWm7AyHm*Kx^P~^Goc!^yumY8-mOzpQwTa+T)btLEKzY+0tWDZ0nz{&0W>hx!f_ApLjps`fLtO#qL{-d(=a5!o< zpk!$#sg*=~QTbuC^+xpFpeU*Wjx??C@I3`C%0jKAiP*V;CD$1*;wduoHTKuPl*{I* zPngr5x`%m-a4+>2(1$FCj9Cv|eP0mKc^LWzZAvvQ_Scz>?Y?TRK_OF>6hjtS3q9vk z7a7j}>6b}X-a*#3mtJX5sXT9!&lo$+^uBri;fX2P2(|sALzd4T&L@t8F=;S5c= zoi{rUj-(u-B4)U%gLtwF6!(_Zm={ybs5mcY$Ne-piFh6CmfMz`qC*{ieOJ(zG+6AE zM}IEf?~}(zbNPJ2rEjlt>TOC=<)s)JzPsB#e|qZRdW`xaDV_b|73?`40(z`0A}|jE zb_T0SnCfI0!H#S!U-0u-aB?(4szPYJ(Mtm1-@DxxlGv_YR&Nj$V)}6O^AFYAbQ zeAH6lySU&E-T*UUBR^be!>y61u4~rZ9>3CQe5>o8}$aUAWoQxoOYt zNnH%icm@kNoq40Y*(9;`)DproZR8|5_`=-hYOD<6)DP%N!@d{kU=>qTe{Z-_GWC79 zL2Xr<6sI5_-H$;it3b>AQ{V3c9HWgWNuNyIhl8uH{#t$!J19vF@PG~%rNY8RS29IL z=9H28G6`E(WSIx8g9rLx*O^^gdh|p9&dwb<%Vfjj6P2bK%z?v;k9C2bgaSNHg~g@f zm>wK6m+|e|Tf~m1>q59)l(t?PS)_&N`f79Bu&)q6(Gll~itEOuZj4hu^HJZcH8uY8 zh+e^rwkh3L=nC`cs4V62Eu*$0I>u~)A@eg_*~e%c1NU!53iN9E=}O^+#l>w&j-n_y zlO@S_us7O!{0Dz$CHiwX>w5-BM5OZ)%-bE$ikU@C<}Dmee>q$r|7a~hSM~b!FkjAY z+U{oyGhLc{N0xSfW+;ub+PNi*oYx5hXRo zkYT^{&EipmZI?T$g*0_TC*x~i-?I5*xBZg`uSY7~>F_X380TH?h;vWw46zvDWl+1# zRmTzgYv-P@TGMnyUf>SB_#w%4A@oXzKd>R}@`yBRn)A(OUXSutrD(1>Gwr8z8#HLg zfuB)aIdIQd9Vz7<` zPv@puK|cB#mG5pOH}0wH7X;kCILQ`U=%yj?OpmzU#o9}{V@J87n0trkWL8@0!u!c! zMf>Dg#h(RDw`)6MEp%`BM}r-BiErdo4s+ZgM(3E%ExMdI%4~Anx@vO!TXhVxT3|8- z>Pn4+r6(EZjjZ5OG}N4G?8wTo;Ip=-;PRm*Wwel<4hcUG{V#RhSaNu}WVo(@?`_r3 znpcw=4nk#dl;tovm*%THSDt2VmP#MCxb+JF3XRH>&sKvi+PT^z)cZ2RkD$0Z^ z=m^E1!r=U?H>S?>MDSxr2Pqw0B=~%E^zVo?&(%3oAKo1J zJ+C>XiiVQ6pFEtOxGyW}5q>3ka9HdPap~KH8C^E1V*X{P==WH4)Y2~$G*E3j=vvdy zo)MA|Z&ZkkC!Z645%ut^zjYq?@|;E|9!pL+++@HT)0elAuBL@!`_=NdJjd!zWIz(11wP`zo^b!^&{QESYVL6i=eb}lW|WV$ zcH=_!AF_8LRlJKU)+G_%SSZC2J~UU+alx_Yb=cmW$U?W=Zl%BWAdPWxo59mCWFaci zr2L+d;?5DSiaXxyR}WNftu&vS8=4qiqgOqntM1tgC3`gDd|IW!4YAhzh=uVG&tt*& z?uLF`#BbY0a&{GhS!`o31{{o~Y-E<#)f&M2b4*mWnp>=q+IEbJ_hFzBZg7vHF=sfMS!V5Vr`bMQT_%y4cBU6hYRYHgR&W<{@!6+SCxkjfveLmSnAqnt#P5~b6Jd5Hir z*o%!DCjUsaC1$fk1z+*+nKMmQWmvo+Bles3rb^n!59y)>i;GhDbZ@FtIwB8nhbpa? zpLkdGQK;T{rRDdE{3&x;J*z8&<;BjOhK**Ti^^PYhc~HIGJOjjx<;Sjd1X-Yple#Y zPwCoFI6)>sw9|8G;E5XdD~unFi9F9vn5$H{P^jrqL0`^W^jx~*g66STm(rncCT(Oy zFG@$O5J_9e7h&=T3I1J0>7LKF7+Ac89)(ZOLdDe0Ps5o~Hpa#buA+w3QGl^Rp;W(6 zUSoQbN`!*i-ysB)q!bj7Ea+YVoh%r-lpEXNPhY!AyVL$>UB4kZoc%Tp8$>L>>R#Bp zN%Op|UJfy3Wkh8L^eDWk!P8|V|_48pS`$=WT*=R@qItdua47yEl1Oi-mPWSV#tGPZlC1X*`~- zX#Q-}&6|_L4^DVOIQ=t9Z{jRT>+RyaVlW*QuRWd$QEJrF>l^Izm(DL-SCT#^T%b;u z)^Nn~?3EN1+W@as0SVl@{QMm4azlsF%ZxFK;wf^{XJ==;c5`h(&%5t}#eF*@K*lyU z1Qjs$pr;2WE>hQ3!OZ}1?SmmIX>i&A3Th8@eQ651_BLUBdwHUgEk)2)*G$de3G5?V zySuWn*OiCf-6MBg{Z2SmZsdIt!IdwyNq!eJ0pN(!G$~3Jis`a3-7ax)s_|?Js@<98 z<+of~p|Q&ddIRvg($|IA#Fq18YlQOv^*DzEa{NFN{J=05zh{mjdaF{siP;QBcui|e zaY>fO$uT0dYx$XjV&00DaNpORLs&m-Vr*aQ;cmz~DK6fh^Z>^iD!(deT zYG+(r94t@Y!SaijPoeeI2?(GH>oIOc7P2&PPipvF{bFKBu?eV9s3e$mjHD9_gWXI@ zTbmM@AwJ$;e+}$Cb`Fkj?y0MK&!2OPii&OlbKeYTQTXdG=RabBE&_dHV}m4A79o_m z?JoO*VvPUA%&Ayyou>cWP}|8W4jUVrBF_+6CO8-%WWIm>W2^HzHR!|UHa56xZRqLg z0at`m`(k#9PF`L<33}lw=^|Q22Ik_DR?-%Z&$Eb7mWlRP2XcwgSn1AxQZkS025|j2 zW|p7AM-BBU7Bi;y&0T17aDUPAd%Q2^Gbm%CLHdYu(X`%(#%7bB>XUBn=(Pc^am}AW z-%q^9c&*QO&_zZbNCrlEJ7ON@J?8y>>~8GRXxK|ykS#!m3W_A08jngN%fKoBo?ETUkDlbQnf};(BSdUy862iy-DYwND2h)UQ39|Vm>pu*DMjDI4`J_`w+U6 zv@lu=tBXfKKn_~-wPJ#T6b22BzB)I9%F4I_QWOkB*w5W3ChEW@tG%}u_tB$A)BL^A zLeB!^m711Tpuax`IP97KX>nM@7jaxh!Lvh7P7bIM#A9RHIaJmUFdZLfXXydIg758H z7SYxwxw|?>jB5M6)4s6%D~}^vBVWaJYYy$nm$XjFUypqtPE z4-Wt&)UU&SNOR|TrwC?PR}uhY3xwp!#~@PE+2J($ejPD2cxCDX121fu!Q4 zXS3bB-}Fi;+-U5mo&^<>`05jAh`q0@^jBl=gfV?s%pp+R$%MA4nudl9)HUs4fdzJ- z+XBL~eQ=OCUBt;xmZ`nYeqnBIt}Wu_qem3b6A6lrCP6j^6%`f456jfdY#VAZoSF*o zV|XJFi&=~iUlYLuubPcB$FpN6Az@*-nD&W@tF_O66ls13Xp6Ch1y+SlI8Xz%UyYP< z9~~YV!_f8e_tMmlC*XxbgFGiWIn1z--&^!kDCRy)6La4etI>P}D_kqCw3G`x1bM(r z2hd-5C?0_Q?5E7C8buQV@*;EDf}QAc-h`6 zdZoZTk?z+0_Lq{eaPnvE+4FU5BoUZf6q%;4Q_1ca*he-nC%=fWVV5~NR@s_*9&G*wm*YaJLEzGcV#uS)yuCbZ$0}R~)6#V6&g$|9%OQ_!de*eToN__(Z zXwnmcg^DQ@^N_&r3V~NQkPvz5Uz%&aY3g za7>iMi9^Q-r6u2U5D`|8>nGaTs54^2UnA2hVPS6X*B_isEQY2z+2R2b{ z9UT}s@(~~5s4rrm5dWKEcc_=@Kp6C>+>nr!l@*o?6%7rd{jr42uuQ++58g=o&=3hc z@Lg~q0YT9RPPLbwL&L*`&Qjn0!as;U0~)+n8X6jgMn^lKcpeH;IfQ5jTcnW3ArCA# z5*nII_kqW=xcleZCE!;U)s+2}XwcjRYm%Q(muv%kim|zQ00bxu92}vS#?4Gkfp!@{ zC+22%LUr|OmecC@I@n*__Dhc310h}m8J$1)b$0akzrH_P`IPtoLk@O)Oth zbTavWW(e9+A26-Xwn{)>j4hT8TznrteoQzlnisQTT1?Dn6z2VRukC)dkHaNn(eE8N zCPJrfs4wk=WVwzZ$`g(~#8R8i6oSm3yjSZ#L;tQ+wT>0BcKVc9}%xIGmO5IRMpae%o z`oof-vBD+0=U4qBn|2i0WYWAwF-YasGXu!Rb#?e1HIi$=?I;3dCZy1a@Q1DiDiikX z!`;yl_ZOS6F#xyV5NP(W1!ALgYM)<&ZdouQu}QRn5p5Irn`zD250x@tLnECb?ukM{ z@lYPf9MNfM1h6xd=+~1$7qAnQlPFX|LIR)`xkQ}TLO}Z{$-;R?uso7`3H-0LY$c#w z?*ps&QEGk>M>s(4hrWNuMp02w*{%E?u>$NF2COqM+v#1)w=@FZw+P@NV4$G$guK)o zs6*RfOC&-8(9|b2l?Ldm^kt{n*-RyRwULc7Ahx?}Y;FA-GL(+4E-bM0PJ-Twi-%s7 zr7v`*jX_JpC$-ia!;DBjlg|+ssFPOM<&l*Pc2LGJS+1t79jtRx9{#knyWjzEUV(f` zj1xTKBnR4s_b!`;qF$#|^76U2CE;=cx3=tnNBHQ7xeFEpSdJL29`^&`nF25qffW_J zkV>@w-l=d}eY7D4Bo;JZNuTS==C`hmj*XQ&Blf$^&GW0PubY}g3yO+b$=>=pUh}_|DBBh~u4L3?#@1QYK z-2k~@*wze-E9*ClhA}HdL`2{$(XM`Fm13wtpZ_blTgspyJd&&0{&>cEt#LE5{AHP$ z^Xe6zfslZa)e&O9N4qE<+Tk`X3sh!mI+UKIb=6;9)_)XOmUH`2G4)5T3o=JQ+Mr$2 zc?Q`|#1iwmM5#+-!l9TrcA`;r$FF|xpLJ81(*uJ(x69^hr$^|SuIYUp6uA9hFE0LY zd14aR-IR|cW|F9V;_Bgd6YP}ca9?Gqn@mGQT!*TRd`A$L9!vc!+%nlsKkZMMacM@p zlO!R?Zh-A+(HRE^hua4WMNCW#TM@LI9i&Q{o13StwWg|`b)3x(y?1;f2Xsw1-N0Gg z9}JQZ`>%c(*=VI)c;o|1ZC9+uzI^#2urH&akZ(A+^)(^elS{&Iv8TpV7ygb?2%5+J z;V}^rgwW%TiH=55Qc{A9d=4TVK8?=%N=jQ$CFagV{}r_Z-$HJzsOuIA9v$|ZHv@8V z78;3gP?8KJy}JjH8Zj{G0GssJ4R-bd{+Az`T$)=Pz}C3VZI2V|Qi+q2lNp(q(2?^v zE6b!BP21^pPv2<1Dn0v+8xU@sw{6XLARfZ-EZDKl_RUyZz;iG?J#F3xpNLO!aq)xZ zD?7a!Mq`=edJV(N z?K-OMAr~cy6~En$tC@~U_D}UN(!x$~%w9jqlH1jA19^M%)|4e$J|q zm!oytGBiFWru_AnqZ@P1jC3i2>sz+Zjo3Bls$vK`C~RUfiRCVw$<{(YwLM#5t4mt( zF-$z~UVOy7_0vlb)s_JH?ZpRQy(5#K+phSktG2kN6?K#A-#pcCWf+S0a+RO{l(aa? zz0mun%NcJ9U0jD3FLk_z2a5W*Hx2U0$8h9MIA1gs(R75t9`WuW2bd9s10`FlPeVMj zK;G!yi>V9i#)rIYD1vZdL-*SjE_q?!jMb2N6W9?K3xLdsL z9Ewgp`qHwR<8j_TtXBPyj{1{{I$dL;(=%+J>!{3XC}8O%ACsRZi#dM9JX~19n7$?W z@r=#qPwekre<}|}6Klo`H|o6eP|djaW}5CL!m%N*?+uc$R%84`L%T)!aLc&I8)dk2 zoa)f2IanRY?R7YfrpL{~w0+g?m$Dv19+gL2+1D4P+t_MPiudox!zNAgx=YA?|0YkSL!5 zn*>rbxzay7`}<3emc_i!MH6m5{%BiSS=j*rFYLdAXLXKyf3%X%*4NfJf0Wmm(!HX# z64^##Es!*)i8v``UA^KIfmQKYp%hlNW7VI4o`X%(*)mY+{SN;<6oisnqf4NtGH_x{ zAhhy-aWX!?JS;O#85=pJd8{xMc0k26%1t;eohPb5ZW|C`6~%VzgT3+C_0yCY0@cD@ zoBHNu;mqzYY2J!KRkyq6Y6k32p5yPIHQ*@h=rR)LKDAFvu@vKCtbuWJtLFNIU*9d2S_51g2ph5716s&!EnijkZJ3)nE z48hds7<`Wrf*&NV8yWEn48(#e83`3t2;BFd071dU!z-+yNAf|Z9ME#uIXHX-7Nq^g zv@m38Ibgc$aNwRu&j#?(VbBsHKyK3tswYpL)VXdmfnhIYiEcH%TZEgA9UOJd82DG$@!x;+2nz=uJ`fO>09axqIGorvXcmW*c<)FBQgyzX- zY!GumZsh^WY=nSjYHDgup;O$~ct6lwh)hEZt*^s;; zp|8&fM<)Q=+W=h55TjVP8Vr(@VzElY{E$MpI102(NHK$+8Dczh7RZ^mEkb9t|6jpdxYwx(Br>ZM9n{oa_peReP zQ}efzNb~uy|NfUvRg<0I=v{doncC&juY0qbr>7oaQBnE8uomGcZ-Gk4&`9ompfH6) zX{7h-*Em0a|N3>P8)d;`5Ua?-bnV(T>buT2EuKDoIdyh=YT4$4#%BT5BQjKj(<(*c z{@=y>=#sw&Gk%Yh8MUfFsLTf0^Fs}d9N7NUkVO9nyfy^=24eD@QFOyXQ{W0;o}xAd`25gUf0-8w(E;{SQQbAh`Mz zM@~nl0`(OZir4ovG-CDj^(~?0s`Xt)b{Ednzksoa=E}(T?|G2KjzAgZQ+vB_e{6E{ zr@g|{ie`@^zKN+R^ zSuIHCj!sU1I!ziX%k-h9CJ)xY8>L+RxA1YMKsL9syd14_Gq1(-WCXGyi@ufd3T8OV zzv;|Ey&Dh3rC;}cqz10k!Oo7sS5h)EG7_$81*5n&l@No5icX!`Gltzwn17z_O zkyHfedGI82d%y>>PV~yjiziPWEr`F!5zMF*&8|)JIg4>UI~IWIdUSj|ma_7`^{)3! zYhhcNlus2^k_U#G$&CW9q4P=NQ*pfa>o^{C--k*~ikP|3B2{pnuVZ4L5(s$?BdaPl z7H{p8!1XQWgL*Xn7=FjsR;6VZUahZoupwCIxpSv{tm}T#F(Qx5%wzz2zkdDV$>?=p zfCYUPdz>5u4-7o1xZd6uLC^cVb#29;PB@wdaj5ptCV4dPUMLY>;Di_YcJQ=)xXUnN zwVc2sFnI1B> zAC}?JkwCtZ+!i)B2lL2oKe(bp(vS4v{`umkz8PZiFTVl*r6z=z|F<9UL||Vsz534| zBY!XNk5%#SKYEbU?x*u_KcdPTHkP{iuP?~+00UMP7$xNma6-A?pkf?|TQzd1HLJ~qqg`$#3R8&HW%9J6JqQOuq3aO~)eH+%^`<%7U ze?R~8oY!7wueH}&_4|Fl_kG>h^_lKgttjD5)Ya8#RBID1@Bj0ecTXctx4Xr2ttT=| za(3<9S)4FO@+`r541%3qbpI4oDU@$F>weUZSe-jj@xJ&I^6N4JCieyk+H(5z0H-g- z?u0Flo(bH^@NdirM6K)9q)8Lt&Z4wV$j6&BZPP0mhstoKp>H)c`Jnja5&nN3u%oo< zHt-H7*S0=4Yz}Ay8^MhX88Sq+V~fSs);n2OtDIM^9DAyz=ll(sck;~XSIK-6#euH$o^T636pis}&kCoBCYWunY)j|xW zHa0dJHf-QYHkG(ttE-Xbvv1$Ny@@zO&Mlars;)j*Zxy_S=wrBTrYFE2|LLM=Dv?Zd ztZ0NhZ#wOEV0id0sfJBNDE^C>m8M&_ZVifzY{QRc9PEmJPr$Zo)~o^O-_6c;s6F6S zONF47Y3(y}8@Z`=YY!68q|VGNKuEAij^8>fy?I}U2 zr@(rY1Oi2BUx9c@XMD+^R$;{ySz%0T2uVExttF{ zO{EPa%$GNwKJCn3jvhUlTc;DInb%(iQhoLM^=5)Pr^)#Qs(V9mEZLSZ0&`L)ItVY8 zLK6SZil=8cdwMqKnvp=;Nvl?^Vm3Udl`TjG+A4~9Ly6MJkq;xyCX;1<_~_B}Ne+(X zxs%qsdmzPcTeoiAScf+mCSOhM0yb7OH#leN$vHWFU`K`M`-p+JGEXPHeAyFIV=_zW zRZ)>UHS}7{I)!U7`+n`hx|_JO+V<#STK;7d{w*`_;xx}8f$7V$pB zjV5VESV21vF>(`X?=%$zds$=e4bVQm?eyv8!JqTVWc3hwF4XpI`G# z=$LF%3Ac0@K6>;F%w?!XM>u`9R8><018L2WBJ;I8&l~h95UgYPh!L-g{aJoAISnUF zm>^mp7$tRUYXuNjuG8HEzOe+t!ie`=QCTU>NBo$4e!OY73F|&2;nQo^t=pZRx+(#} zUC7#y9W|;GYyJiu;(6}Zj=g$Sr2iSw^+9M$Nf?4!c^C9i>lbfGQ#8Sez ztk+_SGxQ1Kvw=B=bh82+q9PP5Tv1z9zJs0(WC)03$8HwxYd$T$XWouK7!W$MqjPSo-qi%jFRp|CIgjO=)oou!Sen*TfEcFIFR;twrD( zYYR-2qK`Zi8Y(5>OYGS6qh>LO^nWwzgP` zsRe^3-ikiKokEKq1WwJVWUI^e>$gpFmzL(Fxhp_zJ2Y>E}6}MZ$`S`;!6h!A8$L7(tNTeP0zN&L$-H=|Q@}F1C*csNL@<->+X_V4#Fm8)1JHR;o)< z1GgPJnzG*5330{-mOaNGSW!;6r8{+a5rT8rm+mU{-yIa6 zxtLhEWIcGWcb04An^pjdv2Vfl8U)nW8-9IXQgRX;JI4Y1^BvR7G5>}dr^61;H89wI z@#0AQuCZ6{2TUGTHN*-pR+r?o?p2gR0_nSwBPg~BRMsaN>B2W}(&A_28dQ%D;JvWH z7PFd^9^Iw|2?`F@x9C=0VJy)&t=6=0{j^}vD6}B`gq*R zw~jHax)s0CNnc8UuJ)Q3(vJChO`xl1T>*I<3xuzl52VyUJ5(dOl$m z%Ln|iUAtC|lYhpZ9-bhj1+XYaT-3vQ+9B>rOIfF{rr>*mcW)nQxAN)PZdLU=C(rn} zVPc$>g}JeRMSXe;sZ)9u3(9MZ#l1EgH*OTUs*>Qz4|o&e!uG=uL^L=p`u7jk zSiS(xa%BA1@S$TPy^Qf=?v16||1{sO3-@V(4PrMnCkR&NBtpzi%Xntqx?z)*<8r-)U zfpN3-{i699OX}->!1*{23z&+kLX8WrB?pej?e_E(LW!c=u;JGqo;RIKW+77H>wJWzd=hqc zy$(!iQSJ`GARiGOXTpuQw zZE*KA*s*FZ@aAsiiM6fS%NxFZ>?7_pr`x(#S(O&xTGtJT@cgAqw>XDC0T}F-8P!5E z9LtK>*z{dVLKH@uODcvrcN0E~ve5KhK926elc)Oq^CRtdS&_ZzcP{X}G+gc?pW#Qp zW|d<=f$lg#r!ROWNY*~S8niNj4-Qm8{tIaU;YRPCgm-DtqD9-DJ-rSMGs`D!XW!NP zSLgT+ouK)yurPV{fQ9U~nyT{qUU#XqjgelAoiO1hi<9_(6gpA%?>6HnT(`QNUVjmF z4b(gd<|obuGW%mi#SPH23yzh`K-Bv=CxTizL_OQH>j1uRWTrmEk($ zpD-fbhU?DCbXgbw^N&L*_VM&^gH%+G^IzSs47$X5FpY=OpBlkEH+^(&vv{d_3qhEouJ_5Rzk4RatqGuXg(YD?vlT5o2PSjY_q-#DB8uam}lnevDsR zp6gG5@T}Rhy(pN|p|o<=@w1H+oYpQ_KOgqBNvj@X_cDUcl5M-!&#xPJ$6lb_Gl79_ zT=g=CmZ4wUW~4xSfELO*?3U62TK6qlzHFJj%aFW!0NIK!UxF#m`*a4L!c6smCmNR( z7jIVzj50ewWr2Le_pZKPwe$yP81}`_diwMrPiyc+?RoRsyL^4V{8U85>?Ict(-~Rv z4*L0OgrD8vK?|n8)Y5V$f5YkPhgsLYS4c|*vIguOp$?}2H#TzPw}EhKADcp38ulE&<_z~78$#%I?AmoEonk+q znW}tAWvk47ek$$T{h;N5>YveIvm1SrW|v_L4?Is~chZ)IUr6Ls=^)|fOb@ns|Ni}B zc$)St+?QHgYw-CrgR4~8fG${D#kWjL+lf@8xuhqz(hqftJRDV^|4Cq+irTlZ<5xe4 z^_H`)9GBkL$$N0G;a`fGAplUPu}&t`e%x%H8fLdRHT>rvRzp%t*yDn^Vk^f)DOTpO zC7aNW0_kK~Kgq9p-pj$kA?M0kX|SnQFOPX2VRV+<&e^%sas8$0V-}A*>!)v<)`!P+ z>Z6yZ-}ak(^b2n6G5q~Um&%|PoT7+OR6HaHtIwOpZ(w+7*XreNZ1&dwicX>EOj9ejF@e^@H|Kx>DyX&g%1qN0>cqJxe<`MRM~$ByC_ zo#7)#BD7Iuq`1Jsa|WtYr~y8H`J#r(pd>W7<;QiYE1;DH z&%%kgJvmwR!^^8(=q$fHEA}?D@y>#}6&x^_bzhELP>sQ>a$+~rIX-qspR9sN%GTC4 ziQ3dLEr62Gcq)cWFrFJ?2&Vyl4IEM)7fj!)WqxDTg-0IItMhs>1KgtDj#WmdC?;DT zmF}6{fESAy3z+_1*ILVOjhSpfq1+K1+#f*Mw(xeloJ5zay^PZzf8F4|V~08XL9A=N z3N@$rVrWZi*LZ=YBYKn?G-!}%HXZ*q?(2BP=l+tptjViS8$>MxCo{4*&N#`nV!f%j zuQCPQFQA&abLW0}kQR2q?%a?Tb{53EN1ViclB&W|w3|$=+rYrc$O_*@h z<^87nxnGUkw{I7s6fQ4t%A373&GBf#7Y4p0L{H*|K``XS78dSgy!V+r`I^d+?{l4x z78JodrF!=+V62gq6O+U@+QbK^wF7D_m2|~N@!ey?Y1@v&1tg`3btfL)k2p{n7RbT` zCw+_KTsUgEVnvq8Q5Dr89ya|@`G|q$T}es$sgjbCzJ2>n4^ko!bnnrlyO_Wez2%ka zD@Ugm^LhjUk3PJWg~htsH#MI}r+!_u8A3Y#Z> z%a>;6n8xOzkTCOvR(_?u@p=7egVKG^GxLs21f3B5HDE=XNs|()o=gnsq2{d*BqBO) z^6zh^rG+IPN!8OiT6IuQp|N-BO))g&=WpSOm{ZW3NlTkAH!qoGv&WDLl0##=yL1;h zdHE)o{Dc^XDZ2P%sMgRs6E0U|`fUe-c{VV8+0rLf8QXd8GlMgoB6QpF&p3OMHzR{UCFKkT+ zs@jX0kxx67vgHNSw7FqZXy2Hs=UPoJO*UX?5sDzXRal;u78Vv8G4g&ZiM+;N?ndDF z#PHE%jn$R8O3KQrJXHp)Tfxt>v$uGBq}Qy<&h>uzqDQ1qMndobyUidO>A}V2+GowK z^`ebXcXD!aQ9e3%@8->$bIil}4GR{$Y+|kd#G_gN{*GVj&fK+^pBLJZm$(D6fjX`= zdp6;N$u{0zUTUbMWIOK)0?VYm>Vs?g#lm&+tFV944T>>;edkIcK+cI9si&_`*QN9R zN)doeAgB|xFG$mMP&<}yy3HY057|-QfBfL{yK^By;?0M9htZD;LeWI? zzA7Nf>LlXx&3r;txpr63)4X@8H#OJKthr-$G6Y!|8X)`l3K~6tB8}aP<^Qi+n=F^0s$VdkDdJymE0NNv* z4V1kt)6C7X>S{`c0j+72`8Q^)7LW;VTpT<=q;#>;fNY{pyQgVuX*FUcGXh&=8b%m5 z_Ef!*;H`aZtkmGagZUs7f4}ZGD?n`*SzEWDtKCRT^Cjv^ok*c0cOdr46@~cwz#U>Z zV>pV9jhzBo3kA#NUluRN>^(e#$-|wSa0c#Y7|~=wMc6a7f89H?-w6SxzI{5P=*b%+ z-vbA9R<1moVU9p;sg2ES;w}#C->++Sx6bm(*Mv*x*4yv8C3?c(p5yGdecPx~R8*9Z zby?}s-8H<@b6-UAp8u>*(;s4dSj`NlZOB zNPhC<0C7(a|D`!t@m}!c`|tTF{7Fp%40(9x;V>i3a5fnY#M zN$CW7jJePOpqB?T?%usayxEI9{vWUY4#SqHeLKCpf`JekOyTfb!>iKJ(mK^=`gYNI zLQc19_YgFHCY?33<7_aYj@`P=LI_(33*>7QF8ZHI?vT9&+#x?BCy=Mam?x7cJXN zM3Se$LLZT&GgDvRm$GVB`b;$Lk_T+}xQf*;uc%1|jvA#O@)F8aJPHW&V6@gUP~34> zuj&FN_a89e5yFO913NM}%=0xbD=N}2_!Jqz3*o&6qsFr>(56~w>r(kN%lhxNBS)K ziB+{}JnZmw84SuDi?_xXEa=4ldIZgVt8Pl$$jg|)84}HCBZ9F)e6fQP|>YLO|F&hNjKTRH^oI<-t?-W&46%`d_B-MU3V*6}V3FtnZc}!-k?IN!q8$RVX?ow#*2U;eD71VxO(cb9aF@q-Dmlhvyj^X;TK7z(VkWK!x|{k7?xynPwS#0($+Z3L;?87`ilTOfi5vz%Xay8d?8!%*{;TOWse0FRP= zsOMPzi9Ztq3d>%z^5aK0&}3%DF=~0axxE@}4$Q2>U-G(cwWVdVz%?~7f)rn}1aa+d zcBF%&M>84$sD0p=#u9*ztY>X{_VjO4cdy0HuQA^b`}WS;X~h~DK76=D0-}+=d;i}` z7$5zSFj6L`((Ji?zmOYi*B7_rPN-nn$&-7#ySv-2S+gW4Sg z)_PbM%iQ>ClbGLX^_)*B*Eoaat!^HUj9}xCL!36-~Z;#o9!PzezY!8tUYQJ049IT-#>1|dVBk6XrkaR z(Xr=^kJ#1tf>#Ea%fp%2<6bB<32C*~OG-CvbZXcMfFs;(PhCzPR$xwi{_NQ+K;iN@ zeJy=!=XhbzBB?R)t-**+Ygq%?C1Z+uhI7p4v+l|-=&#+u{k5}ZT?#rnxBrFMnnf{J zh7}e)N^crh6nf^2UYgnE4c>YRx7Z8#0;4r*0bHIMt#j3UfJfyCDCH(anFA+1L6`Se2iFG4D^><*0qp7y(HkNABt z-8D%{q0!GCFbN8rUUX_nNfI(iwSy}_UknP2m5aK`$ef_Tct(u{al1g{Mc&Nu7Ykp$ zHMgm_{Rnd>O4h)%Qnr=Hu3gUIQQ=DvVK;tfvC_r{8S3@%5l#PyCNf<2F*9OF0n6FN zpsJU>>KBMCOLmU5Es!6g=RC(t-~Sax9@p0A^p%Ti8E{}Yd^06_8iw2AD~hA8{fmsS zOH01!f0q#|R&HISp|Mk|m!pdf_`O@^{9%+ZDT(_ked2Jo@w9+$o)$OV!8%O*l2%`F zFaN&(gqY0Q>ufKo;*4vXegHnd&qzzV0pJp6ckM6Z*23`78=Rf{%F0RvnGCtY;=Ly{ zh2d*f1n{q>O^o5s4;Xxkn>b+3u`}yB6<16?{6WVO+wk<-h4x zVWyyHJ+A3>w|u<6(SJp615clBiqQuJI{eu5e(mp^9c!lR2s|M;Ifez{J3Rd(Vy2o} zW0ZQgvM;R&g7t?IM?UB)eNHIqAt`SpCpQA>9Y@#5F}(HJvuD=B94`E=>Mz#!Xt>M- zX=&-hhY!m#98Ep3I}1R^=<&Yk9PRjF|fZx_+`GXkc+6hhu~ z^F@o2Wc96IT?$(b?5V<$)zd#OCp?qAb6v1%;)X1%MbvAPP$%Kf9!kb(w^Mn-AWDBt;q zQR7T_9Otl{mwxKx$?50^eCInZc&O&X@HtEJ4*bY8o7EP|^nB{vxjCelJr0@O9aua6 za=MA^dlwPhlsz}mOLWpGF!L*`AA=Lh)zqu4OzS*w-vEwwf!uOHrn&lVI$C$)#+GTF zQb#K*9{|38$98`VdL=MUjxvp1729^~*iS#|d231L7|PnO%bNAmvIiK(>|SRQ<3tP zfxob{bT(o?(J$xb=K6LX!-F}AGU z(NcNQxy>5VS(h#OZb$D;XY3ZAUVjOowSmt2b}}+)MLt>e?3Q_0PUvm-d3oJ+Ht|2K z{`p{sh+n!AmG-N1unfx8=0fVDt{mia{Oj`D%!lzzL=RUv(EKoOYHzyl*MTZHY5NH zdF|sv_GeM3f`WpStoW^JP#5S?a-B^OPoYQabT1F|7)~iMwX^T0IN!G@E(R(n2%pj- z+Txg=VE*NoY`o@zBb=INHGRz1#Y=^;&SUrPWNM)8+j~8Q_*t+*6g2Av26lEMAVL&g zZl5}&a{*o8+9ylJ2W^=A^Mj(NX#gz1#vZZsc3V6iLC~{8^kplg=kaU@p<#xZNDd~Z zy(fRIW3VYk?IykcKg3odw9dEUKtN3itq+AVZKW$dR^+_4b>AH&zW195(i6_YZDzkM zNb?bN=!Wj$?Jfeqwah%#96`_sxJ@QIyBEJ)>QjU}6ISPZR8*MW3}(>}rKM65Uc7|h zRj|Sa4I9#gc?eD0@&wOjz|>vGtm^Uk^JmygPX>}#M9l9SR0(b)Bs$`PP=rc^|8`-V z`=xCYJXx)PlWCW8Dv#Wgr(2v#uM7&bg=)^MFCGd(hdr5M+R_-)iDjLWxJlNKosEZ^bE%G-FHs&dz( zEYf33clI!RbMw%?eOq|x`AE#&QB9Kh;0c!e8lE-c^U33KJcd`iAQUjK7>}`!UuR^u z#m1viK1wW!YwjpEb(_}xs4}Dansa*F-##6ujjXAudB>9p{!Zr)jI)InM@VFtkmO`# zr^svbBVh$wqT7ZFdnH6QvW9iLOXwkl*!wh8;kfe_TUvVXg9eX{ zs@L|pI15%@IAzW|yqzOHg-|+?PZ#6D=4KjG5(aT>u!0OYfBw8g$I0Jp!-m+5E}uFK zm?Jx2KvTfTh^PhPhH!-TVhX`&^6vfnC(oV&j-N!WLnZa_^18*hLu;w1TL$I)iI9BZ z$3j>z9eqLE#XK@8!~rg54t^P}m5{M0>E=rzT55#bD;CK+dHCBP2=kdlByLFKe%eYw zcLeLts6189MC%8xY6k6mTZcT}$bVKk1%YpkF(%_Ciz1y0V<+ za?_~JeLA+dfJjRSnWz`7p3G)Rgs8N=IlPjEn6dTCuHj#{nP-)lBV%aiopixp&RkeM=&}8}b z!*lx=w#APJ0s5SPH?eyG4?0Nq4bArL?Cc}VPKQndKhU0IGT-UpfoEW*nOOi$M_B12 zy5nXNNO5~BaThdwOd1_XCVjjn@S4!!`~9F7nFUUrUo%RK7^Rep0c^K2N4%9*G+0WG zXa=S*W2>qjICcy{jQ8=0j&l1?gK8pxoA?VRlkm4PZ0a#S&Ei)(uUfiP749N3Di2X< z^u}uYvTEA3J9&B6(!N`)%}sPUs;PS_f-VGNc3?~f|7ZtEcFgMDhrZ_Dk_Ow1cCFte zCnumUDD4HyuCd0sC#Gjr4kiUbU2yS&LjOsVCS@aeYu9eJ|9D?i$#RuWgHGPIvry40 zn%u#|gJrJHJ6cm!wg3q6cn0@w`+ImGvL4i@Pf)fxbu;)1_lCb?m#eBOuX(3a%;4=` zHQ+Bq^xD1jWx3braM(o0GfL(yl)0&VD(c!*tYK%Bv^i!tzn+*JE!GukdfJ1~hM%up zJUp?N_G=emM+UnSrW|mvwf3DyBi{y{0*iQ)3Hhzy-&`@0sw0TSF{NXXY(h~Xa5)#% z8W8~Py@M6dw36d5L;%9RRoTj2;Fb*MH~sCTB+kyx%^Gcqd9MKO{(zIvZ@h!OJu>IP z4hIL&r-qN@E6y_+tP<%dw|u`uP^7Tmg~z+g$k;DWW_5o0{9bnrH7(7F3V(C<1%6C2 zP4)&!eODes(M7`!-tzMT^a@ABss7rbjOYzTATPM zayYtZmraeU*OAdEyuAgl%gen*h!l$XMVhCxQWI zla!J|@^xb3rr@Y2j~{c2dk7T>@)h`mDK6{1tKItd>n8-8&!Vk5#GDU`S5}MnzSViM zp2eXb-woTfV~FfuRn~%+v(4MP4c&5Ja4;f~0Po^W2`EHnaAa}pae={U+dQG_Ao8^V z(gKlKK{^5tI#;uMUTOXW`afZ3hTeqD)cMxXZ2tUipm;)DMupriP!TfXi5 zwsBLi%0aWS8b8g6&8cU;Awv!ZY!AoSe9=+KCm64O@Vf28jQh%*c$7dAwqk$O5` z&ZJYom=#a8-WWgTC>LJF90#>~@=sJT%P>E_d8*mzeR1)US4o@EtE*XBzB6$dWEdSG zOal-!LYYN>CPQ`h8Fc!4R}4|@AxX|(xFDrd<8&sr{RfzHvOo00OWG3;G6Kw0$h6=X zQo$rYLE|Z`G4*Ss&KKn62@X#pI#wa-qfc+Z&D_()@)Ey-SNM)}1D1Enf|7+M^oimq zr%VZTnGpK&?a##wdk5>XZ=aLv?b@I-3jY^0rQ+&#iBT&K(c5mL)fe`5P<`LJ&Zcqp zjYYr9e8iLjLo8o8W}ckSA}loAv9^O$2d*BdZLK~%@pnSZl=t2TD6gxI$c_S1%EV5A~ph6hVvd`C)~5brU4_UXJ!EOSB?<}S%lI_IzDhqh&@mDMcTloR}KSJ0Z^M%~PtPg$T@^7gGdyYq~l zY4{cS%iq_YRSnLXzX^er_}Ns21Bl*Gz$rKq`q(NQnIU*+bg-0LIPg*M9tlkFqbXxdsRuBuixyisNG*g=Udl zpRrh>-lu!#&NI;6ZTkL6G!G|G{1^k-W~i_Q-OwGMyJnq)5Q?6wO36t%2 z?&`Fv3fS=shHLS&$ScFb+dmsZyPfYQgYMnBk?OW};ONmpf~N`Kt`xAIHcsGD9B7}b z@?3TKbo7SpB~ceH1c7DE<#!57k9L3)nJbn+2&dB&N0T%op2qFlGwGQ2#a+&$4?|62 zh3!7)%fpIBFhoa=7+>ej?5WI9mx4rPOFrfsiiS?s2dUOb?(>co~tJQ{qn;}p= z1<-v2z|YFk5-&}co&>ie%eSH$E@haCXww!x4=k$i!v`(HbEZKsGWK?Meb%pEe=Y|E z6u65U#D@!}j|7GNs&YQ_OCn*jPD2vRk%)=58%A8~-1u=~@!boUe7`8vDoEaO z>JT>#?+V8>O>OPdOn`fJ2KM8`uOS6S;mM$39+L-U6DOu|lnKdP# zu}0>Ke+|B$0mV`Tvsef-FF@Tab@d&f5<(-PBt5~mNZdHaP8E_^P=lHe7w^C0;7~nf z)K*hZW;oRIeqsHUk;$Yxw79GpEFfB4OP?cQTb>=s9#62I_4BCySaq%84XVF=6Am)Z zclGrfdQNgW0Q9AX-czNzu!G;NlO7&iKQSii;>F(xZ!j-8ZDr&jkC$-0V)A zn&YCGaT`qGR##P3Snug%E$t62$1RrpwlZ#nG9W5b>C^6^jSU>F9fYldL7{c1M^8v;{>L1 zlu3oh8wO(KdHgJf%J2}-IPPsl-JHQP$@xP&%N%%1qd%%wZMF~ zc_#ZM>y3Apo8PnU)Y|v=)fjX-Ha53+g+ax^(<_U<)6=BCRDq#~$=k1$4MPLl9lycH zL!+S|UF@C0LDEZ5Z{G|40hFaw3)k;6MRxDF+LK{n8j^v?t@#J90+=g2KD7Q*;#MQI z+AB+LwOG|VR1X<7bE#=IcDCjckZ?0qJ(-py!syz$_a2Hji)i)T9vdcxMI`ilI z9sQx3rEvVZE6H|0NU>YGc=1#|s;P?O)U&?6`oR@gZN(O7kyX!hCT4w%=yGy+NBgi6 z?OzajGSh5Rb#R6X<;JI*8DeMS_zf4dj^j&y{GvGdQgts}p3}tKXa)b%AJWymBz$(; z^v>&+knx*DehxQH3WNl^KK-8S^f8``yN&~3d#v)xIrC|>M~^%64@YQKe-7*Xda!G$ z-Tb)OdUOQ16>z1NW&PXGD8VZ>+y+%*c^MZ{(QxF6cCU`g9azcTOSV%V(#o zHP-I-(`vYJ5p91n^k)p?eQCVX(mtF#viNW|i+r2WkQ4w3Zc{j{@q!vHBG$0}*iW59 zx*D_^%vf${*?*xzyZW4FKa`t#%Qb4SIivKZ+m+H4Y8JajU5SmAe5=1DlioRN#f!^B zIRaPwYmiE()h6lqDYUuShjq* z;rpj5ow^*2hX1sis^JI>+ovkkU8&ss(}ch1&+8c(XYZ9XNcy?1AWTAM*@VQo%mi%? zrQSsIG{kYq;w>|NDzswC%BOhhqSs(z+k-8AuGQkxJ9RbELptPLS-VTqxw@ji)T^g% zLS{L0NasiJ{X(I`Os9ISzHY*7KPC4Ur$a``6>BV*Gk~*sf;iK#xoFYl_dO9)K3GA^ zJYwuQ3+aBSeSS8m^735wlCv~q`F8j*pftLBk2)bpL*WA;{ScZC-@%zR8e#N??mKqq z3N1gee5XP~2RS&-rWnHbXENlz=RNBg8O;RtUba6`d@2!v1N}6B5Ef)!}zK+dPkQm*{{bQTeZ~c|T3y4OQQPkWZaG ztA)b@&-tWmasoob!qWWH7W!syychLTa*gWxyZTV0^AeGU3i;cNgHz~@QH@B1BZq99 z7Tgv%OdN$G+z3$g7QZkzE>|QXF$~2byhBbT+|Z4sJ10GO@X$C8HCt1Xa1e4=Z5^qMvWRRVj8e@aDenmfoO>>Ws*+jaS7sTBX{-+Z3r9LdSa~r z8(YdKHxnLxFf!34`dy5YkO5$X-t#76Z*0rc*-h?Bn3b%e5bav;txJwMv{R5!J*HD%pO>I z@a&`O`Bbd9PjCR&A3kg+z!cH74RASokAHv%ko@v%7_GgCv|;qSUc?}NovtG8t*G{` zd#mh*P&k2?(@Rv?kvutOJppF?{RZh!`%`h<| zz_-O*jRGky=xAlY+@tsB{|YQ;vsJ%iycIlinTK2MWvtJ}< z<-@^~XCGP|R!~&bc-XK=qKwtO{5^kXXdG^{8^_2|jf~;?f7BhqK>Nt@e|B;FM+qD% z%z!_GrtO`7D%F3cOs}@7Y5R|#{co~03{f05gkht-U7G3H40*H=HIvE*YS*?)m#pDl zD+M#~n`0$UBb|&j;nrZ_ZxW>A!6i*g1kjo(|Hmgjyai|X$^#Z7^;dY<4Fh(n8o$CG zesg7Rd^a>bq0u%ttc9zd_r8O1MCfPO@ajy*4Wpy$IOT6#zb*wM9sXn!Z~hjA;DXJI z(f#D*m*5ozg$dn1`cGuYo5|pKOW40q9)feFiXfhfEfp*+>@vW-;O>wCB3!Y3k$z8E z@h{#kKV(?1@oSn<7`Jm1XOA8|+IH&HU$=@j6fJjCkUTlW#Xu>~#`GT`?E1^RUFTe`7p+tFwt8W@pz{3RR^^znC0cw#pfGpx$ za%XVP3X*H3g_Q?K{jD#f__S`{-=8Dd7k%G;t19}42cfzHU;<%Vq$P}qEhuXIB`TIh zxN=%}xhzP(b7wP?z6g1R0=m7jubjxuX0xW!k~~04h@Gw>1Qfa`?`cI04;=93w5Uq& z1r5X+q!*Nuz}52Bdtw(_gwhFaO;4eOno9xL0-uPml)m%J!2|vbM1-V1uxMr4PW^R(D->b@57=_`W9BZ-)S)<76X zG+vOR#c$lq5oBvcnuZ9CVE=Yh2;kRasUpNDMym!uTF}aso-w{9OzzcX7~!%=kB{8K&pMvC{Gd zr^&XJNY?*>giiGPl_)?PYqgVdC@B?oiVSM5WKT8^Kk*D?@&}Iiv zG|m8lyhA#5+9WlgQDw>?@bs*o;>}*<+o41sf<)onio54 zr?B#&^=e6m5u{ZCc|{_N2;D;7_&CLbe`2TVrvgk295`?a`!77FjBN78=Ow5Zr9$;~ zVgV@Ayqb_OsY}v9!@BILoFp_{0>|78>y|@h<_4lNpbI*b?eSu=*{6keDd7D z)QYMvRaHU|A&R{SIj5i&W!IvpUQD+3vp5Igzuqoxzmr~D%)EHVt&AgO zj^raGy{)f5HIuld=v6O|IG^K7lR1UxGwndZn>Q&x1ThEK4@>u|7~py$@c-aTgK=F* zFDde>e||EFn+a&xunPpP6maDsGShPH@va8&-9O&6{ipBd`-9d zA4kNJPW_Wzvo208)*oor%B+2OZTp2P31O0u@6j)!P=_3-T~A~x0XoLPKLD0j47nPQ z{>5+Pt_s2LK~~$xxc{#*Gkin#G?+qhiLEz0b~!_2^80#OtxfZGeeU;pXIg{xffccn zNx|iuPoZR==bCaMxkIx7OR~mm*YHmp;x%-0ib{18??tIFz%)ivaOlqIQ+i)YY8Nb& z=B+8k1U<~kN)?BhpPwf%soi@>77%A)d|i4kiam0BH_hF$;ENYWefs(}h59KRR?v)1 zIoMR`A*801Sv06<@HR#Sca)7U3=^q$@niCQaXpZStXO$+8xkdtX5PIgpL=q)spB7G za%E>kaMK<+b>I2-n&$s87(;jF|0)<`EBwv0qQ@x|{)hB;lHlcva00O_yr405F_w_n zzybCtYZ@#F$2J`@hY^K*a3DalM4V z%x`5^%S8wrhfzN5HxW)>C%A4FqL#&0R?X=&&n`@mL12(fI=$q8qE0mTDTq5ngwc}) z>4SHJQ*AM)8rRT3#`fnGikUJ94-v}4v(fv`Az7O=~I@qfw?poX=i$O7XH5V|1KSj0_DAX%4%(dZn%H zaQr!ZP)}+B%1Du9bt&vV22MIM!CvxVgnn?930Cq&Ha5SN+al16z?#I2I_zV~qM4*5 zij_dJ0=ld3I_3#z(Z?d)f?mq0q|l2_lOmt<`~`s4YuE-6A|HEMk;4&qvcH%UX!*@K z&AFuc@dWMuO`a7e{|spwUO!*tszQo-L70k+I}YE1a~Hr@Z=qWF2xpxy^4_V64?tCo z^Q7k;|645LwpQxdHWb%b=PE@!O)a4(L>8eq;_++{F}#hUoRpQ-MRddn#e|cB-qE49 za>K+jgAo-pik%_7QRB>@%C+s*tvT-kh=ua~Q+Y?-nBgVkF2YyGjjZLwG-tRIZ~-9l z&-*}h=Xvek&A;afu`l{X+N2bY3GB4}9e&uT(VL3yRlM~>c=99XDX_DdyT?}+`%!eFd{p<$}XqA7kd7%S4v7caVt z2n6~r2AhdaFYY|~^?G}IGD3;`Ik?7Aijte($B5>I@FAj9$~XR4xZqMM%aP^BeI(}7 z$Lt6V1g93p^!4?oAzwv8Mo5Q|zkZZfV<=zLsyRO+MlW-vGrZgF9Cbg(Yk%ta&EcJR zm_a{<+Ca)1AoHh>DL8rKC&2*60OUQZ-@cf{TP>g!&b#}gy#Do{|2Qc0KSxDEm!kzk zG6em<&eu`IVPTkN^FA@TD%0>UNTPl|qkGq}wt-ql>qMbyf7H2^Md@7fAkgJ`DRuzuab3Gw4n{TS+j-ksnp~u|mFvqw^zj0uc<&)HD?` zEYDmsz0a?Q9b(K`(Xn@LZT_p(%LB#)Nd&RWj|){KEFAgKmZ&{)z7m?K!^8;7;)BY~ ztLKD+aB^{_%r?rDtQM_X%ku?=-+=nlU<#e`DOS1rw9TR{!Ec%PqZur@z04ofj$_P4#5cNkKAv4J^Cf=ChWlR{Ym$~8SO&l(T6}f=o z5*=&nFs-ZLni|YUtbNt0^1Rbqwlp|Gt{^@aA9{a*cGKo|lBvC7|I_wNyw({dZ`5pF zGNUwJE14xYsUc;6r5Ut;6Yp-tow?!KFpKiiiqgYHw|khC+XZ+oAP4^ulbf zzRmEPj!!E{kn^wrScV<~&UttY#3{y_wq)|{*uA?Zj7@(gDsqqtzLIOy7g2M?r%yrP z{YQxgjvIF6zgxz;jKz<#gD&5SD{urkz|ak#rplf&eNLwccs~o9_9?_!OdM5(U;7Lk z=z(b<%!SH+`{kH_kp99e4xy^2qm$HF>HmROyng*|mgg)rHFr#m?}1o4_Ut(uP_D47 z?4ECTLa=F5gg}GUzozE16@FJ_ueXb&rZ5#m11bs?1Kg>?kRhiy7c)7L--C9bOj6{P zL26bRP7sz|p@t|co5R-@npWuMAktv>0lpy|(LvuGVH&p&8yJ1G{`D^i$T|}B$v44Pn)CvDPK}@iMqN2eW#lISE z-5rIS;uLQ8F+MfF-h0cju ztsm$5{CQ!8b)`ju+%G})C9NYTehlqh$VcrUF(ysy5cdzLNn&5cei)J?gxC|Ag&Vm+ zOcLD67}c>yk0H8M0AY6saCC0%_A{3>k58*gtN!MAdiM!xTa6@Z&`T<6^Za?vP8Efo zT8=O&!SqJ@&qEl^vo?J1?bCU?(Ln;NT*hE0&6IrZcFh_J27#7xIN}bW_ zoY;1hqgy=Ty#WE!~KR&U*x4w6n9S=)4noo>J*SjbMPrX;?g{m`f|dxKnJt z8JM*#$FB7Y5h_yp70og5sW6+5U0>D%!mQ{G{eK=KW>ZYq*6I7zW!o-7bR?X_!g4|P zAv{Ss28yj>(!34zJKpK5y$fn?zi^H26MM;?8P{yZ zK#;N~ z6djA{WNzQT|8~=&D^6d+GU}j|xR}sG%lOvBiujVQ39S&!3miiLIg9%a8q^%wLir@O z#(x^y$^hgt|JQeg*gi7OGhobT36CJMQH(e!Qb5Q4IYrWc&JdrO!b-venr3L&1tkcs z8pv9Kqhr$S)7}$UGuZY&b`@Kbwf?uRVk4NU=rsGGLxy}zA9hW|P!f`#N-af^*$Oux zM;c+Hm>s7sS|kghyOU$PPrrVrQZ`|)yUv8cbppaV&v+uDxR5mnUpGbW;MKgVTD~G2 zi!sr*^3CiX6V{3CNo=7+r{;=6@0G-)^p%s#_b+qE2C*l>OAIUo&7+Xbxy+II^VU8F zVggZ27*KFCZQA?X^}pGTn_y2E^|baJk$QN&CT{$;_p0kEgaQ(%Lbsz&%jnK&o6S+| zNZf?ch!pA@%zz`fx<%L_V9xB9_l@te+NEgdPhK`d{ltj8CCk}(B6CpKY%#Q6Y_|7A z%(Fq-x%tCH@3-puyf>iBk3mf585&~c7$xr9pm5v0C>px=vkL#Fed)lw6xCrhZ z%Q{c6*wxv0s7^m^J-v=Z18v_nEhuB?y4;X!f3D~-H(3{cgnBCEdNXC)>aZ0C4jno> zOdWMLZ? zxjew-zr~2fYu7I6_0VKa;ic1L-wwHUJUjUpt1`TIG!F|N$hEE1kjmErci;%gwZ1;! z&5uP{e?k&lx&i;0C!AW5Wun zyts}JW`O>hdm0;&0wB_JNx+$z=KQ^;B(l}Bni_|95BdmjWcJa~5hKnhmQ#?0uK+g_ zWky`u2bU6`mvZo=>FQA_v40mg-0r#`IS0z=Z41A zphJd`OnRGD9(NIANDgr&fJ$!UdkcsR=p>Md4Q8;3M5Go>nuL2ynEYY;ThyO__)HM{ zct?bi2X{gEgFj;|`cpB+3aW*nYs>cSDbA~G#{GW%dV~LA3JW?q50at(XWC?4kUo*5 z%1#`*;L3p)o1j{Y(Vubm47^kjoZ~z~m}6d&iX|*`R0NT7%IPAs?2?~ue%NfzX^|0d z#lC2#)=M$dynj!al!pjALhr~CebWZL+DX_Y8lv8)QTIhguJ*5TMKIoI%9}pJX19ZJ zJZq1#x)^mSHJ`eofkZGUBSWhgTLWxQ6B;`auaT^i9*|-Q~RE7r|{i7kt4*PsYBGuNkqKUssQwU z`vKv213bG9upkC9f(Gt_-EjJQx&00R9;xhhag7YCbCN;*KQB5wa9W~=p^Ces^poXYH8NHeKUNEq8 zIT?Uv2J0E>|7pb-U0veRhGqmmT^v#J!^h-sxXw|){QnvVw)-`jYR~&`b%`lx=iB50 zzej)zMT2Uiu5x3fBHhX!i4OBcyLLj4&h)di7%g9W&hJ$%?`C9J;(8eMRmdAm_nJKE z%L7RJ(WaiuPu|II;(fj3XTyrdzx=qy^5|CAy(eRi< znbpXfBLm{z9>40m{?f&WBbm{C4y9XhlZv%f_MS`Ddv)2Rl7ZvL8_%3zm%pv8Q3s#4 zmbfP84Lqr*K;ZOGpD{{s#MKKUN-6L@mo8oUI7T8OX#CAZzM#wJhw3--e3!ot&m8U1 zSlm3;B@M%uJAH$26-6YrQTZlR`1@sQ*D&3V4{)~O+3Rwa590RB6eTwD0Pc2-C^;)| z5Ro^yqfJ2kn0ks7JN1`8xCWun9VW!v1DxzfU$lPk?aqLJGcKN_kag;$zr1a2{F^f> zQ_mv70n?HhW!+Ik6@sg4(0B?tdqj5FESD`tiSh?Wq;xg^(CU<)0;Z@fe6YZjjr8bU zkr!EkF6o5o-9}U-Zqf*3`O8G=uU)^s%chvimzzj{b#6R)BGTH#b;O8{B>0#wjk907)*Te%fJT4t z6v2ry;>jv1&KamXckX79Y)cgtR@p$uF-%#Ztgn!r({06R2-#bwc>4i3Wq$Xt&ytYm>Jaux!H zc8K9lh*qHIIe~uawCbHB^;LRHfTP0=cFYUKUhADbDqH)|!$QZqb6xnd;?@Xp^ALu8 zOx(it+ZVWjmfdBL%PZMmPq*9c&r8RSs?a+b9j-raerXZb``KP$A%?B&!^5tO)3I>$ z)#(4d2bKg>PV-8~Iy={nFFB`xC<^Z2(!p`a=vi*XXG_!`tUG(;P59+;8^XPt881WR~q>??XI84%$eY=;RbW$_lJHl z37$tZSr=X&syF??E0!+RGj}FP_Xf{;MJW${ZbUWZM=(efQCkdRv=o*@s>I!){3DDf zp_f!tdri{KhF4Ko6?bYwmBMl)_3Az#4!XVap zo+tL5jknM|A$zT9WmWGzGeA5E{i&{@vDP@$gLigYUpRg;^3=F!sSK-|2A9-H zh0EDOBFBhb-p-dnbmJ4HW%Gys$_pK+tUTaZ?A$1T9Z6;P(<5YXA~t2kf--aF%&JHd z7^SqcZ;~WUv0z>O!J@j-xqBGA1_NkEycICx3fF_SzUkpW_aZM61dM zD)~@wt;pVk@}^Ez*f-3oNkw2;WX{afkq92RV-NXu8~E2* zP_dOuaXvl$@YhEBJ(;Ly14N#3eb)ggJsP!c1F?u5wk$*0ID&b6y`xod4tZkhJw3DY zf=2zA;;q%LIJmMx4Q0QBD>gdW@(dRyF*~AGLm%rf7mGnGPA~Ddv})DLitP@8*PaJU z={|=?p7043MM@DDj6aJv6-2?|!_9bh=E{O%4i;JCCS*CNOfN*I&F()Kqqicb_U+Ab z5H8%vaYGMMUmo0Conw8|_<5~n&AcFC0U33V58++D0G^<8w#&jnp2lks-wvobHK%9k z$066|&DQ3Ar{12{gZYipeZ)k$X46u@x7gT{K2GHqZCZRgZ#O5FMs~kBH+l!D72RzT zZr{E)bK;{uu~i>obK-0S@-Cfv*%^L2Kje2hu3KkS^*HfgM>Kz^{+oEb5`XIFJ-7Pj zdX?q<_dgK5y;EZifv0kM^AJ720XX(WM%3o-zdUFdNlG&5-oEG3Np`^#7@qoi#5!3B z20tsi9*F|Q+q?{is61qW=Br&IXKpYPwg-Zi{S_+b+h$&G*&ViBYW ziOb8&o8?UW_R)7)a&+5XJ2UmVj@|uhSFhTv*rP}&zeq}eUivM1T#Gv`M=<*y#_A(o z)h1X}eJeUT6=g#`?JRxwRd-OG)`HG+gUmq+bUG)EFq9^Ydly*f2FTl99unHz9?`)q zF7}qImq-b0B3Xb`D?)J2fvREfGyclkP=YIMcn4o$?0FA z(c&lS%0mtmIb`wUi{6FUaDq&2`<+;9Q&3RAZh+d*J%8@$Tc1>HWHEb!bj_C#dg9TEkcHAl$fCD=ko}~C)`%wP7qnl!bSDu(1cf(Tq=hm z>hxnd-H^reXnD~I6%c`0)kY!YPT`WmcmK@T{FMh~HlgJX&azem`WMvtoWJd=ItrRu z$tV-BTqMaN*#UT~trWj|cLA?3f%1Bror$}!zCJk&Yu&iry=&7g$u$E35lzs=OP7X4 znCsCoLxMoh4EJ$1coH9Sh0~txl&Xv$J|CIdZ)0pm+tfbcmpD2kv9r z=0AXsq6Zg86FU`DL03&?%?dTO37a$v;$FNV05P#EN*!1Wmwl(~T~IqGDKO}rZj;_b z(-UH7VLgF@5?th!OMY)4Lw980a?YPWQt-zL=F1hg!OSrMduj zW%4Zy{~{7;11~kIiBY5SlUEO6U2`Tc59$E|FtJri5Q4t1zyC;OK0~CjwI$oQ+k{OT zZDInpCX;-8*%lNNFsCUku0CBXIop8+Vq*jK%lRY#(0=P9yEg)5VeD;SH`5=WjZ6s7LW~nrgA1Q-(G^ zU;XaurDnG3b0Ioq+mRq-CMMhh!SLh1vJP&YVoKw!rBz#1bqBjg1MTu-?bI+^Ypm|r zzCB74`}oDmd?aEH_J~8lZ4TtTL1q@|7km8peuj$pI5ZxCE6flyqCb!qLQR7nq5qxpXcO)O+jr$)j&p-U)b~c&d1p zbPAgdn}$si37lK;c{RhoR=T)g5;Pt4j_{T-Va5|CZ22vfVtWFrFMA8px9X9(c+SQH z6gl3?MeHPwZ@9c+~p&bTJK6pKr!I>AmD(4bbUfvwz)${(` zCChSVQW~MNyKoS$rP>XiJk76j+OKR)*!i`*#BMq}UCPe_Ol02p_+X#Rd zTq??Y;R_Bg({Z)5$WH*v5`zx2U{p6crXF6x>dI?Z9JjinptUrMa@v6?#{MZewrrX? zPt28#b6=;t#yr6n_~1hH@$JPkgd)5~@sq?UAMaWK2Uz6y8yjJs!ud=gGq%otmehfJ z6c;ur0!DW&MjVYJu_!_{s8Az$z*v|Zv~th4Lw-=r?c-GagZt=)&2YM0s6W!gu>1Dt z0Gr9mWam3h|8&+)N}n;IJ|Tew6Z^PwQ0-!4IzIHHh}zr;ViAQH*~JZ5yDKajkZ?c7 za%QiiXjt4x1#~Wp>d@IwK2WZUk4$`?4}xt@bZxlN;Gjjiy;EfRY64)7Qs5otcCNWR z{=O=SGu#4rA{cwwxS){c5k6>TRs%T@FP>O|zS( z>E6wp2}Fy#Q$pd5bl0Ao4HdNsbEX!-TaodH1IU}01qLjBQPy4F0AY7=aZx;a+QxS? zTeV`s%g(kh1irv)Ivm}Y`b-sdTk{#os{*Urz}P8l@mqWOTuAI$vvwUjN?(KMVK#hG z_FJHBAK=FDK>KT#FMCk?^1N=$lXcX1t0fpzGg3|A8%55z`7sWj>Q=y;DkEkO@xMx( z7LW^ckD(x4gLN(ro;$;bF*Me*i}riA)rM=st@RfD(YB15eqtCFd9IcFNSfsz*QEr?LuYg-G6#R9PeoLx&f zqCcwZO2&Xpq4Xf0E!{|-6VGAjIJ(Y7=+MvyPwUsH;{9Lt0Ry-8kL7brcqTR0%pEscz7d#&BOw{In0_x+m(tpVWy@Xo_a zAgEs}8z3S-ellP>s;E^-w?{7DmzCHOgUzHmTLohn?v2Eq2W?(7bBSSg*Q9U>D1zEluB0kv`N+Q;{|q{{>+t3k4- z#3evS$+j_U09)a|<_|m=I(BYl$=20v1`N;vk22M7d}_(F9~5=nRu+>Y%-ITT%wE65 zq*E;ACLaW^nf$4$KbU{5+BMW-y>xXRH*1&;* z08CjDc;u5%fxJh(OJIwaB+_JOMW&lQO`vE@riUf=nl@aQl%>d)OFq7x`>FUs{VSv= z&FQVp3Z5*o7T5b6G>9K=5{J&`*ohMzc8?oDR~JHkZ>W%vm1NpMPj4-{%sR@Yix(Sc zv2OTeI9dr|5|OJ24e5CIc0}RJuq+M}N%ZDh?cTEo3?dNQ?+nBA<-_@sHB5`l`tKZr za@IV*-b;HVSU>t-d%0jCMZA^=X=>)(0PZ}9tsLHP<9en}32n)~-w0jc`}-^3ptS8k zvyM(NVu{_M4Uuk1L91wNHRc-lRMLDH%+G8CLN7{IV8Z=;y6mW;PZhyUw6g7jmsQ`~ zOaT4uD2mk7ymb1mnYC~y=o8DvSqrSo*YLU563NyDEK_J_*3l)|Eq@jROs}e>B>r~i zomp_@@r1qAJxA;z)UY!V99BUK-6RfyHbwWW?n1-wkig0@bmn%;*Cg%(w$(XXcj2JF z{mCUpf1i^xX1#JcFnPI_d^BlfUS*#f*0uWo-5i^%`mHeWM>e|O4pjcFl}_K_Ncn;I z^Z)4&l>>1JgkH9?*clKvkWf%c-EzbH>I^a7pkr)fO(et;5L*osc)_Mi#SAh}l zProm+IAs6YrZ1SK81)!g+xlLSy26nX;fHqgJn))Gm6)9O!Eu8r{nD3}9 zA#J+#(!GRIjKWY0d&9OdVT_s=z}6~f8-1?)1~#Y0O|rKBWSw*U7Am^LTV>FIA(J9( z9QOFhE>paB;*e*w;2lciFD!vrtTR`vu@qlBpfnkgHf`FJiEWox)nH7p?Fr_j6c%FJ zx|Mk5r2VmT=RQtI1W;*x*;fcXC%_2_94>1H#jLHm;8rnsQ97Z=<$rX~b}1$3X&66T zJAT2P9X!2E3OA?#>noV)M65EZv)>M8cuy~{o7jxnKk=&W*Cp5ooOpD1|H&xXRYDjP zCh_!)?%=x};1C_<^q3;bs)o8c2aKqw4LCaZwhiAtUEKeA@Q`5R;lr<7yttkMAN08# z8mIdi3)7^J@?{N08fbS#2oI-aaap@0v9# z*8`3GuU@-mPk}sOsxMy`V+V?Yxb)Ledy`2&symm}79$nT+=(#{c)i-gjAdnKhjE5W z!a3>agyw5%H*dZTMH)k%z2S$9NSfdGY(9vPUSf;n_37!YAbNm+oL~M^3 zZhm$uCqI907PG*uETUdVQ_E6T(mqWVH3HuUUS}e89Gaa{`)C)MWM7n7RAbRQaQ;~A zdDATHZQ_jhA%;_Nz7SY6$=?3O6367hmGk;nqjOQ~4%VO2*>BUB*8a)w84$A0JfOSL zLj`V~ylRlFE0fucuhhPJKNa6dQ^&v?Y;Y7321x;=3rH#9zmPD?!1tb6Ig`QMv;G;R zU1Wm~7ELq|vhVcn&1xLt>Dk7T9+`M#f3h; zz{2Clmoqbu=CGpgOsXA?X%8J}pVC)%d~wdmf?RYb&uP_ac}O&1XU+lcgS}xex4a$B zFbOGJ|EaK#4Rf}2;tInVNp8EzO_~Tbe+w`HA)1=7-g59vdlF`h#GZeJ- z5Utw|ZXJMjozjB`4v3;8#x^;K`0p`8DvE1Tv^M$pG`XsTfC=1SlK2@8FpLV?xm&j| zK!+@Bs-lUI9bCP8_6(5@e8BR&Dk7S?I+E`$$$&ik`{>+v0DH)GG-RW437GZxw5L=1 zzoDNC%vkLNq%o4ICp-en(*p)c1_!qdFH@wyX~#dPnG#!|AI!1<0bXCt=`{^b3& z>}0aVSY7f5w6vi6CF{)|7^3PX0ft<`6Wnb+Ufcm3oB?b>VcpV3l(pmFD4bPeH3RpL zDXk{uLB1QKnWqEY4?qXo)WXl--!Xe<2mZX&rsA}XRPETl6I~-T91nhdpOxS8bH>o; zW0$_{`T<7t5#V`8vB=X7Dnl8ROE|wUnG**=&KFZA7$nyaqF*Qp|<1 z1Eh)Hf&j4wIBiV)xbb6~;}wI`lc@~|u$iEAPQ{taJ&3p;Jt zJHxZoG{_E2_|M=Wt$D)`|8CAqlZlP`;!v==@4}$sv&g03A;@`HHj|;+Fg@@D_=PMe zk|9Zv*m?R4S(YSuv&Byg|DgMa=)hv@7(I{46)x}a^3Q(q{po=49T_u9gS&7M1B(Ys zyUC>l%E{hx{MfM+N^{(=9f9Q7_6`c8g+{QLa7-B?g=qHZ_~s;uer^P?fhi9qi(GV_ zXr*n!Ws~S{OP5~U(S9sh9O7WZk~A9@B>u!bAr2)q0^zqnSv1P6U?gRU48^n;Rjk?l z!GD`E{sE{^SLv#hfBrl?Y!aI^N2<@}VCz!rs0Gh--DF{xAlu0;0&?@Z1cU|N4~IFcQ+D)NR;1^y9pyf4Z*)a5yr$9&{MvQJ{!qjqLYzj zG2rif{*7e`0e?lGaQzQ_e&-COX7;lc^w7JI@DPkfTyb4HJ3CwiA}2Pi-`HbIx^Hf4 ztvdDrKW*A^Wsbua%LsEY%AbGvrNdI^>?sYKYinoUwh^`a`{y^TKXc6w^h!h}Uio2l zr5Bf=Zj>tFEQ`KYxJtq~hxE@VQOvBZH*w@f1^S>}ULPE68&hQ2zUlA1$eokD_h=&| z?wZ)ckV7ASyc;>d*6_x`%^fs%@1HjpQ!R9H{Ie{SA3T1;?Cm2`dn5&Q{MLO2tr_)W zmc!JAc8f@n8P@@+UT4UK$=#9x=jAm9SkkZ6k6H~D9I@;~bQ1T`D>}L>Y;okUQblvx zgn9$(bPu{e_r%+pWyfC)j*3Wn*8lz?s$&6ia?-6-6}k_oVKq{=n&hQlxe~EFpPAp2 zdQXx_n*$(Q7BQO-##(m2)Lmb{!P>!2zg~F^vBC{L8o!6$OG~OW@|?cVRn(cY(`*W)P4t#CJoEVD(6$Q)JSMuwAgwB2ezQ1n|AgS z%nBQ>&5<)YXZEss@FAB+#5`yOY1m{1xga|S4xGczLIr2!x6btk?-w%(n_D4(GMp18 z-XyAkUO0Bao!-z0b|e)Qmy~F&&Ex3ZN7ma>m{r8+m|)fk4MB987*BjkPeAkI8NA3H zVIQvtb^j6XKd3{v^J{b)wXxG<(wE&8#5=JYaCTq;fKb!Jy5q-gPg2SkW&FdM(p9zA&PAVS*b%B8&*YvAS=-Y`azCVg_Zw0 z+`kc#ac=|!`Sn4P=EEz^+W%{s0PlJC2XCqxxw@4MKn>4#XAm7tD@1|lgqrMfZdp?! z3;VqD?`e)xx>$wEO4= zh!u=1dOHK61Y@@zH;#gK3tqX1icsROU+iZq=7K*V^8`)5X~(jus#298?q#Ja$G!_9}8RgXnX2 z|KguxgJO$sv~;P>*VD%t4w!2-Y3DZ>hn^D&2pkgYHdOgRMH#o}Crw6~OU#6{78?nf zY7Wa;eTF*QuK4?SKYT;IVeIm;{668&M|GR@@h@F5oij4f!>&4?`2YNbKYVh)PuM&h z2TsV3RaH~-4GnDz#(0xQVJvmz79_ajl`g;U>P1~_*TNSaHHSjn$`8LH-_m109&JJx z_SL9TM|3@6p+*QV!zquIxus=?CpAOBYs~0uuV51r+YBhL=;bHrH~!IY%#}NLcH?%k zewiQ&YWO9UkpFA*{pT0|>U{71kMn)eaQCkni>p<7mTKc$AErb0YufDp^n8EzKhF1S z|F`G+whf3@2|?-TW1lA+F$us~>{U3pZ0`xXcra$(t(#B=_7r+CE}^bEz_=t_uE^+l zv)4cC3+_X26v3pow4!{`06=)xl`DONgM&>MQU-VL+LZ~o{{rgcJ<_Xf#-Sld6hrGN zB3O4X&7QK9T!pI{8Hecj1%;NQPRz%=sS*t(uGS0PpPFTs9O9 z!6h96C5uE=%cn*E9poG6v)%~xpD`9@u%_pPF&U=2@`%24d+peV?8(B+(3+&0`*MdQ zy8xBLbEs8zI#qd5012lUr2~}n#7=X(XCdfnb?T`ifq%jBuk12PQbQnD!T|={I1u>2&^ann$u{a8OrUn+)W7Rh>`U8I!GN zz*n<;Nrsd70tDXlYLfP;oC6+-rTizLx)H&s(uPGoj9caO2VHL2T3T)p7y_x4;sKv1 z(b&X&$j(@RAurIQiwuS-Ms~$7WGEhPeCZh>m(cX>-Uhr8#q%n31P%i zLpO_r;FjZ-&Y-)qSkFLShf+M}V;N2OB8FOl5cAHD z2#o?75P7eN=XNte5no`X9-GbIEnNV(De@XDjNULoO&Qv?X_U_gfDcuz z^LOq{jhPO13$x=Gedu71j&Y#hy~PGDDWKE4gF_BrXjAy~vZyPyz&qR~cg%-6POWc6 z{rBShq|`pnezI1O{|tD!LMyIi)WMIDPCo=s$o=Esq==rFEX2BQt!?jjymVs5JKE%) zBuOAP7HKZnsNiWNKRLA0Z?hoX#KhQ|$18qu@7?2K9v~zD8Pn-I7G^0jHWBH>BkEOr znTUhzR`BkBeN*|hK05HGmh}kqEP!zlt)=KP>DBhf#Wlv1G{s1Fnw6FMkRi#|`7vX< zHnoHGmGPZtOwzhg{0^J=W^}lPbCScp@!I2cdXLPwO6P^9&LJZV+KvR~cgB5JM{W9s zddvfainGqiw}SHh*Jb)cFYIhIWFc=7_^5+@#**lXU8-4h9w$vjC~9E%hlPcm;{q|} zzd1o$s6nj<))_V`>Tc}m9S37UL>nun5c;*;^X~4rgxr_kMYkNC>#wOfwevJ;3gy?~ ztlrDQLJix-vM`e`!xX%&SVtn0X<^rjG^Nx5DpQ@odL$YuI8%{dv^^p~1i^|3tHFI#k1k^0YN~`>bxVheJ@Mr>{6gRq?vM)E>qIwfKFi7g`gVCF3Qm&f6g){?vC6*+)xLFG#dX(mH$2m#=ypXZy zw!(P}+2m7C{c7-ENc6wi+R=eXA1LW6J&q;$X;?VfPHH$?k;o~OTrbu4;AhP37snq)K>h?&nr_^2x1#*14i<|7UgkyHuUpUXm%Ttf@=j!r0>ocz0ZT zdf>>BiL$V*6dqw3}_eVc<^_vhpcsu|m=TAGj=N~D%JVK3xXM=rt z;#&W708iSKvp!o6#$63u-evin>?de7CCrArrlRtB+Fg`9QgVww+idfy3cZ%h!xBw-BgV8;PKWT^~>qlnm+di$VHST@&ucR;|7-Mh7YS`P{OB_n7& zx_IN=Si@$Gvk1=Tgf-*xj_&L?iGYMJXfShJeh)lk@!C5Yx()1sxX1~uSCzMA8&zoP z$6v!~3ITE3>FVl2fQT`k>+E3UhF4XV6I@P7S<7r!3d@q`w3%Tdds)%p(Eu_knWv7I zFuYy9aA6(rxA@~ZDx(s&O1H#QC*y;_1K_;L#nWDyzrOY5J$ubZ=xZIjy^J7pY~yGQ$9qE-JjZv3AN9C%jo0A7r&nBG0r>YAC5YF!4(mWRF}D9ss7u@Ax8n-vHh$na?q_7w zj>3W8LGT7hb(}W}AQG}ewzdilLeLTQL$O%(04 zmBxGgcmr;nUA_>cU-tKcUOAjMK?KmtKI=!xc0j^23?Y!BaDhhfRLf@vb(IshzrjH{zZy5GM@GzpH5Y4nAsyN^n5mf+L;h&5T_&m>< zH4R({JHi`LSxFoog0IlBy*+FanoEtRIE#Wq9?$gjA7J#d&a}h@NQnNlZbbl*q%@2K z1W-aSLlIoGj{65Q2U$5OCWz)&^nRc~P;sf~=YtkK$yy4ZYL=N3~zmR49skyXwH=yq^M_xSBNM&lj4ZLs7|0xIL^^+Ki~0=Kts7b_Fj79gdc ziAr3ycFVI*)wPH+!U!rd3FN+7EnCJcs)r}2CkDjLUqWzy@OUZMT8@>+wa_r$n4lz z7gSkY-4|n6esMIhT=9pHbbDGo)t@DVh$36aAnnda|bs z){UZ6ld0zt*PTTdYS5It2Ds(yn6wRZZfwh~p(K2`zw$B*dcpBj6d^oiG#c#wNpV?h zIe^O}XRFa+K5oBN6{m9SG#Q?l_OkCsAt3eQ?s7t@4E(4k@4q-2M3n>ezwhW#Q~e_} z>4>+;(RvKOfm_UwPgc0#Z0M5rT{*Ps!Xm%QKPgTy9`EMFlCI)FewMdIXLeO-j3?>s zAht06r)gH_F;`!VF#j}mwfP@^IA&86Dtv*O5$;;reML%mnM6eTy!COS9YJ>@DG1)) zqQN0T0$y`{ZW4kfl^NhH&&G?t$*%qk#-qJv+1;+d-4`IJ^-*8e21Sf$g&eGUT_t z{3<55(9PiQpyukU{r&v~5OlhC#?Sj}-!~#?GCdd_y_td79^jsjLk@vl?w1+p^VkK3 zxL(VQ03(k2oc<@M7~6pLikCB5(~nqoQS%@(EoLV>XOPZ~cKBj*W@&`AHU)@iM9Z;z zhO8cpPCw`Np$!R5JL3V`Ohbz#eXEkmQ16*g6`=vpV`|ia{D8fIfsQdJBk5@*t^l^T z?e*MTe@Z0LaUDB)DVZ=~o^F^Sl=)28CMHX1Wkn;zm}`BR_*L!7+7gtHJm(Rqg|!Sm)JRyP4W0;rBvO>1n_q zATIYOPt@lvpsq%h1dRUMusw07m8Hz_4w- z+3MZ@w;F$C;MArqu|>+e#3L&He^wuAFtEq_DSq<`yJ(rk$K@IPXG(u#s~yoez@8n( z{1}y&Iu*GcJ;BlV_$FDAgFhJB1BHkK3}*$*o|%h}V1>fN0zo5zczZYhZ{95L_s%ol z?Y8|lbNioB2Xh;rGoP_++Ei>ib%vxd8*r+d8yznEt6yHNkrZI(*Nay?Jg36iiTQuB zsx{@0PLoC5O+Q<}pmK@oCOj&|Qr6r9Pp9#|N#H*W*CTMu=;OAAW)bFmpu|+i7N|8k zSA2bcZ0`0^2YSUUp5Qpy`RivC&64WWWwQ1uIQ%d42|{49^kWTX7P#w{fA~R8Qf1)BwSRH&iN}kHX&r*c zq1g9f+Rcm(Q_adJjhu#fXcyulNnS>*j=ENrNkD1y=M<+kB{!E?Px&|orO`ZmxSFIc zwDqXn#?8zb&H6Wn-lho+lHQ{0txxIhLES@>kKW0%evw7|ulIB?A(|T9+_`A+%b)m86x|M=1?7XH@Dhv3n@VoS z21S(ESp&SAe6#EG)mzHBiNxzX66>fHg$2}PiAUym?oP+$NlZM70H!13P}89kCw|`g zQEX*2N{Ayok6$oa_R6%&e*5TizULA`LWY(bF|Yz5M8*$7m`egg4bBeIueRlUS@7KP z5p24{yyP__V2Gw7Wy7_WdjdS$c0%byqw&~wroBql;h_@Jh z&7!hbQxP21RCp%;QU0%s;9fCxdS@^`DD87t5}{XSHa1&G^3mv`EgLD6ZP%V=#K(;J zjy|nn$)KEwpqwOFNMlKB#Fb6q2@z!v`%v&`>EXWvPY{zin;oXVIX+<`V)=iM8))nq z-mS{oZ#c(w4%i+Vf_3o77a+TkGM^$@0JSHQvdw7n>$Mu#oP$lUNvNK6j0B@zej*M4 zbCfr#RhrWjCUqVt0jWGxY8E4=JdaEOS!Wt3J?Y;OCkDQsTJh4haxD*wP<<>yxSPDX z_5Kk)H536Zh8*w`udRfKGgOdxUW-TJ5=Se}sCqtW21_Fr zh}Q;9Ih)h#T-!)K=MA{6S-+BDx(3u`>GMn#kZ3^!vG=p4$9qNm-1+mp#Y;e7)$nNK+t5CHx z6_Y2Jz@xDd0Npc@N@50W@+l9}Y_pD`hBQS4cz^_ms9kk+Tg&|`W;j(RVl<7+*wF6C z4o+vuX+^-E1@FNsZ#MWfd)s6BsiDXR+rqYUh=^El^_NorZAa`2_FeT^!N}e5fNXeH zOs%a0wk<;$SC|t+gQvZnvmJ%kT(;O~KqeY1hxru!-EvLIKi6j%)5g2R2bdp{Q=3)flF$hbe)y@GGO zMHGz>BlpgI-k~~*GkRcan_Q@7BDxl2wW^QTMFTLfE>VN`u#)*Mhd(Kq<#zt4 zv${T2w7dM*5#`%K5qEK33c$ss@QlhS-~Lgdsq2Gl+$_Vz6ZwMR1^q-kSNon;+m83t`FyYw%Of_VrgB4mj95e z5LEo0X{quTsF=M(A|uW7%+8zV*^ln%Xv)Zby#D>=p&)H{olD)JBH?iYb)*AQr?IorX=?=qT$GU0g;SD?k3+qsrHSwRhF zu|tr{z;{3_sa23q*_e2Co?Is()E$q^=-Hoqp$I8dB1fV;0ho&Doez zM;cU&V@HU27SxVr8YfzY$?bph>=Y-y-k4=^SvyQGx}~nG$^z{ICzUl{x27$J6{UN- zi3K_#(D?*;+hbB#TMQ@~)1us%f-nl8s49;sLDWD|e5Ru->}pe7=2J@-%B&)QdAy(!i|nSDn5zsF@!niE&ry7%rRa$oiX9`v2_z3oclT$FWB z2xfc+hkVK(@C+V_W5`4XGnk2~v@fWfXQ=$p*X_#2yTqj3Zu-F<#F(~FdKAuElub>a e*sveq9z2iC?9Har+s3?&=i=fcIAj^T;{O23jjhW7 literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/cace/scripts/freq.py b/modules/module_4_type_2_PLL/diff_Roscillator/cace/scripts/freq.py new file mode 100644 index 00000000..1014da4a --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/cace/scripts/freq.py @@ -0,0 +1,30 @@ +from typing import Any +import numpy as np + +def postprocess(results: dict[str, list], conditions: dict[str, Any]) -> dict[str, list]: + # Extract waveform + t = np.array(results['time_axis']) + y = np.array(results['vo_diff']) + + if len(y) == 0: + # Fallback if waveform is empty + return {'frequency': [0.0]} + + dt = np.mean(np.diff(t)) + fs = 1 / dt + + # FFT + Y = np.fft.fft(y - np.mean(y)) # remove DC + freqs = np.fft.fftfreq(len(Y), d=dt) + + # Only positive frequencies + mask = freqs > 0 + freqs = freqs[mask] + Y = np.abs(Y[mask]) + + # Find frequency with maximum magnitude + freq_peak = freqs[np.argmax(Y)] # convert to GHz + + + # Return as a list for compatibility with sweep/postprocessing tools + return {'frequency': [freq_peak]} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/cace/templates/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/cace/templates/diff_oscillator_tb.sch new file mode 100644 index 00000000..8b2e4f89 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/cace/templates/diff_oscillator_tb.sch @@ -0,0 +1,65 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=gnd} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +N 390 -280 390 -250 {lab=GND} +N 390 -370 390 -340 {lab=vdd} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 10 -1170 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +* Keep this if your manual run has it — parity matters + +.ic V(Voplus)=1.2 +.control +* Stability & parity options +set noaskquit +set numdgt=12 + +* Save vectors and run +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n 160p + +* Define explicit vectors (avoid V(...) on calculated vectors) +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +* --- Main file that CACE reads: 2 columns (time, vo_diff) --- +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff + +* --- Extra debug file (CACE ignores): 4 columns w/ names --- +set wr_vecnames +wrdata CACE\{simpath\}/debug_CACE\{N\}.dat time vo_p vo_m vo_diff +unset wr_vecnames + +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} +C {vsource.sym} 390 -310 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 390 -250 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 390 -370 2 0 {name=p5 sig_type=std_logic lab=vdd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/cace/templates/xschemrc b/modules/module_4_type_2_PLL/diff_Roscillator/cace/templates/xschemrc new file mode 100644 index 00000000..88fd1465 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/cace/templates/xschemrc @@ -0,0 +1,18 @@ +# xschemrc - Custom configuration file for xschem +# This file sources another xschemrc file from a known location + +# Source the base configuration from a known location +source $::env(PDK_ROOT)/$::env(PDK)/libs.tech/xschem/xschemrc + +# (Optional) Add any custom overrides or extensions below +# set xschem_library_path /home/user/my_libs +# set xschem_gui_font "Monospace 10" + +#### include skywater libraries. Here I use [pwd]. This works if I start xschem from here. +###only if you dont have this setup already ### +###append XSCHEM_LIBRARY_PATH :[file dirname [info script]] + + +#### Add custom libraries (directories with .lib files) +append XSCHEM_LIBRARY_PATH :../../xschem/ + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator.md b/modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator.md new file mode 100644 index 00000000..43b5c6fd --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator.md @@ -0,0 +1,50 @@ +# diff_ring_oscillator + +- Description: Differential Ring oscillator testbench +- PDK: ihp-sg13g2 + +## Authorship + +- Designer: None +- Company: None +- Created: None +- License: Apache 2.0 +- Last modified: None + +## Pins + +- vdd + + Description: Positive analog power supply + + Type: power + + Direction: inout + + Vmin: 0.8 + + Vmax: 1.8 +- gnd + + Description: Analog ground + + Type: ground + + Direction: inout + +## Default Conditions + +- vdd + + Description: Analog power supply voltage + + Display: Vdd + + Unit: V + + Typical: 1.2 +- corner + + Description: Process corner + + Display: Corner + + Typical: tt +- temperature + + Description: Ambient temperature + + Display: Temp + + Unit: °C + + Typical: 27 + +## Symbol + +![Symbol of diff_ring_oscillator](diff_ring_oscillator_symbol.svg) + +## Schematic + +![Schematic of diff_ring_oscillator](diff_ring_oscillator_schematic.svg) diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator/schematic/frequency.png b/modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator/schematic/frequency.png new file mode 100644 index 0000000000000000000000000000000000000000..d2bd4121ca10b5af73f837a89c772ae0f2bb88bf GIT binary patch literal 42515 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 ppp`w~_ps)s!V++p9XtPRN)O}Xd? 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 literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator_schematic.md b/modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator_schematic.md new file mode 100644 index 00000000..b83728f3 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator_schematic.md @@ -0,0 +1,15 @@ + +# CACE Summary for diff_ring_oscillator + +**netlist source**: schematic + +| Parameter | Tool | Result | Min Limit | Min Value | Typ Target | Typ Value | Max Limit | Max Value | Status | +| :------------------- | :------------------- | :-------------- | ---------: | -----------: | ---------: | -----------: | ---------: | -----------: | :------: | +| Freq | ngspice | frequency | 4.2 GHz | 5.414 GHz | 5.4 GHz | 5.414 GHz | 7.1 GHz | 5.414 GHz | Pass ✅ | + + +## Plots + +## frequency + +![frequency](./diff_ring_oscillator/schematic/frequency.png) diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator_schematic.svg b/modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator_schematic.svg new file mode 100644 index 00000000..5de9a6fa --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator_schematic.svg @@ -0,0 +1,160 @@ + + + + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator_symbol.svg b/modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator_symbol.svg new file mode 100644 index 00000000..5de9a6fa --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/docs/diff_ring_oscillator_symbol.svg @@ -0,0 +1,160 @@ + + + + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/diff_oscillator_tb.sch new file mode 100644 index 00000000..8007d3ee --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/diff_oscillator_tb.sch @@ -0,0 +1,42 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=#net1} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 0 -840 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +.ic V(Voplus)=1.2 +.control +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n +save all +let vo_diff = v(Voplus) - v(Vominus) +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data V(vo_diff) +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/frequency.png b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/frequency.png new file mode 100644 index 0000000000000000000000000000000000000000..f8b9f9a1995d7312aa812aff345a01896b3ac690 GIT binary patch literal 16308 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 NmXN=nbNA8n{{ynKz!Lxf literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/.spiceinit b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/conditions.yaml b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/conditions.yaml new file mode 100644 index 00000000..8eb2ce14 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/conditions.yaml @@ -0,0 +1,8 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: diff_oscillator_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0 +temperature: '27' diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/diff_oscillator_tb.sch new file mode 100644 index 00000000..36d01301 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/diff_oscillator_tb.sch @@ -0,0 +1,42 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=#net1} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 0 -840 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +.ic V(Voplus)=1.2 +.control +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n +save all +let vo_diff = v(Voplus) - v(Vominus) +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/diff_oscillator_tb_0.data V(vo_diff) +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice + +.temp 27 +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/diff_oscillator_tb_0.data b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/diff_oscillator_tb_0.data new file mode 100644 index 00000000..fbaae6a4 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/diff_oscillator_tb_0.data @@ -0,0 +1,208 @@ + 0.00000000e+00 1.50149049e+00 + 1.00000000e-13 1.49305933e+00 + 2.00000000e-13 1.48762993e+00 + 4.00000000e-13 1.47835377e+00 + 8.00000000e-13 1.46164680e+00 + 1.60000000e-12 1.42856559e+00 + 3.20000000e-12 1.36698463e+00 + 6.40000000e-12 1.25782460e+00 + 1.28000000e-11 1.08329184e+00 + 2.28000000e-11 8.71035493e-01 + 3.28000000e-11 7.01254834e-01 + 4.28000000e-11 5.69268666e-01 + 5.28000000e-11 4.67472873e-01 + 6.28000000e-11 3.88133688e-01 + 7.28000000e-11 3.25963336e-01 + 8.28000000e-11 2.75833402e-01 + 9.28000000e-11 2.35272475e-01 + 1.02800000e-10 2.01449017e-01 + 1.12800000e-10 1.72976489e-01 + 1.22800000e-10 1.48257979e-01 + 1.32800000e-10 1.26851615e-01 + 1.42800000e-10 1.07852737e-01 + 1.52800000e-10 9.13049778e-02 + 1.62800000e-10 7.66490286e-02 + 1.72800000e-10 6.40805814e-02 + 1.82800000e-10 5.31111453e-02 + 1.92800000e-10 4.39141630e-02 + 2.02800000e-10 3.59896484e-02 + 2.12800000e-10 2.94857246e-02 + 2.22800000e-10 2.39196602e-02 + 2.32800000e-10 1.94468223e-02 + 2.42800000e-10 1.56224285e-02 + 2.52800000e-10 1.26211750e-02 + 2.62800000e-10 1.00396496e-02 + 2.72800000e-10 8.07228591e-03 + 2.82800000e-10 6.35363179e-03 + 2.92800000e-10 5.09412630e-03 + 3.02800000e-10 3.96077425e-03 + 3.12800000e-10 3.17515852e-03 + 3.22800000e-10 2.43103839e-03 + 3.32800000e-10 1.95645853e-03 + 3.42800000e-10 1.46686012e-03 + 3.52800000e-10 1.19281616e-03 + 3.62800000e-10 8.67310196e-04 + 3.72800000e-10 7.20419269e-04 + 3.82800000e-10 4.99475012e-04 + 3.92800000e-10 4.31886194e-04 + 4.02800000e-10 2.76956531e-04 + 4.12800000e-10 2.57956889e-04 + 4.22800000e-10 1.44433763e-04 + 4.32800000e-10 1.54585536e-04 + 4.42800000e-10 6.69535287e-05 + 4.52800000e-10 9.41142808e-05 + 4.62800000e-10 2.26996257e-05 + 4.72800000e-10 5.93807102e-05 + 4.82800000e-10 -1.78612241e-06 + 4.92800000e-10 3.98585351e-05 + 5.02800000e-10 -1.47083610e-05 + 5.12800000e-10 2.91690709e-05 + 5.22800000e-10 -2.10064243e-05 + 5.32800000e-10 2.34975240e-05 + 5.42800000e-10 -2.36122120e-05 + 5.52800000e-10 2.05966110e-05 + 5.62800000e-10 -2.42373428e-05 + 5.72800000e-10 1.91662809e-05 + 5.82800000e-10 -2.38606720e-05 + 5.92800000e-10 1.84715158e-05 + 6.02800000e-10 -2.30271287e-05 + 6.12800000e-10 1.81092938e-05 + 6.22800000e-10 -2.20289175e-05 + 6.32800000e-10 1.78681053e-05 + 6.42800000e-10 -2.10140792e-05 + 6.52800000e-10 1.76443427e-05 + 6.62800000e-10 -2.00506354e-05 + 6.72800000e-10 1.73932875e-05 + 6.82800000e-10 -1.91638592e-05 + 6.92800000e-10 1.71009105e-05 + 7.02800000e-10 -1.83574797e-05 + 7.12800000e-10 1.67680328e-05 + 7.22800000e-10 -1.76254120e-05 + 7.32800000e-10 1.64017176e-05 + 7.42800000e-10 -1.69579955e-05 + 7.52800000e-10 1.60108123e-05 + 7.62800000e-10 -1.63451157e-05 + 7.72800000e-10 1.56038138e-05 + 7.82800000e-10 -1.57776080e-05 + 7.92800000e-10 1.51879916e-05 + 8.02800000e-10 -1.52477524e-05 + 8.12800000e-10 1.47691590e-05 + 8.22800000e-10 -1.47493166e-05 + 8.32800000e-10 1.43517499e-05 + 8.42800000e-10 -1.42773992e-05 + 8.52800000e-10 1.39390192e-05 + 8.62800000e-10 -1.38282052e-05 + 8.72800000e-10 1.35332720e-05 + 8.82800000e-10 -1.33988187e-05 + 8.92800000e-10 1.31360780e-05 + 9.02800000e-10 -1.29870020e-05 + 9.12800000e-10 1.27484537e-05 + 9.22800000e-10 -1.25910299e-05 + 9.32800000e-10 1.23710090e-05 + 9.42800000e-10 -1.22095585e-05 + 9.52800000e-10 1.20040604e-05 + 9.62800000e-10 -1.18415246e-05 + 9.72800000e-10 1.16477172e-05 + 9.82800000e-10 -1.14860712e-05 + 9.92800000e-10 1.13019442e-05 + 1.00280000e-09 -1.11424911e-05 + 1.01280000e-09 1.09666084e-05 + 1.02280000e-09 -1.08101874e-05 + 1.03280000e-09 1.06415116e-05 + 1.04280000e-09 -1.04886439e-05 + 1.05280000e-09 1.03264143e-05 + 1.06280000e-09 -1.01774042e-05 + 1.07280000e-09 1.00210517e-05 + 1.08280000e-09 -9.87605735e-06 + 1.09280000e-09 9.72514526e-06 + 1.10280000e-09 -9.58422695e-06 + 1.11280000e-09 9.43841071e-06 + 1.12280000e-09 -9.30156383e-06 + 1.13280000e-09 9.16056303e-06 + 1.14280000e-09 -9.02774079e-06 + 1.15280000e-09 8.89132013e-06 + 1.16280000e-09 -8.76244881e-06 + 1.17280000e-09 8.63040506e-06 + 1.18280000e-09 -8.50539433e-06 + 1.19280000e-09 8.37754749e-06 + 1.20280000e-09 -8.25629736e-06 + 1.21280000e-09 8.13248451e-06 + 1.22280000e-09 -8.01488990e-06 + 1.23280000e-09 7.89496117e-06 + 1.24280000e-09 -7.78091494e-06 + 1.25280000e-09 7.66473063e-06 + 1.26280000e-09 -7.55412554e-06 + 1.27280000e-09 7.44155422e-06 + 1.28280000e-09 -7.33428425e-06 + 1.29280000e-09 7.22520127e-06 + 1.30280000e-09 -7.12116247e-06 + 1.31280000e-09 7.01544909e-06 + 1.32280000e-09 -6.91453993e-06 + 1.33280000e-09 6.81208267e-06 + 1.34280000e-09 -6.71420446e-06 + 1.35280000e-09 6.61489446e-06 + 1.36280000e-09 -6.51995139e-06 + 1.37280000e-09 6.42368417e-06 + 1.38280000e-09 -6.33158344e-06 + 1.39280000e-09 6.23825850e-06 + 1.40280000e-09 -6.14891024e-06 + 1.41280000e-09 6.05843085e-06 + 1.42280000e-09 -5.97174817e-06 + 1.43280000e-09 5.88402118e-06 + 1.44280000e-09 -5.79992000e-06 + 1.45280000e-09 5.71485565e-06 + 1.46280000e-09 -5.63325474e-06 + 1.47280000e-09 5.55076647e-06 + 1.48280000e-09 -5.47158728e-06 + 1.49280000e-09 5.39159165e-06 + 1.50280000e-09 -5.31475827e-06 + 1.51280000e-09 5.23717479e-06 + 1.52280000e-09 -5.16261385e-06 + 1.53280000e-09 5.08736485e-06 + 1.54280000e-09 -5.01500544e-06 + 1.55280000e-09 4.94201599e-06 + 1.56280000e-09 -4.87178954e-06 + 1.57280000e-09 4.80098734e-06 + 1.58280000e-09 -4.73282758e-06 + 1.59280000e-09 4.66414285e-06 + 1.60280000e-09 -4.59798569e-06 + 1.61280000e-09 4.53135104e-06 + 1.62280000e-09 -4.46713454e-06 + 1.63280000e-09 4.40248494e-06 + 1.64280000e-09 -4.34014921e-06 + 1.65280000e-09 4.27742183e-06 + 1.66280000e-09 -4.21690894e-06 + 1.67280000e-09 4.15604313e-06 + 1.68280000e-09 -4.09729707e-06 + 1.69280000e-09 4.03823423e-06 + 1.70280000e-09 -3.98120084e-06 + 1.71280000e-09 3.92388436e-06 + 1.72280000e-09 -3.86851124e-06 + 1.73280000e-09 3.81288648e-06 + 1.74280000e-09 -3.75912291e-06 + 1.75280000e-09 3.70513701e-06 + 1.76280000e-09 -3.65293401e-06 + 1.77280000e-09 3.60053592e-06 + 1.78280000e-09 -3.54984600e-06 + 1.79280000e-09 3.49898643e-06 + 1.80280000e-09 -3.44976368e-06 + 1.81280000e-09 3.40039490e-06 + 1.82280000e-09 -3.35259493e-06 + 1.83280000e-09 3.30467088e-06 + 1.84280000e-09 -3.25825066e-06 + 1.85280000e-09 3.21172679e-06 + 1.86280000e-09 -3.16664472e-06 + 1.87280000e-09 3.12147793e-06 + 1.88280000e-09 -3.07769371e-06 + 1.89280000e-09 3.03384239e-06 + 1.90280000e-09 -2.99131704e-06 + 1.91280000e-09 2.94874091e-06 + 1.92280000e-09 -2.90743663e-06 + 1.93280000e-09 2.86609674e-06 + 1.94280000e-09 -2.82597704e-06 + 1.95280000e-09 2.78583567e-06 + 1.96280000e-09 -2.74686516e-06 + 1.97280000e-09 2.70788585e-06 + 1.98280000e-09 -2.67003028e-06 + 1.99280000e-09 2.63217780e-06 + 2.00000000e-09 -2.57652890e-06 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/diff_ring_oscillator.sym b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/diff_ring_oscillator.sym new file mode 100644 index 00000000..e632b156 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/run_0/diff_ring_oscillator.sym @@ -0,0 +1,27 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 70 -20 90 -20 {} +L 4 70 20 90 20 {} +L 7 20 70 20 90 {} +L 7 -20 70 -20 90 {} +B 5 87.5 -22.5 92.5 -17.5 {name=Voplus dir=out} +B 5 17.5 87.5 22.5 92.5 {name=vdd dir=inout} +B 5 -22.5 87.5 -17.5 92.5 {name=gnd dir=inout} +B 5 87.5 17.5 92.5 22.5 {name=Vominus dir=out} +A 4 -1.666666666666714 1.666666666666714 71.68604389202189 287.5924245621816 360 {} +A 4 -30 27.5 40.69705149024927 42.51044707800085 94.97910584399833 {} +A 4 30 -27.5 40.69705149024927 222.5104470780009 94.97910584399833 {} +T {@symname} -40.5 -56 0 0 0.1 0.1 {} +T {@name} -40 -47 0 0 0.1 0.1 { +} +T {Voplus} 65 -24 0 1 0.2 0.2 {} +T {vdd} 5 64 2 1 0.2 0.2 {} +T {gnd} -35 64 2 1 0.2 0.2 {} +T {Vominus} 65 16 0 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/simulation_summary.csv b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/simulation_summary.csv new file mode 100644 index 00000000..f0e1ddca --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/simulation_summary.csv @@ -0,0 +1,2 @@ +run,time_axis,vo_diff,frequency +run_0,"[0.000, 1.000e-13, 2.000e-13, …]","[1.501, 1.493, 1.488, …]",4.976e+08 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/simulation_summary.md b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/simulation_summary.md new file mode 100644 index 00000000..fba78079 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/parameters/Frequency/simulation_summary.md @@ -0,0 +1,5 @@ +# Simulation Summary for Freq + +| run | time_axis | vo_diff | frequency | +| :-- | --------: | ------: | --------: | +| run_0 | [0.000, 1.000e-13, 2.000e-13, …] | [1.501, 1.493, 1.488, …] | 4.976e+08 | diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/summary.md b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/summary.md new file mode 100644 index 00000000..13a3fa51 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-36-06/summary.md @@ -0,0 +1,9 @@ + +# CACE Summary for diff_ring_oscillator + +**netlist source**: schematic + +| Parameter | Tool | Result | Min Limit | Min Value | Typ Target | Typ Value | Max Limit | Max Value | Status | +| :------------------- | :------------------- | :-------------- | ---------: | -----------: | ---------: | -----------: | ---------: | -----------: | :------: | +| Freq | ngspice | frequency | any | 0.498 GHz | any | 0.498 GHz | any | 0.498 GHz | Pass ✅ | + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/diff_oscillator_tb.sch new file mode 100644 index 00000000..35552a14 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/diff_oscillator_tb.sch @@ -0,0 +1,42 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=gnd} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 0 -840 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +.ic V(Voplus)=1.2 +.control +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n +save all +let vo_diff = v(Voplus) - v(Vominus) +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/frequency.png b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/frequency.png new file mode 100644 index 0000000000000000000000000000000000000000..f8b9f9a1995d7312aa812aff345a01896b3ac690 GIT binary patch literal 16308 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 NmXN=nbNA8n{{ynKz!Lxf literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/.spiceinit b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/conditions.yaml b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/conditions.yaml new file mode 100644 index 00000000..e9db1781 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/conditions.yaml @@ -0,0 +1,8 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: diff_oscillator_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0 +temperature: '27' diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/diff_oscillator_tb.sch new file mode 100644 index 00000000..94bdb520 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/diff_oscillator_tb.sch @@ -0,0 +1,42 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=gnd} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 0 -840 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +.ic V(Voplus)=1.2 +.control +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n +save all +let vo_diff = v(Voplus) - v(Vominus) +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/diff_oscillator_tb_0.data vo_diff +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice + +.temp 27 +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/diff_oscillator_tb_0.data b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/diff_oscillator_tb_0.data new file mode 100644 index 00000000..fbaae6a4 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/diff_oscillator_tb_0.data @@ -0,0 +1,208 @@ + 0.00000000e+00 1.50149049e+00 + 1.00000000e-13 1.49305933e+00 + 2.00000000e-13 1.48762993e+00 + 4.00000000e-13 1.47835377e+00 + 8.00000000e-13 1.46164680e+00 + 1.60000000e-12 1.42856559e+00 + 3.20000000e-12 1.36698463e+00 + 6.40000000e-12 1.25782460e+00 + 1.28000000e-11 1.08329184e+00 + 2.28000000e-11 8.71035493e-01 + 3.28000000e-11 7.01254834e-01 + 4.28000000e-11 5.69268666e-01 + 5.28000000e-11 4.67472873e-01 + 6.28000000e-11 3.88133688e-01 + 7.28000000e-11 3.25963336e-01 + 8.28000000e-11 2.75833402e-01 + 9.28000000e-11 2.35272475e-01 + 1.02800000e-10 2.01449017e-01 + 1.12800000e-10 1.72976489e-01 + 1.22800000e-10 1.48257979e-01 + 1.32800000e-10 1.26851615e-01 + 1.42800000e-10 1.07852737e-01 + 1.52800000e-10 9.13049778e-02 + 1.62800000e-10 7.66490286e-02 + 1.72800000e-10 6.40805814e-02 + 1.82800000e-10 5.31111453e-02 + 1.92800000e-10 4.39141630e-02 + 2.02800000e-10 3.59896484e-02 + 2.12800000e-10 2.94857246e-02 + 2.22800000e-10 2.39196602e-02 + 2.32800000e-10 1.94468223e-02 + 2.42800000e-10 1.56224285e-02 + 2.52800000e-10 1.26211750e-02 + 2.62800000e-10 1.00396496e-02 + 2.72800000e-10 8.07228591e-03 + 2.82800000e-10 6.35363179e-03 + 2.92800000e-10 5.09412630e-03 + 3.02800000e-10 3.96077425e-03 + 3.12800000e-10 3.17515852e-03 + 3.22800000e-10 2.43103839e-03 + 3.32800000e-10 1.95645853e-03 + 3.42800000e-10 1.46686012e-03 + 3.52800000e-10 1.19281616e-03 + 3.62800000e-10 8.67310196e-04 + 3.72800000e-10 7.20419269e-04 + 3.82800000e-10 4.99475012e-04 + 3.92800000e-10 4.31886194e-04 + 4.02800000e-10 2.76956531e-04 + 4.12800000e-10 2.57956889e-04 + 4.22800000e-10 1.44433763e-04 + 4.32800000e-10 1.54585536e-04 + 4.42800000e-10 6.69535287e-05 + 4.52800000e-10 9.41142808e-05 + 4.62800000e-10 2.26996257e-05 + 4.72800000e-10 5.93807102e-05 + 4.82800000e-10 -1.78612241e-06 + 4.92800000e-10 3.98585351e-05 + 5.02800000e-10 -1.47083610e-05 + 5.12800000e-10 2.91690709e-05 + 5.22800000e-10 -2.10064243e-05 + 5.32800000e-10 2.34975240e-05 + 5.42800000e-10 -2.36122120e-05 + 5.52800000e-10 2.05966110e-05 + 5.62800000e-10 -2.42373428e-05 + 5.72800000e-10 1.91662809e-05 + 5.82800000e-10 -2.38606720e-05 + 5.92800000e-10 1.84715158e-05 + 6.02800000e-10 -2.30271287e-05 + 6.12800000e-10 1.81092938e-05 + 6.22800000e-10 -2.20289175e-05 + 6.32800000e-10 1.78681053e-05 + 6.42800000e-10 -2.10140792e-05 + 6.52800000e-10 1.76443427e-05 + 6.62800000e-10 -2.00506354e-05 + 6.72800000e-10 1.73932875e-05 + 6.82800000e-10 -1.91638592e-05 + 6.92800000e-10 1.71009105e-05 + 7.02800000e-10 -1.83574797e-05 + 7.12800000e-10 1.67680328e-05 + 7.22800000e-10 -1.76254120e-05 + 7.32800000e-10 1.64017176e-05 + 7.42800000e-10 -1.69579955e-05 + 7.52800000e-10 1.60108123e-05 + 7.62800000e-10 -1.63451157e-05 + 7.72800000e-10 1.56038138e-05 + 7.82800000e-10 -1.57776080e-05 + 7.92800000e-10 1.51879916e-05 + 8.02800000e-10 -1.52477524e-05 + 8.12800000e-10 1.47691590e-05 + 8.22800000e-10 -1.47493166e-05 + 8.32800000e-10 1.43517499e-05 + 8.42800000e-10 -1.42773992e-05 + 8.52800000e-10 1.39390192e-05 + 8.62800000e-10 -1.38282052e-05 + 8.72800000e-10 1.35332720e-05 + 8.82800000e-10 -1.33988187e-05 + 8.92800000e-10 1.31360780e-05 + 9.02800000e-10 -1.29870020e-05 + 9.12800000e-10 1.27484537e-05 + 9.22800000e-10 -1.25910299e-05 + 9.32800000e-10 1.23710090e-05 + 9.42800000e-10 -1.22095585e-05 + 9.52800000e-10 1.20040604e-05 + 9.62800000e-10 -1.18415246e-05 + 9.72800000e-10 1.16477172e-05 + 9.82800000e-10 -1.14860712e-05 + 9.92800000e-10 1.13019442e-05 + 1.00280000e-09 -1.11424911e-05 + 1.01280000e-09 1.09666084e-05 + 1.02280000e-09 -1.08101874e-05 + 1.03280000e-09 1.06415116e-05 + 1.04280000e-09 -1.04886439e-05 + 1.05280000e-09 1.03264143e-05 + 1.06280000e-09 -1.01774042e-05 + 1.07280000e-09 1.00210517e-05 + 1.08280000e-09 -9.87605735e-06 + 1.09280000e-09 9.72514526e-06 + 1.10280000e-09 -9.58422695e-06 + 1.11280000e-09 9.43841071e-06 + 1.12280000e-09 -9.30156383e-06 + 1.13280000e-09 9.16056303e-06 + 1.14280000e-09 -9.02774079e-06 + 1.15280000e-09 8.89132013e-06 + 1.16280000e-09 -8.76244881e-06 + 1.17280000e-09 8.63040506e-06 + 1.18280000e-09 -8.50539433e-06 + 1.19280000e-09 8.37754749e-06 + 1.20280000e-09 -8.25629736e-06 + 1.21280000e-09 8.13248451e-06 + 1.22280000e-09 -8.01488990e-06 + 1.23280000e-09 7.89496117e-06 + 1.24280000e-09 -7.78091494e-06 + 1.25280000e-09 7.66473063e-06 + 1.26280000e-09 -7.55412554e-06 + 1.27280000e-09 7.44155422e-06 + 1.28280000e-09 -7.33428425e-06 + 1.29280000e-09 7.22520127e-06 + 1.30280000e-09 -7.12116247e-06 + 1.31280000e-09 7.01544909e-06 + 1.32280000e-09 -6.91453993e-06 + 1.33280000e-09 6.81208267e-06 + 1.34280000e-09 -6.71420446e-06 + 1.35280000e-09 6.61489446e-06 + 1.36280000e-09 -6.51995139e-06 + 1.37280000e-09 6.42368417e-06 + 1.38280000e-09 -6.33158344e-06 + 1.39280000e-09 6.23825850e-06 + 1.40280000e-09 -6.14891024e-06 + 1.41280000e-09 6.05843085e-06 + 1.42280000e-09 -5.97174817e-06 + 1.43280000e-09 5.88402118e-06 + 1.44280000e-09 -5.79992000e-06 + 1.45280000e-09 5.71485565e-06 + 1.46280000e-09 -5.63325474e-06 + 1.47280000e-09 5.55076647e-06 + 1.48280000e-09 -5.47158728e-06 + 1.49280000e-09 5.39159165e-06 + 1.50280000e-09 -5.31475827e-06 + 1.51280000e-09 5.23717479e-06 + 1.52280000e-09 -5.16261385e-06 + 1.53280000e-09 5.08736485e-06 + 1.54280000e-09 -5.01500544e-06 + 1.55280000e-09 4.94201599e-06 + 1.56280000e-09 -4.87178954e-06 + 1.57280000e-09 4.80098734e-06 + 1.58280000e-09 -4.73282758e-06 + 1.59280000e-09 4.66414285e-06 + 1.60280000e-09 -4.59798569e-06 + 1.61280000e-09 4.53135104e-06 + 1.62280000e-09 -4.46713454e-06 + 1.63280000e-09 4.40248494e-06 + 1.64280000e-09 -4.34014921e-06 + 1.65280000e-09 4.27742183e-06 + 1.66280000e-09 -4.21690894e-06 + 1.67280000e-09 4.15604313e-06 + 1.68280000e-09 -4.09729707e-06 + 1.69280000e-09 4.03823423e-06 + 1.70280000e-09 -3.98120084e-06 + 1.71280000e-09 3.92388436e-06 + 1.72280000e-09 -3.86851124e-06 + 1.73280000e-09 3.81288648e-06 + 1.74280000e-09 -3.75912291e-06 + 1.75280000e-09 3.70513701e-06 + 1.76280000e-09 -3.65293401e-06 + 1.77280000e-09 3.60053592e-06 + 1.78280000e-09 -3.54984600e-06 + 1.79280000e-09 3.49898643e-06 + 1.80280000e-09 -3.44976368e-06 + 1.81280000e-09 3.40039490e-06 + 1.82280000e-09 -3.35259493e-06 + 1.83280000e-09 3.30467088e-06 + 1.84280000e-09 -3.25825066e-06 + 1.85280000e-09 3.21172679e-06 + 1.86280000e-09 -3.16664472e-06 + 1.87280000e-09 3.12147793e-06 + 1.88280000e-09 -3.07769371e-06 + 1.89280000e-09 3.03384239e-06 + 1.90280000e-09 -2.99131704e-06 + 1.91280000e-09 2.94874091e-06 + 1.92280000e-09 -2.90743663e-06 + 1.93280000e-09 2.86609674e-06 + 1.94280000e-09 -2.82597704e-06 + 1.95280000e-09 2.78583567e-06 + 1.96280000e-09 -2.74686516e-06 + 1.97280000e-09 2.70788585e-06 + 1.98280000e-09 -2.67003028e-06 + 1.99280000e-09 2.63217780e-06 + 2.00000000e-09 -2.57652890e-06 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/diff_ring_oscillator.sym b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/diff_ring_oscillator.sym new file mode 100644 index 00000000..e632b156 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/run_0/diff_ring_oscillator.sym @@ -0,0 +1,27 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 70 -20 90 -20 {} +L 4 70 20 90 20 {} +L 7 20 70 20 90 {} +L 7 -20 70 -20 90 {} +B 5 87.5 -22.5 92.5 -17.5 {name=Voplus dir=out} +B 5 17.5 87.5 22.5 92.5 {name=vdd dir=inout} +B 5 -22.5 87.5 -17.5 92.5 {name=gnd dir=inout} +B 5 87.5 17.5 92.5 22.5 {name=Vominus dir=out} +A 4 -1.666666666666714 1.666666666666714 71.68604389202189 287.5924245621816 360 {} +A 4 -30 27.5 40.69705149024927 42.51044707800085 94.97910584399833 {} +A 4 30 -27.5 40.69705149024927 222.5104470780009 94.97910584399833 {} +T {@symname} -40.5 -56 0 0 0.1 0.1 {} +T {@name} -40 -47 0 0 0.1 0.1 { +} +T {Voplus} 65 -24 0 1 0.2 0.2 {} +T {vdd} 5 64 2 1 0.2 0.2 {} +T {gnd} -35 64 2 1 0.2 0.2 {} +T {Vominus} 65 16 0 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/simulation_summary.csv b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/simulation_summary.csv new file mode 100644 index 00000000..f0e1ddca --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/simulation_summary.csv @@ -0,0 +1,2 @@ +run,time_axis,vo_diff,frequency +run_0,"[0.000, 1.000e-13, 2.000e-13, …]","[1.501, 1.493, 1.488, …]",4.976e+08 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/simulation_summary.md b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/simulation_summary.md new file mode 100644 index 00000000..fba78079 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/parameters/Frequency/simulation_summary.md @@ -0,0 +1,5 @@ +# Simulation Summary for Freq + +| run | time_axis | vo_diff | frequency | +| :-- | --------: | ------: | --------: | +| run_0 | [0.000, 1.000e-13, 2.000e-13, …] | [1.501, 1.493, 1.488, …] | 4.976e+08 | diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/summary.md b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/summary.md new file mode 100644 index 00000000..13a3fa51 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-53-50/summary.md @@ -0,0 +1,9 @@ + +# CACE Summary for diff_ring_oscillator + +**netlist source**: schematic + +| Parameter | Tool | Result | Min Limit | Min Value | Typ Target | Typ Value | Max Limit | Max Value | Status | +| :------------------- | :------------------- | :-------------- | ---------: | -----------: | ---------: | -----------: | ---------: | -----------: | :------: | +| Freq | ngspice | frequency | any | 0.498 GHz | any | 0.498 GHz | any | 0.498 GHz | Pass ✅ | + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/diff_oscillator_tb.sch new file mode 100644 index 00000000..7a5b911e --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/diff_oscillator_tb.sch @@ -0,0 +1,42 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=gnd} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 0 -840 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +.ic V(Voplus)=1.2 +.control +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n +save all +let vo_diff = v(Vominus) +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/frequency.png b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/frequency.png new file mode 100644 index 0000000000000000000000000000000000000000..98cf514eceb1e104b3855a47188f5e39333f498a GIT binary patch literal 15407 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 K(yu>w{{H|KyIQCK literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/.spiceinit b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/conditions.yaml b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/conditions.yaml new file mode 100644 index 00000000..8b95e613 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/conditions.yaml @@ -0,0 +1,8 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: diff_oscillator_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0 +temperature: '27' diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/diff_oscillator_tb.sch new file mode 100644 index 00000000..b9a76f33 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/diff_oscillator_tb.sch @@ -0,0 +1,42 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=gnd} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 0 -840 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +.ic V(Voplus)=1.2 +.control +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n +save all +let vo_diff = v(Vominus) +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/diff_oscillator_tb_0.data vo_diff +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice + +.temp 27 +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/diff_oscillator_tb_0.data b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/diff_oscillator_tb_0.data new file mode 100644 index 00000000..94a10bb1 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/diff_oscillator_tb_0.data @@ -0,0 +1,208 @@ + 0.00000000e+00 -3.01490490e-01 + 1.00000000e-13 -3.02202826e-01 + 2.00000000e-13 -3.03217377e-01 + 4.00000000e-13 -3.05487354e-01 + 8.00000000e-13 -3.10275218e-01 + 1.60000000e-12 -3.19403583e-01 + 3.20000000e-12 -3.36524442e-01 + 6.40000000e-12 -3.64521958e-01 + 1.28000000e-11 -3.98981227e-01 + 2.28000000e-11 -4.43228477e-01 + 3.28000000e-11 -4.93037785e-01 + 4.28000000e-11 -5.39656031e-01 + 5.28000000e-11 -5.82569960e-01 + 6.28000000e-11 -6.19247599e-01 + 7.28000000e-11 -6.50724716e-01 + 8.28000000e-11 -6.75840014e-01 + 9.28000000e-11 -6.95891563e-01 + 1.02800000e-10 -7.11431033e-01 + 1.12800000e-10 -7.23499559e-01 + 1.22800000e-10 -7.32486459e-01 + 1.32800000e-10 -7.39227962e-01 + 1.42800000e-10 -7.44106441e-01 + 1.52800000e-10 -7.47706778e-01 + 1.62800000e-10 -7.50297462e-01 + 1.72800000e-10 -7.52247704e-01 + 1.82800000e-10 -7.53705550e-01 + 1.92800000e-10 -7.54885573e-01 + 2.02800000e-10 -7.55847028e-01 + 2.12800000e-10 -7.56709052e-01 + 2.22800000e-10 -7.57478760e-01 + 2.32800000e-10 -7.58222730e-01 + 2.42800000e-10 -7.58922387e-01 + 2.52800000e-10 -7.59617923e-01 + 2.62800000e-10 -7.60280787e-01 + 2.72800000e-10 -7.60939179e-01 + 2.82800000e-10 -7.61562746e-01 + 2.92800000e-10 -7.62174903e-01 + 3.02800000e-10 -7.62747147e-01 + 3.12800000e-10 -7.63301297e-01 + 3.22800000e-10 -7.63811913e-01 + 3.32800000e-10 -7.64300339e-01 + 3.42800000e-10 -7.64744245e-01 + 3.52800000e-10 -7.65164667e-01 + 3.62800000e-10 -7.65541965e-01 + 3.72800000e-10 -7.65896671e-01 + 3.82800000e-10 -7.66211317e-01 + 3.92800000e-10 -7.66505656e-01 + 4.02800000e-10 -7.66763929e-01 + 4.12800000e-10 -7.67004885e-01 + 4.22800000e-10 -7.67214108e-01 + 4.32800000e-10 -7.67409200e-01 + 4.42800000e-10 -7.67576833e-01 + 4.52800000e-10 -7.67733389e-01 + 4.62800000e-10 -7.67866462e-01 + 4.72800000e-10 -7.67991198e-01 + 4.82800000e-10 -7.68096006e-01 + 4.92800000e-10 -7.68194826e-01 + 5.02800000e-10 -7.68276812e-01 + 5.12800000e-10 -7.68354753e-01 + 5.22800000e-10 -7.68418504e-01 + 5.32800000e-10 -7.68479766e-01 + 5.42800000e-10 -7.68529072e-01 + 5.52800000e-10 -7.68577103e-01 + 5.62800000e-10 -7.68615050e-01 + 5.72800000e-10 -7.68652640e-01 + 5.82800000e-10 -7.68681710e-01 + 5.92800000e-10 -7.68711097e-01 + 6.02800000e-10 -7.68733266e-01 + 6.12800000e-10 -7.68756227e-01 + 6.22800000e-10 -7.68773059e-01 + 6.32800000e-10 -7.68790999e-01 + 6.42800000e-10 -7.68803722e-01 + 6.52800000e-10 -7.68817744e-01 + 6.62800000e-10 -7.68827316e-01 + 6.72800000e-10 -7.68838283e-01 + 6.82800000e-10 -7.68845452e-01 + 6.92800000e-10 -7.68854035e-01 + 7.02800000e-10 -7.68859379e-01 + 7.12800000e-10 -7.68866101e-01 + 7.22800000e-10 -7.68870067e-01 + 7.32800000e-10 -7.68875334e-01 + 7.42800000e-10 -7.68878265e-01 + 7.52800000e-10 -7.68882392e-01 + 7.62800000e-10 -7.68884551e-01 + 7.72800000e-10 -7.68887781e-01 + 7.82800000e-10 -7.68889372e-01 + 7.92800000e-10 -7.68891893e-01 + 8.02800000e-10 -7.68893068e-01 + 8.12800000e-10 -7.68895026e-01 + 8.22800000e-10 -7.68895903e-01 + 8.32800000e-10 -7.68897411e-01 + 8.42800000e-10 -7.68898078e-01 + 8.52800000e-10 -7.68899224e-01 + 8.62800000e-10 -7.68899749e-01 + 8.72800000e-10 -7.68900600e-01 + 8.82800000e-10 -7.68901033e-01 + 8.92800000e-10 -7.68901643e-01 + 9.02800000e-10 -7.68902021e-01 + 9.12800000e-10 -7.68902432e-01 + 9.22800000e-10 -7.68902783e-01 + 9.32800000e-10 -7.68903027e-01 + 9.42800000e-10 -7.68903372e-01 + 9.52800000e-10 -7.68903474e-01 + 9.62800000e-10 -7.68903828e-01 + 9.72800000e-10 -7.68903809e-01 + 9.82800000e-10 -7.68904182e-01 + 9.92800000e-10 -7.68904059e-01 + 1.00280000e-09 -7.68904458e-01 + 1.01280000e-09 -7.68904244e-01 + 1.02280000e-09 -7.68904674e-01 + 1.03280000e-09 -7.68904379e-01 + 1.04280000e-09 -7.68904844e-01 + 1.05280000e-09 -7.68904478e-01 + 1.06280000e-09 -7.68904979e-01 + 1.07280000e-09 -7.68904549e-01 + 1.08280000e-09 -7.68905086e-01 + 1.09280000e-09 -7.68904598e-01 + 1.10280000e-09 -7.68905172e-01 + 1.11280000e-09 -7.68904632e-01 + 1.12280000e-09 -7.68905242e-01 + 1.13280000e-09 -7.68904654e-01 + 1.14280000e-09 -7.68905299e-01 + 1.15280000e-09 -7.68904667e-01 + 1.16280000e-09 -7.68905345e-01 + 1.17280000e-09 -7.68904673e-01 + 1.18280000e-09 -7.68905384e-01 + 1.19280000e-09 -7.68904675e-01 + 1.20280000e-09 -7.68905417e-01 + 1.21280000e-09 -7.68904674e-01 + 1.22280000e-09 -7.68905444e-01 + 1.23280000e-09 -7.68904671e-01 + 1.24280000e-09 -7.68905468e-01 + 1.25280000e-09 -7.68904665e-01 + 1.26280000e-09 -7.68905488e-01 + 1.27280000e-09 -7.68904659e-01 + 1.28280000e-09 -7.68905506e-01 + 1.29280000e-09 -7.68904652e-01 + 1.30280000e-09 -7.68905521e-01 + 1.31280000e-09 -7.68904645e-01 + 1.32280000e-09 -7.68905535e-01 + 1.33280000e-09 -7.68904638e-01 + 1.34280000e-09 -7.68905546e-01 + 1.35280000e-09 -7.68904632e-01 + 1.36280000e-09 -7.68905557e-01 + 1.37280000e-09 -7.68904625e-01 + 1.38280000e-09 -7.68905566e-01 + 1.39280000e-09 -7.68904619e-01 + 1.40280000e-09 -7.68905575e-01 + 1.41280000e-09 -7.68904613e-01 + 1.42280000e-09 -7.68905582e-01 + 1.43280000e-09 -7.68904607e-01 + 1.44280000e-09 -7.68905588e-01 + 1.45280000e-09 -7.68904602e-01 + 1.46280000e-09 -7.68905594e-01 + 1.47280000e-09 -7.68904598e-01 + 1.48280000e-09 -7.68905599e-01 + 1.49280000e-09 -7.68904594e-01 + 1.50280000e-09 -7.68905603e-01 + 1.51280000e-09 -7.68904590e-01 + 1.52280000e-09 -7.68905607e-01 + 1.53280000e-09 -7.68904587e-01 + 1.54280000e-09 -7.68905610e-01 + 1.55280000e-09 -7.68904585e-01 + 1.56280000e-09 -7.68905613e-01 + 1.57280000e-09 -7.68904582e-01 + 1.58280000e-09 -7.68905615e-01 + 1.59280000e-09 -7.68904581e-01 + 1.60280000e-09 -7.68905617e-01 + 1.61280000e-09 -7.68904579e-01 + 1.62280000e-09 -7.68905618e-01 + 1.63280000e-09 -7.68904578e-01 + 1.64280000e-09 -7.68905619e-01 + 1.65280000e-09 -7.68904578e-01 + 1.66280000e-09 -7.68905619e-01 + 1.67280000e-09 -7.68904577e-01 + 1.68280000e-09 -7.68905620e-01 + 1.69280000e-09 -7.68904578e-01 + 1.70280000e-09 -7.68905619e-01 + 1.71280000e-09 -7.68904578e-01 + 1.72280000e-09 -7.68905619e-01 + 1.73280000e-09 -7.68904579e-01 + 1.74280000e-09 -7.68905618e-01 + 1.75280000e-09 -7.68904580e-01 + 1.76280000e-09 -7.68905617e-01 + 1.77280000e-09 -7.68904581e-01 + 1.78280000e-09 -7.68905615e-01 + 1.79280000e-09 -7.68904582e-01 + 1.80280000e-09 -7.68905614e-01 + 1.81280000e-09 -7.68904584e-01 + 1.82280000e-09 -7.68905612e-01 + 1.83280000e-09 -7.68904586e-01 + 1.84280000e-09 -7.68905610e-01 + 1.85280000e-09 -7.68904588e-01 + 1.86280000e-09 -7.68905607e-01 + 1.87280000e-09 -7.68904591e-01 + 1.88280000e-09 -7.68905605e-01 + 1.89280000e-09 -7.68904593e-01 + 1.90280000e-09 -7.68905602e-01 + 1.91280000e-09 -7.68904596e-01 + 1.92280000e-09 -7.68905599e-01 + 1.93280000e-09 -7.68904599e-01 + 1.94280000e-09 -7.68905596e-01 + 1.95280000e-09 -7.68904602e-01 + 1.96280000e-09 -7.68905593e-01 + 1.97280000e-09 -7.68904606e-01 + 1.98280000e-09 -7.68905590e-01 + 1.99280000e-09 -7.68904609e-01 + 2.00000000e-09 -7.68905584e-01 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/diff_ring_oscillator.sym b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/diff_ring_oscillator.sym new file mode 100644 index 00000000..e632b156 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/run_0/diff_ring_oscillator.sym @@ -0,0 +1,27 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 70 -20 90 -20 {} +L 4 70 20 90 20 {} +L 7 20 70 20 90 {} +L 7 -20 70 -20 90 {} +B 5 87.5 -22.5 92.5 -17.5 {name=Voplus dir=out} +B 5 17.5 87.5 22.5 92.5 {name=vdd dir=inout} +B 5 -22.5 87.5 -17.5 92.5 {name=gnd dir=inout} +B 5 87.5 17.5 92.5 22.5 {name=Vominus dir=out} +A 4 -1.666666666666714 1.666666666666714 71.68604389202189 287.5924245621816 360 {} +A 4 -30 27.5 40.69705149024927 42.51044707800085 94.97910584399833 {} +A 4 30 -27.5 40.69705149024927 222.5104470780009 94.97910584399833 {} +T {@symname} -40.5 -56 0 0 0.1 0.1 {} +T {@name} -40 -47 0 0 0.1 0.1 { +} +T {Voplus} 65 -24 0 1 0.2 0.2 {} +T {vdd} 5 64 2 1 0.2 0.2 {} +T {gnd} -35 64 2 1 0.2 0.2 {} +T {Vominus} 65 16 0 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/simulation_summary.csv b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/simulation_summary.csv new file mode 100644 index 00000000..acee6e8f --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/simulation_summary.csv @@ -0,0 +1,2 @@ +run,time_axis,vo_diff,frequency +run_0,"[0.000, 1.000e-13, 2.000e-13, …]","[-3.015e-01, -3.022e-01, -3.032e-01, …]",4.976e+08 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/simulation_summary.md b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/simulation_summary.md new file mode 100644 index 00000000..dc805474 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/parameters/Frequency/simulation_summary.md @@ -0,0 +1,5 @@ +# Simulation Summary for Freq + +| run | time_axis | vo_diff | frequency | +| :-- | --------: | ------: | --------: | +| run_0 | [0.000, 1.000e-13, 2.000e-13, …] | [-3.015e-01, -3.022e-01, -3.032e-01, …] | 4.976e+08 | diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/summary.md b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/summary.md new file mode 100644 index 00000000..13a3fa51 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_14-54-56/summary.md @@ -0,0 +1,9 @@ + +# CACE Summary for diff_ring_oscillator + +**netlist source**: schematic + +| Parameter | Tool | Result | Min Limit | Min Value | Typ Target | Typ Value | Max Limit | Max Value | Status | +| :------------------- | :------------------- | :-------------- | ---------: | -----------: | ---------: | -----------: | ---------: | -----------: | :------: | +| Freq | ngspice | frequency | any | 0.498 GHz | any | 0.498 GHz | any | 0.498 GHz | Pass ✅ | + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/diff_oscillator_tb.sch new file mode 100644 index 00000000..8fa9c421 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/diff_oscillator_tb.sch @@ -0,0 +1,61 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=gnd} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 50 -1230 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +* Keep this if your manual run has it — parity matters +.include diff_oscillator_tb.save + +.ic V(Voplus)=1.2 +.control +* Stability & parity options +set noaskquit +set numdgt=12 + +* Save vectors and run +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n + +* Define explicit vectors (avoid V(...) on calculated vectors) +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +* --- Main file that CACE reads: 2 columns (time, vo_diff) --- +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff + +* --- Extra debug file (CACE ignores): 4 columns w/ names --- +set wr_vecnames +wrdata CACE\{simpath\}/debug_CACE\{N\}.dat time vo_p vo_m vo_diff +unset wr_vecnames + +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/.spiceinit b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/conditions.yaml b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/conditions.yaml new file mode 100644 index 00000000..ae3cb591 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/conditions.yaml @@ -0,0 +1,8 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: diff_oscillator_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0 +temperature: '27' diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/diff_oscillator_tb.sch new file mode 100644 index 00000000..8070d016 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/diff_oscillator_tb.sch @@ -0,0 +1,61 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=gnd} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 50 -1230 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +* Keep this if your manual run has it — parity matters +.include diff_oscillator_tb.save + +.ic V(Voplus)=1.2 +.control +* Stability & parity options +set noaskquit +set numdgt=12 + +* Save vectors and run +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n + +* Define explicit vectors (avoid V(...) on calculated vectors) +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +* --- Main file that CACE reads: 2 columns (time, vo_diff) --- +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/diff_oscillator_tb_0.data vo_diff + +* --- Extra debug file (CACE ignores): 4 columns w/ names --- +set wr_vecnames +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/debug_0.dat time vo_p vo_m vo_diff +unset wr_vecnames + +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice + +.temp 27 +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/diff_ring_oscillator.sym b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/diff_ring_oscillator.sym new file mode 100644 index 00000000..e632b156 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/parameters/Frequency/run_0/diff_ring_oscillator.sym @@ -0,0 +1,27 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 70 -20 90 -20 {} +L 4 70 20 90 20 {} +L 7 20 70 20 90 {} +L 7 -20 70 -20 90 {} +B 5 87.5 -22.5 92.5 -17.5 {name=Voplus dir=out} +B 5 17.5 87.5 22.5 92.5 {name=vdd dir=inout} +B 5 -22.5 87.5 -17.5 92.5 {name=gnd dir=inout} +B 5 87.5 17.5 92.5 22.5 {name=Vominus dir=out} +A 4 -1.666666666666714 1.666666666666714 71.68604389202189 287.5924245621816 360 {} +A 4 -30 27.5 40.69705149024927 42.51044707800085 94.97910584399833 {} +A 4 30 -27.5 40.69705149024927 222.5104470780009 94.97910584399833 {} +T {@symname} -40.5 -56 0 0 0.1 0.1 {} +T {@name} -40 -47 0 0 0.1 0.1 { +} +T {Voplus} 65 -24 0 1 0.2 0.2 {} +T {vdd} 5 64 2 1 0.2 0.2 {} +T {gnd} -35 64 2 1 0.2 0.2 {} +T {Vominus} 65 16 0 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/summary.md b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/summary.md new file mode 100644 index 00000000..6072c5cc --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-40/summary.md @@ -0,0 +1,9 @@ + +# CACE Summary for diff_ring_oscillator + +**netlist source**: schematic + +| Parameter | Tool | Result | Min Limit | Min Value | Typ Target | Typ Value | Max Limit | Max Value | Status | +| :------------------- | :------------------- | :-------------- | ---------: | -----------: | ---------: | -----------: | ---------: | -----------: | :------: | +| Freq | ngspice | frequency | any | ​ | any | ​ | any | ​ | Error ❗ | + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/diff_oscillator_tb.sch new file mode 100644 index 00000000..5c9d54d2 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/diff_oscillator_tb.sch @@ -0,0 +1,60 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=gnd} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 50 -1230 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +* Keep this if your manual run has it — parity matters + +.ic V(Voplus)=1.2 +.control +* Stability & parity options +set noaskquit +set numdgt=12 + +* Save vectors and run +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n + +* Define explicit vectors (avoid V(...) on calculated vectors) +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +* --- Main file that CACE reads: 2 columns (time, vo_diff) --- +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff + +* --- Extra debug file (CACE ignores): 4 columns w/ names --- +set wr_vecnames +wrdata CACE\{simpath\}/debug_CACE\{N\}.dat time vo_p vo_m vo_diff +unset wr_vecnames + +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/frequency.png b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/frequency.png new file mode 100644 index 0000000000000000000000000000000000000000..f8b9f9a1995d7312aa812aff345a01896b3ac690 GIT binary patch literal 16308 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 NmXN=nbNA8n{{ynKz!Lxf literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/.spiceinit b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/conditions.yaml b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/conditions.yaml new file mode 100644 index 00000000..f855aa1f --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/conditions.yaml @@ -0,0 +1,8 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: diff_oscillator_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0 +temperature: '27' diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/diff_oscillator_tb.sch new file mode 100644 index 00000000..a8e9d5b2 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/diff_oscillator_tb.sch @@ -0,0 +1,60 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=gnd} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 50 -1230 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +* Keep this if your manual run has it — parity matters + +.ic V(Voplus)=1.2 +.control +* Stability & parity options +set noaskquit +set numdgt=12 + +* Save vectors and run +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n + +* Define explicit vectors (avoid V(...) on calculated vectors) +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +* --- Main file that CACE reads: 2 columns (time, vo_diff) --- +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/diff_oscillator_tb_0.data vo_diff + +* --- Extra debug file (CACE ignores): 4 columns w/ names --- +set wr_vecnames +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/debug_0.dat time vo_p vo_m vo_diff +unset wr_vecnames + +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice + +.temp 27 +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/diff_oscillator_tb_0.data b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/diff_oscillator_tb_0.data new file mode 100644 index 00000000..4a0b5ac2 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/diff_oscillator_tb_0.data @@ -0,0 +1,208 @@ + 0.000000000000e+00 1.501490489952e+00 + 1.000000000000e-13 1.493059332822e+00 + 2.000000000000e-13 1.487629932209e+00 + 4.000000000000e-13 1.478353768016e+00 + 8.000000000000e-13 1.461646802601e+00 + 1.600000000000e-12 1.428565592219e+00 + 3.200000000000e-12 1.366984627607e+00 + 6.400000000000e-12 1.257824602026e+00 + 1.280000000000e-11 1.083291838740e+00 + 2.280000000000e-11 8.710354931983e-01 + 3.280000000000e-11 7.012548342612e-01 + 4.280000000000e-11 5.692686657539e-01 + 5.280000000000e-11 4.674728734214e-01 + 6.280000000000e-11 3.881336879207e-01 + 7.280000000000e-11 3.259633362701e-01 + 8.280000000000e-11 2.758334023214e-01 + 9.280000000000e-11 2.352724747795e-01 + 1.028000000000e-10 2.014490165507e-01 + 1.128000000000e-10 1.729764887031e-01 + 1.228000000000e-10 1.482579790988e-01 + 1.328000000000e-10 1.268516151810e-01 + 1.428000000000e-10 1.078527366224e-01 + 1.528000000000e-10 9.130497780307e-02 + 1.628000000000e-10 7.664902855206e-02 + 1.728000000000e-10 6.408058136449e-02 + 1.828000000000e-10 5.311114526166e-02 + 1.928000000000e-10 4.391416298544e-02 + 2.028000000000e-10 3.598964843066e-02 + 2.128000000000e-10 2.948572457647e-02 + 2.228000000000e-10 2.391966019122e-02 + 2.328000000000e-10 1.944682229659e-02 + 2.428000000000e-10 1.562242854644e-02 + 2.528000000000e-10 1.262117501377e-02 + 2.628000000000e-10 1.003964957631e-02 + 2.728000000000e-10 8.072285909579e-03 + 2.828000000000e-10 6.353631794527e-03 + 2.928000000000e-10 5.094126301006e-03 + 3.028000000000e-10 3.960774252123e-03 + 3.128000000000e-10 3.175158522702e-03 + 3.228000000000e-10 2.431038392751e-03 + 3.328000000000e-10 1.956458525826e-03 + 3.428000000000e-10 1.466860117281e-03 + 3.528000000000e-10 1.192816155690e-03 + 3.628000000000e-10 8.673101959982e-04 + 3.728000000000e-10 7.204192692291e-04 + 3.828000000000e-10 4.994750120545e-04 + 3.928000000000e-10 4.318861942222e-04 + 4.028000000000e-10 2.769565308169e-04 + 4.128000000000e-10 2.579568886254e-04 + 4.228000000000e-10 1.444337625361e-04 + 4.328000000000e-10 1.545855356601e-04 + 4.428000000000e-10 6.695352871566e-05 + 4.528000000000e-10 9.411428076378e-05 + 4.628000000000e-10 2.269962569268e-05 + 4.728000000000e-10 5.938071020783e-05 + 4.828000000000e-10 -1.786122408753e-06 + 4.928000000000e-10 3.985853511801e-05 + 5.028000000000e-10 -1.470836099826e-05 + 5.128000000000e-10 2.916907092532e-05 + 5.228000000000e-10 -2.100642431524e-05 + 5.328000000000e-10 2.349752400843e-05 + 5.428000000000e-10 -2.361221195224e-05 + 5.528000000000e-10 2.059661099585e-05 + 5.628000000000e-10 -2.423734279522e-05 + 5.728000000000e-10 1.916628093812e-05 + 5.828000000000e-10 -2.386067200999e-05 + 5.928000000000e-10 1.847151578238e-05 + 6.028000000000e-10 -2.302712873670e-05 + 6.128000000000e-10 1.810929381141e-05 + 6.228000000000e-10 -2.202891751879e-05 + 6.328000000000e-10 1.786810534277e-05 + 6.428000000000e-10 -2.101407922339e-05 + 6.528000000000e-10 1.764434272822e-05 + 6.628000000000e-10 -2.005063535315e-05 + 6.728000000000e-10 1.739328754791e-05 + 6.828000000000e-10 -1.916385916301e-05 + 6.928000000000e-10 1.710091054175e-05 + 7.028000000000e-10 -1.835747965595e-05 + 7.128000000000e-10 1.676803280681e-05 + 7.228000000000e-10 -1.762541197881e-05 + 7.328000000000e-10 1.640171764550e-05 + 7.428000000000e-10 -1.695799551626e-05 + 7.528000000000e-10 1.601081233293e-05 + 7.628000000000e-10 -1.634511571857e-05 + 7.728000000000e-10 1.560381375043e-05 + 7.828000000000e-10 -1.577760799520e-05 + 7.928000000000e-10 1.518799157274e-05 + 8.028000000000e-10 -1.524775235184e-05 + 8.128000000000e-10 1.476915897591e-05 + 8.228000000000e-10 -1.474931656797e-05 + 8.328000000000e-10 1.435174987197e-05 + 8.428000000000e-10 -1.427739921545e-05 + 8.528000000000e-10 1.393901916680e-05 + 8.628000000000e-10 -1.382820520168e-05 + 8.728000000000e-10 1.353327195985e-05 + 8.828000000000e-10 -1.339881866980e-05 + 8.928000000000e-10 1.313607799325e-05 + 9.028000000000e-10 -1.298700201535e-05 + 9.128000000000e-10 1.274845373045e-05 + 9.228000000000e-10 -1.259102994633e-05 + 9.328000000000e-10 1.237100900031e-05 + 9.428000000000e-10 -1.220955849468e-05 + 9.528000000000e-10 1.200406044899e-05 + 9.628000000000e-10 -1.184152464995e-05 + 9.728000000000e-10 1.164771719997e-05 + 9.828000000000e-10 -1.148607117096e-05 + 9.928000000000e-10 1.130194420718e-05 + 1.002800000000e-09 -1.114249112399e-05 + 1.012800000000e-09 1.096660837263e-05 + 1.022800000000e-09 -1.081018744209e-05 + 1.032800000000e-09 1.064151162311e-05 + 1.042800000000e-09 -1.048864387188e-05 + 1.052800000000e-09 1.032641430831e-05 + 1.062800000000e-09 -1.017740419751e-05 + 1.072800000000e-09 1.002105167147e-05 + 1.082800000000e-09 -9.876057346259e-06 + 1.092800000000e-09 9.725145261541e-06 + 1.102800000000e-09 -9.584226945858e-06 + 1.112800000000e-09 9.438410707774e-06 + 1.122800000000e-09 -9.301563827502e-06 + 1.132800000000e-09 9.160563030908e-06 + 1.142800000000e-09 -9.027740791145e-06 + 1.152800000000e-09 8.891320125715e-06 + 1.162800000000e-09 -8.762448812982e-06 + 1.172800000000e-09 8.630405064824e-06 + 1.182800000000e-09 -8.505394331504e-06 + 1.192800000000e-09 8.377547491611e-06 + 1.202800000000e-09 -8.256297357567e-06 + 1.212800000000e-09 8.132484513035e-06 + 1.222800000000e-09 -8.014889896324e-06 + 1.232800000000e-09 7.894961171484e-06 + 1.242800000000e-09 -7.780914935585e-06 + 1.252800000000e-09 7.664730634294e-06 + 1.262800000000e-09 -7.554125537435e-06 + 1.272800000000e-09 7.441554215393e-06 + 1.282800000000e-09 -7.334284250926e-06 + 1.292800000000e-09 7.225201268501e-06 + 1.302800000000e-09 -7.121162471257e-06 + 1.312800000000e-09 7.015449091319e-06 + 1.322800000000e-09 -6.914539934288e-06 + 1.332800000000e-09 6.812082669394e-06 + 1.342800000000e-09 -6.714204455416e-06 + 1.352800000000e-09 6.614894461632e-06 + 1.362800000000e-09 -6.519951391781e-06 + 1.372800000000e-09 6.423684174472e-06 + 1.382800000000e-09 -6.331583441765e-06 + 1.392800000000e-09 6.238258495772e-06 + 1.402800000000e-09 -6.148910241865e-06 + 1.412800000000e-09 6.058430853551e-06 + 1.422800000000e-09 -5.971748166966e-06 + 1.432800000000e-09 5.884021181624e-06 + 1.442800000000e-09 -5.799920003269e-06 + 1.452800000000e-09 5.714855647487e-06 + 1.462800000000e-09 -5.633254736237e-06 + 1.472800000000e-09 5.550766467022e-06 + 1.482800000000e-09 -5.471587278483e-06 + 1.492800000000e-09 5.391591650694e-06 + 1.502800000000e-09 -5.314758271147e-06 + 1.512800000000e-09 5.237174787509e-06 + 1.522800000000e-09 -5.162613846865e-06 + 1.532800000000e-09 5.087364853162e-06 + 1.542800000000e-09 -5.015005435038e-06 + 1.552800000000e-09 4.942015990217e-06 + 1.562800000000e-09 -4.871789542116e-06 + 1.572800000000e-09 4.800987341902e-06 + 1.582800000000e-09 -4.732827582177e-06 + 1.592800000000e-09 4.664142846167e-06 + 1.602800000000e-09 -4.597985687416e-06 + 1.612800000000e-09 4.531351042836e-06 + 1.622800000000e-09 -4.467134543940e-06 + 1.632800000000e-09 4.402484940158e-06 + 1.642800000000e-09 -4.340149208248e-06 + 1.652800000000e-09 4.277421828847e-06 + 1.662800000000e-09 -4.216908940147e-06 + 1.672800000000e-09 4.156043125314e-06 + 1.682800000000e-09 -4.097297067740e-06 + 1.692800000000e-09 4.038234226900e-06 + 1.702800000000e-09 -3.981200836667e-06 + 1.712800000000e-09 3.923884363544e-06 + 1.722800000000e-09 -3.868511237570e-06 + 1.732800000000e-09 3.812886476329e-06 + 1.742800000000e-09 -3.759122911395e-06 + 1.752800000000e-09 3.705137014531e-06 + 1.762800000000e-09 -3.652934007503e-06 + 1.772800000000e-09 3.600535924630e-06 + 1.782800000000e-09 -3.549846003148e-06 + 1.792800000000e-09 3.498986428596e-06 + 1.802800000000e-09 -3.449763679053e-06 + 1.812800000000e-09 3.400394904207e-06 + 1.822800000000e-09 -3.352594933781e-06 + 1.832800000000e-09 3.304670882387e-06 + 1.842800000000e-09 -3.258250656057e-06 + 1.852800000000e-09 3.211726785857e-06 + 1.862800000000e-09 -3.166644716113e-06 + 1.872800000000e-09 3.121477931800e-06 + 1.882800000000e-09 -3.077693713549e-06 + 1.892800000000e-09 3.033842391531e-06 + 1.902800000000e-09 -2.991317038625e-06 + 1.912800000000e-09 2.948740905895e-06 + 1.922800000000e-09 -2.907436633337e-06 + 1.932800000000e-09 2.866096736276e-06 + 1.942800000000e-09 -2.825977035048e-06 + 1.952800000000e-09 2.785835670593e-06 + 1.962800000000e-09 -2.746865162440e-06 + 1.972800000000e-09 2.707885854991e-06 + 1.982800000000e-09 -2.670030278207e-06 + 1.992800000000e-09 2.632177803608e-06 + 2.000000000000e-09 -2.576528895126e-06 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/diff_ring_oscillator.sym b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/diff_ring_oscillator.sym new file mode 100644 index 00000000..e632b156 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/run_0/diff_ring_oscillator.sym @@ -0,0 +1,27 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 70 -20 90 -20 {} +L 4 70 20 90 20 {} +L 7 20 70 20 90 {} +L 7 -20 70 -20 90 {} +B 5 87.5 -22.5 92.5 -17.5 {name=Voplus dir=out} +B 5 17.5 87.5 22.5 92.5 {name=vdd dir=inout} +B 5 -22.5 87.5 -17.5 92.5 {name=gnd dir=inout} +B 5 87.5 17.5 92.5 22.5 {name=Vominus dir=out} +A 4 -1.666666666666714 1.666666666666714 71.68604389202189 287.5924245621816 360 {} +A 4 -30 27.5 40.69705149024927 42.51044707800085 94.97910584399833 {} +A 4 30 -27.5 40.69705149024927 222.5104470780009 94.97910584399833 {} +T {@symname} -40.5 -56 0 0 0.1 0.1 {} +T {@name} -40 -47 0 0 0.1 0.1 { +} +T {Voplus} 65 -24 0 1 0.2 0.2 {} +T {vdd} 5 64 2 1 0.2 0.2 {} +T {gnd} -35 64 2 1 0.2 0.2 {} +T {Vominus} 65 16 0 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/simulation_summary.csv b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/simulation_summary.csv new file mode 100644 index 00000000..f0e1ddca --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/simulation_summary.csv @@ -0,0 +1,2 @@ +run,time_axis,vo_diff,frequency +run_0,"[0.000, 1.000e-13, 2.000e-13, …]","[1.501, 1.493, 1.488, …]",4.976e+08 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/simulation_summary.md b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/simulation_summary.md new file mode 100644 index 00000000..fba78079 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/parameters/Frequency/simulation_summary.md @@ -0,0 +1,5 @@ +# Simulation Summary for Freq + +| run | time_axis | vo_diff | frequency | +| :-- | --------: | ------: | --------: | +| run_0 | [0.000, 1.000e-13, 2.000e-13, …] | [1.501, 1.493, 1.488, …] | 4.976e+08 | diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/summary.md b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/summary.md new file mode 100644 index 00000000..13a3fa51 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-04-51/summary.md @@ -0,0 +1,9 @@ + +# CACE Summary for diff_ring_oscillator + +**netlist source**: schematic + +| Parameter | Tool | Result | Min Limit | Min Value | Typ Target | Typ Value | Max Limit | Max Value | Status | +| :------------------- | :------------------- | :-------------- | ---------: | -----------: | ---------: | -----------: | ---------: | -----------: | :------: | +| Freq | ngspice | frequency | any | 0.498 GHz | any | 0.498 GHz | any | 0.498 GHz | Pass ✅ | + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-27-09/parameters/Frequency/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-27-09/parameters/Frequency/diff_oscillator_tb.sch new file mode 100644 index 00000000..2816ca3f --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-27-09/parameters/Frequency/diff_oscillator_tb.sch @@ -0,0 +1,65 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=gnd} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +N 390 -280 390 -250 {lab=GND} +N 390 -370 390 -340 {lab=vdd} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 10 -1170 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +* Keep this if your manual run has it — parity matters + +.ic V(Voplus)=1.2 +.control +* Stability & parity options +set noaskquit +set numdgt=12 + +* Save vectors and run +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n + +* Define explicit vectors (avoid V(...) on calculated vectors) +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +* --- Main file that CACE reads: 2 columns (time, vo_diff) --- +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff + +* --- Extra debug file (CACE ignores): 4 columns w/ names --- +set wr_vecnames +wrdata CACE\{simpath\}/debug_CACE\{N\}.dat time vo_p vo_m vo_diff +unset wr_vecnames + +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} +C {vsource.sym} 390 -310 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 390 -250 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 390 -370 2 0 {name=p5 sig_type=std_logic lab=vdd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-27-09/parameters/Frequency/frequency.png b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-20_15-27-09/parameters/Frequency/frequency.png new file mode 100644 index 0000000000000000000000000000000000000000..50dc9b77b8188075160763b47b30286c60beebd6 GIT binary patch literal 44016 zcmaHS1yGw^&~9)G6o=qm+@&})!7aE`Qk>$YxJz(%*Ftbgu@)^JoZ>CTOA8b)(3S#! z_`YxcnLGE+Ju?iMa*=P5}LA6x~@oDe@005zyDnt(eKnDW=XwA6TsBdbQ zVQ*0Xq`Z|(y!GAfy?tR`b^tAyw}*?nw~NzrCLcSmmrm|(BK$&v{9?RJj^5rLFQo(o zT>tk8es?bi0n-~tY1Axu9;&7<0f0xahd(rge6zyuo z(P&Vm&cwzR&Xx#E&EZm>To<2zlyq5fC^koYe=;yv@HKYHi@?fbUct$etq;0ut z{aTE7qNTL#-yx((qALp^{BLB<+Ny&888%PB8O;BFn}kQG1sDByaEOY6KFkx!;`#LHlQlK`V9W8};TL9SN=;4OKba>&61T7vA_}UFY%uS5zEp2o z8}r|SNC4*TE+2Ytj?FK`@_~zr=H|3v+ruvI?#41S|E*Hs`^m{@z3JN@!QGUoDKIE$ zUbwq2|F`mr51Yf=<%A0~{|+*me4x|6Z`X8m6t4Vl*JWkMRQNw*Bnr*}{@;fQRp5xd4&^ksmCn<| zzP-J*d-k7zcBlx!aG#@3(ND|5_UEf}fh0Q^7j|=#<$YOR{rc#Qc^zzzT{~BYhghZurVlcZdIJqeASkN{0%5s>VUJ* zYnqP5V^CGbF|4LC9c>GSadfw!%Jt1H-QDnNG zJ;&mC-yKTc!^N_Jrs0m z{&+K08?#MIs07!R{7P;Se7V^9^P|Qazq98u_kS-;`a*hKYeP_l5 zwBm`s*FV12INQz8!Dq-)HtBxb)tT#X!4dFBMeyxgwX@if?KlZvG(gDpUmO!p54)0l zxJ36m8{*K54EgQUJo;ak?sbn14=y?) zu>K{>=Pp!YO5aT<)Kfp`yg}Ah$G$J{7-Q|c+BbEo;PP2LabM86W#X=8cXyUOeN*oi zog63M_s=&fl=qIPh7~#;l4gp-!563jubYCEh&fr0WmFp=M7(Mv-Sy_j#}?S zsdQf-O%)M=%HJy+MWS35+iBxr=FNJscam}KVDiVR&c{W=w3relX%=W3-G>65KZ|K+=jjeS%uh{%irA@&urzM z$VKUgUa`4_=G#kV#XS20yT32?Hri6g4fUwJpwM^d)4*3>tf~rf}3ZS@rze-wYFmv z9G}%Pf$#PvL+|bC2GR^hC64_V?r(D%+VlVLe;8a@_okfb=~%wIK2{8PX@4=T*g4E3 zVd{?g;KS*voU%wteev8jyKqG8K+@z$Vsoa)9c+T`&IB#~WHaw6q1>HEHNF#fJvp0P z%MCz6+jCWib1|z1?Bgl>i)6)g7@h>^&-~sOwn1se%*LHjqC$MY_s0lFnX3`)&I(`h zrk%Z_uWT)IL10w);2cd32MY72Oax+PmCcor#`iL}D@^}z83>>M445@vd3Llv`u60K zg;Gecr^jS1vwZh{+4ZXxM|_!Zhp=ca(k4*8hcG=F`QD6_Gnex28@pLqi)L?FIO&{h zz!e*S3A7FiVIJhX3zYaEDI#T1_Yj(N1T*Y-^$PcoQ$Z9zGoP|2*tfD$q@?~NTpfqL zK&RL81pK7DlJB*e9FsoougR5YqX0DLnB?*r3!aT!ZTGlpQIfgUM318)eOB2XzEeTlO|85K0$*FF z!?(66lzoSlVHR(=S;GY`@Fij~7o5vZ+-eR+!J*GMj(k6)aT1)JhXC0>o&_;%tO=F+ z8GKza#ZP0mAu06x4g~bmes)Sqqh~@1?7K^qf0&>D3&yL;w~iXar^v{7u}jVXI5kMV z>ZeRdX%-5kgj$D`Va8`Ui_%b2mwx;6>LHCim8Ouxk1^Q79(UieZxFaSCNe9uGpX5#L)UR7#|VvG3e zZP{J@&~o!!FmN89&6XVw>}l>I{POzK)2`U5yr2(5pI@JIj%IZmGdg0lVJiXc&u#S^ zKxcWf??7+6;-hyEd5Ap5iZ0gZ-}CWX^v-gmd!YP}`E0ZtHhDG~W~8|bni)W$i=XA7 z={<165-}_IM%#JhuU==GS+0wU)3oLbjWRyNAcmJ%b(4$;njfo&UTMtEIJlI`$1d8| zUN1bSp#&MOtI~-sA0XTeA7b{%A0>PesZ=E0=)Mqmvj1uHY_jWTOG2)L8v&WE`yR%{k&FYEyXLS((hv#mx4_a*p<0mR~z!a___Q zs;`R{Y%?w-d}s4Tcr#qg%t@!t5UzKxe`>a1K!h}nf*5dw{dWnxacSQIHJyD>l7a~< z4}H^i8t%=A|AG-8C-l=f)(~Y!WSG3ee}=CE7l~}iQMUPZG=3bK223N!$Pynsz9Ki% zU`8lD-(PZpm8|7M0^^IkoRU0GQo(RU0DOJbFz9Me=f%r0VpBT=-i5lYFol7A)kk=G1UVEYM*7^n2cHZZW-C zYvFTTbj}OKj555i@U+5U^+5MWeEVKHQVHRj3~;o`1LyWEX4F2~K|a20M@qqAvv^b< zA6*}JJQ*i$69k#BbfK)1g@(iC@fng2@3RO*QgbOk5vJ@^=zd&j18pC)Wq-PAKSL{3 z&?&7+nV|gRotD#j=b$ZL970Q!vj(gQ%9n4TfWxdy^xToxflduOZKcRr%>K`fz0b_A zJ_bB7ja&j9aaC^XP8M7I1nSm`iDpiHCivBQMgGZRoR~rc;be9-AlJqhmt2(|o=*(p z$u-K`-LT^UdynK!6{zNXiqv%0UMVi4$M~uwVYqWEtDOr3*lTe!u(Xrle|v+mvd~_h z{~-vRIX3G?1w!8x)}3dj=>cnh42MzY>gmOBF48<7mkeaM=DPKLAyD+~4TC5sAK*7( z2+A}I#9oR?C~&`RD;LFR$!nYb3YuGro?A z7XM(JUN!WVR`G`;QpeY~wy|xf70kKeTn%`TM3%IQ=VoGB1Si*0DqyF4%pBI4=puL%Ze1 zo095sdaqMU9HGf34OuFVfKfYYKe2~$-{G_i`iKsv#VY*}%yU9>Vp&ITM|7~;s1C9C zynpqfb<9sR_ghs3SF-Am0x!**EJE(yGRsJit%exf-kUP3j&g4lIm`47&^&(yq!=B; zrOgT??9@Bda3&Zw10Ppn0NAt^GE&K9{P$7eO$lf^Dh0~nr>zs80k$DtwusJEw z060E*(?8h?-^x|QiB0s(;mH63^v*a*+1=5yrW~4h8W=c}-@G=E%~KC;vAUAU9%BPY z8z{3^xM&~+L@O%r&K%DeIye%R)8d6Qd2)TI9n1oEqLHd;%%2r3>1bKq>chCOn!%U_ z5+WLGJ!$v?&cdQ-r%MRzfD;n@tfXQHV7AaUT|P;_(WY2?b>jtVHfX0&XsG|Goq=#- zu0$-~K^Qm@@r$vL%x&Oq-TQeP+$Z^b8=#;OVU+8#Y>l05=<;ST@qD2L+2TLXVQ({F z3)$1u6|=(`nS%+_yySQ$cm!sqWfg(G5Uy0ju5#KsvK$r!)g5cb0h6+g(NxZ>Tbf0b z!d&A4W3QJ_+L5Vmj zWC7-9uhXOVk2OXb+0A1D;yA&2gFnqB;$cakk!HLjoN05I5YsKX|>L+QEGB`K2Cv-ehV-16Q3c`R!s&lq{9~-sg{| zm&rm}e7U)@d^Cty#-XnzccPGvh?;i)Pht+A5cEvyuqu>`ENIpx$aoj*!^`H(1BMV0 z^IkOaQGn}3m6v34$9t~OwcsO?Cb2G8D1R&e+N98xpv(;1t}@uB*bXJk$l?OG)a04FR`jWxw9in z2KMv?`OKFbV2=SlZ;iOq?~ipa^#B2=35%JHq@&f}E?F6$h{E^S_#V;f8*#=Ux$U~! zsu0o0aRPpHB0PKAZs(syf|l7$7rl>?FZtY1#$!^R?to}*)~^XR6zWRj0z)WY ziMxN|fg>Fg(`wS(^j6)LK`iGopI|L-%It)3V$0stdJ9vw8H(d`9Q5M1y#oaJ#01RR zI?}Ob2w1=1;tN7WYHB#_TCkj$+lE#L0g1}QM>y9h11 z>Q=*3Aj!VP#-a1a@qY309$R1?#eo&cgj>B!X_cY(o9w2zfkL!G42bdJ3dWG?G}{~z zB3%#fNtrNy8$5u=4-Tka!-xhqP&o>VCVxnDB^k`q%nSlo)ai&oo%#A>A)^TWN3W&8 zlLDEs$}Z{HrS0d zRJBm4s@3#NyJ)us{;*Jnt*>AoWS?J-I(gNvLykDXU!$gs;JEcWR;bAL1TOtGZE?=J zml=QmGMFOKH|!;8HB*z3*#erG(?FM{GIY>`yxr%i64gY0t9a5S@RIOb=FN&1);vc? zM*b)_IPA|zceb5mZ9-sT1I3twLqZJNOAiy&bbuK&u_qg`itxXzQtEby4W>l7Nvit5B z|5?l3aM=eI+PCs%{oMxAWXOoXAjU1`CDty!l98!VxYRMR_~MK$O8=E}vLm*Wcw+je zgsb$2<`drt3DWcsPc5AYan{Pr(QOgvk~nl2Vps!vSST~MSxM}9T1T)*zyXyf2p^!X zOJi1l1+R^!<%&jfw`~K$a(P;-^Giiux5!cmTr`8=Ta}GGRx7JL$;v=!AR0LZVV76e zw!_B;$a^*RO*dp&ar2u$=582b3U%_UR?_>{t&;Ej=wt8@{8_c_7(attE+0g${F-Pj z(;!D3>lomWNUlxp0&{Pw0+QfntlH4^oMny_PE)2D(?zrtv?jBF0Yx{KQ@Hq@9}g*J zXeA_lV<2c!IP~Hp?Y92UF%_zl2wB%jY<_U8YePUSymbf6<#8x)6fr|IJD!To{L@f% zqH^J&+)UkGq$~n{`P3hSe8eQ$puJ0mrnV0HmIj=`O-#s55cpbC7@Iqqs_x5+uxZ8W z(9Ux-bdOAyMbxK;f>(Pc?=A@bzfBDh|KFQ0zJtu zl^|pOW>xkeNcPpftg#3@17piv$!2S_vE4c$&FpcxaK}|)GL|H;3BYzXsDeW5$RoTz_g>;PZ<36gIJJ@Irv#KVsxJb2GMFP3~ z;bypRUOi@i>s1ee%1^6{S%#G#3}`#l27{9W#C$HwTAG*fGu|k@%=OMq%oc`7X^QK; z6Q|lF%BW$mu^XoHP?zT{5i$IDfL0o(zS7PiS^e_#pGYNyni@e(9ezN@MI+==US`IJ zP=*7Ho7ji>Bu!vr>gjzMx>YM823w}K9*NntgSNakEqb|$TwsH--zM7{UrY60Ot+Fa z+2~IM4)<1nQm{+_zR|<4jf1}oqn1`S@A-)BOt|PldHrU5R(0B-7-ldff;lT`xbRb+ z*hv5?t*Kmb`n(~~l@>ukCF&i+t{mwqS37EQXr=FzXgcM9LwpW=vp13T)Sru{@?!{t zd2I|NtFDIPiW>Wyzd`7KTQK3ep2o*^R&bpnpJ;Ke64tNL)fM4YtUP@#hS7EtSj&EI z=8Q(+u6Xn({31Ev~GtD-fzgJ-2HPHvL==r_rgPSP~-_M%AmIW$Qo7PdKzz@Eq zrCq2yE51mFJ0P+Hh7A-JYc<+FvW9(jP}z}Ms-Jo-3#Q@TI(`dzBg~mF`ncR?UKx$X z##fo9nb2n)FEM9m(xtl}!fBa}%*8n<(52w5DD4 z)J%G6y*KS0nMvC(@llY2YYmn*M@t+{#+LE%GmpVXEXQ2MRk1`B!pd!%YW!&Kh2uU; zBEu?ZS))OoRVH z``uB^0sEPuo1Bko`2ZK4M+x@=S-X0}BLK}Ua;3aDUL`d#$#8`e!GE08)bR9=d~}9i zqxGl7As)LE=xWd(cwL4%ehgh{drU)8;!LBQB%_f_cE?)?PxQG(l$IUrlQUlyz@Y@W zyZHFfFC2v~$m{oQU$gjE{oO$$9aOijbUO+_wW9Oa$eK$TX`cmdbM;N2y6+iu$v=ee{tgPP^G zFGo7yLQA6eAN;QVg7(bZ~=fv9tu`jrg2C=m(8;D#rQO}(xICrJ{MQNBiP zkIz4WE!qaVVS(ME=l+9RrU|>Ia#@DIr7)yl#DGVGz@vsgs)_aUkYVzhY0ctn^3%-N}i%}FKmS&;*rLN-+AwC)Sk0G>W zGUKn>wgvE_B|E6v;T)UwqW9Bt=sRFHIF!0^%pR08z$&0AmFpbGS3oXSnpZ(SE>`B* z@3p!aU>J1eW$}NP^tsV4L3S=jPFf?xbx&6eI(DtEKMB%h1&NyB(mD5(Z;j2qTDFXl ze7VPzr4B=;v#+!|WmIo;-Cli$QDbY%{kDCB!4_dw%#6Pt(fhubd8s_SpZd^6j=a(4 zbv?DhEgltu(apunRi>&2?zkZ0FJi~(Zq^=WDt?eQUgbwVdDEcIhwu#pEEN3dArWt5 z9u2slfyyf@bAL`3f^f6Z14O0p{FK0HWzxr;7>7#@gLXNVaEFp$${5CwCq|7HarDwY z3x9ij*Zpxe{_aV5{&+L0PE!-moIIM9RhI5uGyBV2o**F9CC?T0RH%Na^`$2qgdXG6tE>R7IT~Y|7x6x$AI~-%2pRPy z^TkggFNs>i>R$E`WtYHF%;zp9}2PP+`+zh7OF zd=m6cI#=4aacHg<>oWPYILSBjZE5;+jY?MeR*WO!bC5HcxNm-QEi}(YyHRGuM0DHs zgmXQ}*)265ylG`Xb)}iiiLdw@RN-YeHb}h~P1|Fk(g5^S5ib}PnURV7I+62vBLTu< z(i$&E)lhnBdrlI7FsCWqG6d*5@?_D3zU>_DogFXqjB@>C5w$ardmx zV5_aBR0OyMp1Wp|?|I54ef`O_m=C2PW(wx4(c55Dkgt@|Y@!vMOcGERx zmzNzvT~}L_HaUk&t7>RZ zQ*rJwL^$hcZCq!FH&OYZ5j>xQk>$_9!{LJrmNdm3_xRw4bJN%q{ZQ`z`obAthmbmA zgLCOuG0`MFzqvZH+t}z0mVV#WHQF6=u{Y(1s)9BLTsq$bR++9D*u0^(3Oo{kxw%UAK|Q>(F>07W#aII$XZL_?$Cc>zM& zW%1?@TN%FA>W0V7A(zVQ97W%5r`F1Vix<%U&{iHqYO~rp`!n|@l^WFYV;&r(R#?x<%{v-G8|)*hF; z(e1*Mto_qt&o+wCLkdgGwQ=Gv&5*k1O+`%$0ZNcT4Njf5fUnWbHN_$!WB#lLrEb)A z{}ut8g1+)R`SZQPb5dw@Q$_v{$;W+BRD~M@@MI@Zqw@>QN=(8mNYm?S5#TYw5_`*7yZ7bl@#c_ z1%WXfXTSzNf1JK7R6CjIDWIGcU?_xOqj5vUV8mTv4I2%sB-y*Cy3Ci`p`}5j)z3?> zsvMz2aUW5Ud68!rCaiNOc*(BUU0yau4ER5adJBKQ6u9^1-G||puOlCusoOD3Q>0Fl z3%)bl``%qN323`aJ!o^V_Q+4HHEeP&OT#U|FW)-G-mpk$=K8slxQp+T<10{*g5TEP z(7bpRQ$wWqTkXD@*3CuFMf*zspo|2#V5SU;X+GRpsJ}1O*1mq;jj`Y+XGN*mA1tN+ z?M1DGau(cBpxPr$x$_MJOuq*B=Fp_>5qW95*SSZdHIK{s0{U;8R^B@17Nm?}sdlY? z5Ly#EK8*_KBPv@TNC35p)$nH@ieWC+&Nd&gyOKkBeg_&h6=rlk-8Oem#HS!UiAsX& znNAEUZ~50#ks3-WH!j>ilBn6%ARKZ-`hS-J(p#PU4iYwD|Jprt+ zj}h?oEapqvO5>9(^?|)r#;V!bliyOcr!nvTbm?9;`?I@ngD0#qhzxuh1ac{{yBGFY zpfbxmDDEQW)T`D}*Rl0ypQ3pGUWIMq54q*`yBdp?8`$2hIeQB2E3!5eKqR(mK^hp_URJ?793jjSY=s(E%$hPJ24 z>bF9kJl8c~M7N_l9mOTty(6|?TBG?YEs(E=`x|^Kvkq#AyYP>&s80=g3@mdeZ}v5d z48Gv*+4faiyk;OAcH5vtE&^+6byGr}j*#S%hIJo%E>R4p|RWN4ZrHY{}TN8>ADlDs4R+LRex=~aEH{(hCv`cl;mo5j=%{8ocUo)J#_0mumgq(iV$!nal-;#hHGY_rRJ?)f zev+K%3Y7-08KI@`e=*V2N-YNlGoW2!@%B7LF&=Qu^+jZ1X?Q-LvT~8zX&6tB;dva3 zvEY%n;W#sAA8lnk|5nJLt-9tq!|3-AhSxW$L2wA#`+`mwf|Vvj{LCH&5XY$P7@d3a zyV2T;mE<2*94=c)f+6<803jUto@&wz6$D>x(Tghs9P4P;b-^p=So1`lOOF(59(`T> zGK9BqdbYy~Le8%Z?abkB>x!*P_b#9-z5HzKr!uEF$|H#rwpW=Cj#?&`Exqdhj)Ri3 zNatg{1{#Wn`25lv@WOW%wJd zy&#uiwI|L>!x}|FXlO;%1P|%g;@)pe?KD~7a=a~k+(PvBmqmwQMqfx-fSajw z%?{c^ROwn2-$8hD4HHdBI_ixtM@0F6&6OC8mo%hXJ&g$> za|XQmA%8&%Hk>rVIu0R|wPE={R(X8d%|u=M+)05N15f%}xs)mVfr%u@bPpRn`LoB* zWEsag(}}t{UGPyn>?-;>djFd+v_~xh$EsF!} zeJ~7Tp>X=I?JyvIKw3__Gb~@|PcVbwFSKAXaV*GSNt#zmDO^i-Dqh`UK=ASADr&r-VXWmX^eMek+|A|5#%05!>9(%%?PeF z=4<4rXxX$-DJf=-W5VfbZEngGMrSSE1dlh z6=kJOTCCK3k?wL)I@@MFwXvm-&y<V%t*hh`uU}#L0}jcIqo28q)tq}~q`=(xG}uPmTr;3(NMw7= zlz?Q8yaRU7^b6P0B`CUlhMEt2&U#6W_EJxcDz)i-=V1_3F7D=19x*0`m*39chTe8E z8~3y+VFn|L^m6apUn@bHio&>JSoc&%=>{dO%!AEyH>-r z=ux?{#zYHx4ALO#oKqk_ga!wLNV1yF&0r3(=>8p|mF4m$rcfC_!(VQ8gkH?h{xRBv zwa`5{$U)>}4c2O~tBLA>#=8*gRRU7;#BNb4yVRo>UR1KQ##=>|QYTsNi%M!H1K&9K zg)kR!dpYhe2fxQ;8@9g3r7_F?qSpU#VpKdb2nA#lZLixvr@9z%Wop86r(M?Q=Wl)g zQp#fNmJF$QVFhkobjQ6F%tJrPx}S~v3oX8$6}~0TL_w))HJ(!O)*l_4b(8Jt7-2qFNiFIlv#;ReHsc6n$BN!)<2>>LS)2>0Z$!l}oqD-iKHYc^IIq1kPreL(7sru{{gto$u8 zVIGch$AGfG8_q*S!41)0wxhE29#Of5Y~^Uil9_Md#$kX-nf=R^p<7`e?y3pu7V^ z09d{>f!|pb{>&~`wlo_nad%j*@;GynDbI{mQXe1oQd@3)^!ruXn2Bg4oV`;0PVuXE z+?3fMDPdl%#_W{J0kv$SG*B4qAB@&Qi}p@-AtL>yxN;t|?#6g3Dp6)8)6~0mE_L$) z87awEhU*Jk)+PW4#EDBo^I_C_Q{NSJwuN=x!3If%4RT7$x;ZFdabZq}UQhi$ETF#& zq5FexJ}WthAD$kUq&WA9ZYA`U|d%tF?P^AhO8o48CkQ!XPjwy}V8=?$gV%Qj5XYA>ZGGU!%eJyz{$Yu{jA$MI;Lv&=r zWXeevZUAG_Ux~2U_QGC}QPnqNY1v@!k`T6scX0eA6E_7ZyCf={5@$MMJXH6Yb!+$U zQLwTpnr)7830KQM5=C#!{(m@A?%um4bNAu<-}3i32~+|j4@?!~{TZX678$Dh9J<(- zhP0jC*m!oeh)WIpmD;XKkbzb3J?!r+p4|*|b_pj;M*paEhV+qJbF`(5BaC-w|Yqdi4SqlgTAL_5`}bbx6`pnJyE}hX`P=%TOQ|1%k%y-}>$4 zIXpD~-vp+qVxn#XjE*GH%Jz)T&JugQqkI4UeQodF13RUn5_2ntVt!|Ba>5l$7OO$K zuG_EyX|LzoWl#Onxfh8#2c$#ha4TDs%yM~yd@4jAnd5Hrgd{Q(5vNnMS9OM>EGi?b zVS}Wid$yix%xqBPcLY5tq4Rn6q8bw}4IFs%f3vGQ`?7aijCW`v4%57>1{I!2_MFnD zrkT4>Ep{3R&xxnA^PSzTmz(j*>Smt;{OnX)cNrIO@yCn_%rHQ6U!#x_0gM2DiqJ^P zP7IpiL5@Sfhd}~P2dfSajLb_9l4ld7DxxdY;hXCQVQz@Y`}w)j&V$-IkDH?on?X3C z>T5m2XE~Z2X__4D$%&8t8kN|mw#8kX?LgO=Xv3P-q~ac7yUYN_>J;cjU*dSwg=K;# zynuDEab4BNG*J}dqXg8224MfzEBT4c2lIpC?=!+SaN$7FL}5|8adJq7 zuFFPm&yO3_tpycdU*D;Xo<9e5o{NUYTj4ki{jeB%4zJwt%?<%j_{vsw(U} zk-6A#NKI#r>N&0Q7o6|QG|tq*n1F{;#)D5VcYBA`)P0UWEqiTIIq!sG$*}<*BOr%O z)V+>3&+dCpf*)<%U3GZQYe~SS3nd?}Yv|}a!p6Zd490}v=4nR`L)M&OAogoUW@W?v^X z9(7yh{wL?jRF;@ovN9-AK)INE`>F}Ir{U^SMpQ>V+U2Y ziBtucu$rlVSz`s;2}MexM5$^>q+81+F}zu*Tvw0}=s*zuG~0^U-ij6;zUN1dk=H$| zC8O!eU-}*Ahm!X9ZoHQ!nBT7-zu-iP4|VNf_*2^po;w$mY1-X~pjh{zN3pmrd1B4s zW@{MvJh@kFg!;RULh<~1SB_(Nad2iDUQO{ro_BI*1S+G+3$MGoV z)Tqxz1!KV}g-As`!QO^>h;!%C%S+{+SC1Tv1I+buH zzY8wxn&2O#44CP(`S3mL_zhrU&O_khbd$Zs6Skw*joMp*ZieIbkZ$9lNBsMDZ+mR zaCV*VplZN2hf5og4l5-xqls2j7B`(uw1eAkD^ZDoXmD`Nn>AX2g+##zp8l4qWQ1=L zI0)1*dy>O`WpoD9gBRLJ8XTht3jo`3@U9;1St;dm2~VFUwD%zj9rC=b4yx9i0xo|- z)zRm0EvfZTT@K|ihjc6;_ziV4!o+Qb7t{BIUiUKfhjSl{obUsI-U^g~Y2AR<=L2S8 z<7v4J7>1N&V%DTQCntLH*i+XOnrI;YxI7jM7$=T5JwP{3`D0S8wt;^fk5)?$uaj_L z>j#k;=p!-wLz)MSa}I|0`4{bTm^(=~(;4nbtd-~>e=Z=EwElh6)DyHJhbQOM72l)3 z6wjkcFet$Bsqg&Bi`u7;Uo9B6d=P*<8x;nJVi32Na=3${_<$&Ihoed+Zy1GYkN(D1 zOi3BxOee3Mx`YEP-?@?jLkAXlh-NCD*u{o$ro`xR@wj}ZVOd+@<=O|}dX`eSyz*G) zAW)xGYTAPRV;%||h36~*Fo&`RL4qz1eZCm|MpU1;-kv&)lxMsPOaR zQSUKH!q~oL*!%(7S)0SJ)R%9D(Z66(MP6-_S%wT*?(n*>B!0h3`p4`PevOw(X^uEt zzzEV;4p(p=p9#{kN&Djy6rHXxWkf6*@Z-dOe<5 z#w|e6NVv)?!#yMew%TCRHw8M>!fb_(9;d)KD^Y)9LZ<>9ghvJ4WqgV-TXta#-e>VR zBTE|VX`sg>DMgm`fZenzr!FxzD(l1m!ex~3A7yxsB|4GRzkgx_bTe_Kr0e)*b57ay zJBp71XRIq(Mst0;SmjSKGk-kXT3(y=SAHiOJua#s&h|~JKod-j4ThK5+Id5#6FqIM z-!l+06fW$?51mR)Pzu%5T^5=Q5=oJu&Df_&Ob)TxU^TN5B4x1 z<6Oz<$sbk|HN%m?`dfc`VcYYZ#B$dy)kYlj^=GK*wNz%4+AnNmruutsYj9Mye||S! z;EKy@y-bJL!5*Lc#xY8vf91N8WU;$vV@hfKvc<72EG5p9g%+_NDC!r*4ha+;xVpfw zMbyweo$#qJ8VI5LfNw6Za;a`G=*oa^F1+VV&ZqhT9|J{npbhXJv*^g>b;osEmPAyU zS?6ar#EZq4t?WBEBkNKIncJ)~cW1&23EVj*zOwPFV7crOn^8KH5-qDzdW?K;Y#SsC znnWHe&;4y;PZ=zSQ4idP!5&CM1wUanx5!;xD9~g1)t0>Sbxme1WA!GBiwvdK+yMpS z%a#=n8_s*Mp7xbC0we0wi0UtSds-o$K45OM!XTdTSRKFQjjt4BBK2NL=O8tw6EZH7G9&X|Y;=q(HQ4F|AKg(Bnmhej{h`1703 zI+q9EMG%*N2-1=vf2Ke@w^`~~x!ri03^<=iag5c7+VUJjb9Bf=kyJ$1RAN9=kiigF z&L|!galx7R_i;7?vld1Vi6ZjH`lBq^>2EgYjdnSTd2*?d6u0doVQdmM+K#4qJ&~Be@u1rui_68yn2wFOvc|GDBT0OTsuE z=O7cB^H=Q;V{MAh`@V(BkxXWYX>DGz(8M>#(Xn0$*Gy4Yhlz=T8{ru^US z`9C%v{K9`iLKx1BXij*ai1jwlqcbgMtpwFS911#tf&@ZM-lasHQ2Tr1IuI*~`jLqD z7rmdp&!gL}{1ZRPK)0KE_b9f3YIJIut<%Jb+EI96)B2GU3yq>MrOOt1-YelTr$}-d zj)`-r%UE;4BPH1nF$P3m@tb*jx9G2U;avE5nR*^r$bAg{ZCZ{slVXlZ-^6ZVK{QXu zpw`MjW(8pA_ey+J(v+*54LK-cn{u2CnjWFzEX&lJ_v)Xwsa}jFdcNA+I||*@l_4Ug zjo3Z`jlX;)++0#NxQo%0vrFb4K_^e_5yqK_X>Sw9Y)(MF7TrdDlHYUvl<{ znROM`IEtqVuFOc5mKRtAF{fpDOgeUEHwhhBA2Gm5^VY|CmL@sMV!4~U@o4++*^a3Z zgM0_N#?Err#N^c|P_Z5~6pb8sYEXb}#f+yQGlzTVggz9l4YvU0!YJCaqp0l=ny?-6 zi0ua8I}yP_hm1J=m4N{f(4S}bhoNPCeT;z9lKbB!W46Kr*sr(fBk2s1RENIK5!;%$ zer0=&fxZ}#nxHE~qbOr0eCNf$Du5xj$@{)r=UsQK026=rpvE!Ikfn+hY9DlSn_1p~ zSPdELWuf|f{7&vT^@_~-SIQ@?*!z8L)AC0 zL3CSS@puT6h7lhpiaZz0MG}~-{C1U_ilhFcay|g8lhNM38kn}6+uV79&LpFsFu}n; znKCG}#u@9lvRgP&NMd`w_ge-ZU-7I~2(uHffI8F!RlZxFWu$sZyn{C5yIC!N%f;V) z`t&a2O|EdoCQypJZ1BW>Z@1oVDyR+8+4`XK;7UdVU`ymAxI)@%&Xi4erZbU%9 zAp{ZWMjD0|kdSVqBo(E*5fEvWP6;UqDbMErzUT8fU%a?fp4`vgYp-?RzlF>&*5jWr zVQal6WEv#WQBp`TO{A!eb~i?emhfY&YBxzL_!dr~Tim0SecG7xB3<(fLb|t0zVm6; zhFImd_m@KBF3bnMqk_32Y*lIUKP&ahB%--@8KNSWoOr#8}nh##_AJku;4>7YYO>rrfQ>z4-Q2F zYzG&fv2iPMw6}8p!LXYA*Ta+;a=9h*PYggL!touLf|KAga{}y*wl8o`><@q8W8yrS z6KiOO^l~{$_K>tH6h29Xca@*MQe!oLXhb%#{0m7+=d`{GBQaD)ijE{e=N&2-m+ZI* zEt5O{{Hw*W$-mt(?uZEqK|_XR;w(>RC(d%{KUP*j=?n$Rz8WPPej_t(P(8Vj*)G7s z*^sM}u4(9L*FJ9(ia$jwxTt8m;cA4!q+@KfiH>1u2F70h6`1w89geCaYqH_F-M-;+a@A(oL8th4&z_3mw)pY*j#6&qCH~5I3U) zE9wNDz{QAjKu&o64)5T(JM$dlA)AmplLAKemoz4_c%WoYGcv}X&w?g0mWs%th~M(x z7YI8xtWk_q^aY20G0-JH;-SV`6SEyGTk`D@O4QF>l+>~sDX_Al++O^x{=M!Ens3iZ zDWGg*2P#rt> zg^Ipde~PLJ^>QEa#j2jBiAY$_UHL0wj1&kgSC1sY7C|x^6;+HeQ_tQfN4ypx%gVbH zc=b{evJ&0O=Bf7#C4*Q_(i6GoyD5|Zu(I7a zO2cF6nV;v;4QwR^XuGPjE^xEw7T78a-GA5DAX11EL?z2>xcPUo?XVk9bUjglC|VJS z<02_7U)AlrAe7kSdk{u5?qcU0fjkP!UR`Bk3Cf)gMB~pQl#o(}4ouNwGhK^jyh3Y| zucMcKTN}HcIiTukRb&fTs;kHS81DT+!gyJ~C9cEfU9&1ju;c{5Jc$FA_I$L2b~3vwX;YOE`< zG$DMn>luNyW-pVfBJ&_cjABs{$18c9<*A@mS30yvdmJ%7H?sljIf;}tr*uNR@jR!q zy?OF~mdsSEAfBtk0Ve%lj%Ycfw@W>Ao6D0~nsGbb3Km$sWyW42J_K3J%V!jaEY#QX z62a+O*=@#!f1X4}L}~rJaXcxP>iOsE!QkR^)pJqtfYxAF<*%wwQUUz+Fp(~c(L6kP z7cn+-h|tb6!JJs0k0i+d@uug*z-?UW+$V5SC+KoA1Y2<8YjzYjJW0Rt!H56!dRzN~{{0J|nc8i}pfswj?g=Kjx zbX7%Ym{9auv!V5aH%gRZE>0O*yhfnLHfBeT^j?0b z43ctELCwiJ(oK6ysgerN?}F?2j&4{1?2W=-Nxv>++8v3?#;JtaJ%TQ4n{DZE`VLP8 zQ`ts&tA6a{_voI?TM1-{WuB-d6rE6g%1}VVq}c#QregtF?v@9SSu%gzdc75yQ8&_W zMm%f@9{TU+vqgHR9kGeA)7%ZrNum9kd-Oh#yX5n~>+yg2fN29(uEvA*D;JO|x4OAJ zWg3Xxt!^Q3-~1v6Ph{@>@s@RAeLINF{Hh;7tt=&$dcK2pirpJ+W7)PEB3qY=_n;9Xb9rcRz_e$VS&fN+yDBb(TwY(zTy%)^_NjQ#%0?XIo9fN3qxfBXoLV8+y~Z62 zFGDiV_4|3|Bvlb{55WzA>#+Dr6`3M4s!|4)$A6623Lcpne;%gU(tXmZ|HXGaYvlI7&2*kG;@2EHSPEP$=A`6B`r~f?xhiT3y9urEBKiU&lH?H2N^<7W8_#AX4g0%h< zwwVYg|CDr62IVZI$30hL$>)DZI=r?!fRrYoU#3U6M{0}mWJ<;k@QX%bwZ~v50B_Zz ziF50aSf^#x`aB455Y*WNIEN3}Fs^?$06V$g$Zp2^!q#X#_Z46Fi@3r|5tI_6z@Gxb z0GzvwE}-n}AG};@rvn9N;@4uER8C>;%vqzW8Fsl{#~UO22TDxD+?MUMG$Ky#FC@U9 z-2PIK_fMMYcXrVj|5vH4L6&__B-<{^t}^yXSN&CV1eW#fH9|ZnBh#CwnBr|hIAxuO zsp}!k+GIO?GPL(c!df7&MHXQT1BezoWsVp}#eU+5j*l{y`t}G`<%W3I>5GUZxbTf& zREH6;b#GcQ_}DodWePHjCAV}VDsI#tV=^g-EO?N9dietdRQ-e}TjK-Qe^2Vb!n6`b zDBT$^vN-4;2MIQB@hZ?|e+qa;wo7@^0pfmsew?@3Iywn8vlyMJ#um}9UlUw`iipX| zJxi=Tn?BWeOVRS(>&$%gYpbT7>>d)wE~@piX3!|;*{|NQFE zV9wqTg)YT$cg1+Tt-+vxMO4#%$q9K1z(#k9`0@uI2%BR5FX;^f?9Mpoh=)k#5#N}j7M)he!Nr(z& zALDLVBT9--Z0(`STE%CwTsqGOegC))9hBS3E~(Sn`oc6d|D!a0%`w@_b(7aQc(@z9j+Zp${nBCABxNgEuB~X>2;I)W5-JSh`_yx9Lgh^4%UOZ->pr04KXl{Sy-QxZ`|95Li>(YsK zv2YL=sX!p6IIY62FvkZQzdscmY)}oU!8?dBSLGCRCN0A0?w7!1m4&%!uV(ky6l*nn zv17|0Bl;!QbMCut{<`qOB753!ObL#5tCjA1C5?9bLX=mC42B-u@M6{qln%**J|TNh z{7YBYTQUjb;Aw=akVC8B4EOcob$xZbh)JV=bpIB>IYvJpRZ%=6umfiVBRD~F_;y?-xLJ>I}c(o_@mo{ zR>KGDLlphS*Zfk>bWH^UQr7lhGt<8VNOVJQ(5u&6s)Ivex%SXloaCm8KX#&J511q!>+CT>maVNMMUP@z z?eE*5zm%^4wrxP9{Rscc|L(Hx*6}BZz^ zl;oj1)4^|y6M*BXF6ELfSiSX(FIk0i-Q9+gbHj%&WVIETXw;GlWCvD0FZ$tC8rRUD z+}s7ZKA@_tKN*(CnS5Wq5>JLp3;jTt5LMOpVx`E@JiTU zCOE;ato7;>2-|w7M!MtC<#hwMoF77Cb!(o`t@ws(E5=RS{Df|FFF6xW_ur}UOT-45 z#kwtmL`jxZdtIg-S6!d3GdN*hRHjN2*;D2K@j$vTCFC$t=337F?fDVT=HxGiquEd4 zIf_a)9zyczacs!7D(F$`YcB+BD>_XV%Ki0&Qlvi;Q-0w>myfW!vU)C-zX3a@{n+lHD6NQxbl#RuUsHV!R^hFklaM8>8IFAVD>BgqVK% zcLi||Z|}8xG8bsSTTiqhorOxVE(3Jl%Yu1-p?4QIH~h7>BT`;*%RaaC330zfu=7kb zvq7v_#t}|(^kE_dU`y7hl(=^wmTtgO6|7|etRrFYl$52`|s^ARr_tUMRr-nNGi zFa%|v`ygn)Ys78^TiV)(J9jAspKmfFTA2$eNdED`ItYF;IV3eMB}9h!sea|i=1I@c z|71($oL$C`u+{?~o(&%28%TwmG_hE{`ap9xScfU(Ws;p_2>tta1*(3;H`^>67rHJD(S?5XLfJn?s_{0Z0Ifys#bNTceQn|bpv|-sIfao; zoK#)}UK>&BVebHK27=-Dy7es63LV0|&GPZL&2YuPi@Wx{{O>`rpfwd9yd=n>-iF?} zFWx*tdiV!iS4E*}(vr(#Lf#XL0W-1cwN|3^?>d=6xRzJnXKR7d zsrBl2i|EN0!J}BqYjhAPZi%(K5}Lt|f5EKcno~;!482IUJ}^edJhVGr!Obd5Z_Ba| zZ+l&Mr-R%}4w%DIQydn@s4=K!wVpo7nZ=@t}SK9jOT5P*pi+I*C4e_jH)(;1Ml^C_(&T zZ1>C&v3VXkj*buttK?HN*L&2`E3nCj$P}F?Y6)F%QMU@vDkZ50TLwJPbH`q$Oe2B~ zuQkZU+~>i#mQ;|B-_Gv-ROlyyzQ(SJ4M~tZ#u*daqP?S(0+uP_`;Q;4z_qpt$d&)y z^?)E*9P}uS*Efe#ak_L_Z7zFJ7M;S&?3nN%2-52)tzE+^eQr94aN^y&-5juwDw7_4 z3hGiGbV?*kwJ4(`cho{w?fR?7vMof|W=K5$U>DfLU;lk|byhZg+`~K(vLW4kokrl_ zdpe#g^|---Jn-y89`bZ&S{0GpIv@=HN-xw97~Ua(Nyc{d+v7suSK*EUq;I^HEe~I7 zPBG8TyYvHXw+%NpT-y`33W}>g2MI(9=()*s8h8@>()}e`Qr4YQd|k(rKj1F(IEtH^ zKXEx*Y_PJ5q=oQzXnJes2R;^F%uLU>mVsi@|Nf2_efW@k;)0<6t}*;Ics$wJR5ty~ zO<+L)ODH(4l5D9 zMeD&-s;(ciy(8J&oK^J8Zx;qhL!>vvwz7NtX-O%*2(BB$-0Fwyhu?a=!(3^UqA8+s zMzdtVec6rBomg)8yUvo{%8?BJ9Y~vW-|R7O{sjrvPXa4+{F{QFPoaP~Va!vkTq9WA zMR<24FY*ch(u=@seV2^#N6WwBEFXu~ewNKwDT+^?&@Z+ti=W->5s1UgcB2V36b=q) z&Tt1|8^1zlo5cy2UMEfKK?6?TTPtS)EfiVNf|19Bj>_{hqNDe+_@bV%-6Nf=B6;P~3jD{D}Muc+-rFAm#)S z^{~6Id3k!-Lzq6ahwqiMdQ)h$W_eyp)RZ6NPaEF!G%0D~44mt3o7Ku+D5;ItLY*AO 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%0D~44mt3o7Ku+D5;ItLY*AO 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%0D~44mt3o7Ku+D5;ItLY*AO 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%0D~44mt3o7Ku+D5;ItLY*AO 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 literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/.spiceinit b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/conditions.yaml b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/conditions.yaml new file mode 100644 index 00000000..04ec32c2 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/conditions.yaml @@ -0,0 +1,8 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: diff_oscillator_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0 +temperature: '27' diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/diff_oscillator_tb.sch new file mode 100644 index 00000000..8f8f4675 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/diff_oscillator_tb.sch @@ -0,0 +1,65 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=gnd} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +N 390 -280 390 -250 {lab=GND} +N 390 -370 390 -340 {lab=vdd} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 10 -1170 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +* Keep this if your manual run has it — parity matters + +.ic V(Voplus)=1.2 +.control +* Stability & parity options +set noaskquit +set numdgt=12 + +* Save vectors and run +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n 160p + +* Define explicit vectors (avoid V(...) on calculated vectors) +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +* --- Main file that CACE reads: 2 columns (time, vo_diff) --- +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/diff_oscillator_tb_0.data vo_diff + +* --- Extra debug file (CACE ignores): 4 columns w/ names --- +set wr_vecnames +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/debug_0.dat time vo_p vo_m vo_diff +unset wr_vecnames + +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice + +.temp 27 +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} +C {vsource.sym} 390 -310 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 390 -250 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 390 -370 2 0 {name=p5 sig_type=std_logic lab=vdd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/diff_oscillator_tb_0.data b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/diff_oscillator_tb_0.data new file mode 100644 index 00000000..b960892f --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/diff_oscillator_tb_0.data @@ -0,0 +1,185 @@ + 1.628000000000e-10 -2.292252894521e-02 + 1.728000000000e-10 -1.721878995476e-01 + 1.828000000000e-10 -3.003971530482e-01 + 1.928000000000e-10 -4.209827688535e-01 + 2.028000000000e-10 -5.322027853128e-01 + 2.128000000000e-10 -5.791583227387e-01 + 2.228000000000e-10 -5.110033194175e-01 + 2.328000000000e-10 -3.457576287601e-01 + 2.428000000000e-10 -1.607196798900e-01 + 2.528000000000e-10 1.365547887835e-02 + 2.628000000000e-10 1.638016925338e-01 + 2.728000000000e-10 2.919305498126e-01 + 2.828000000000e-10 4.124239288433e-01 + 2.928000000000e-10 5.263166298848e-01 + 3.028000000000e-10 5.824106149717e-01 + 3.128000000000e-10 5.252174273130e-01 + 3.228000000000e-10 3.651459872532e-01 + 3.328000000000e-10 1.795084214438e-01 + 3.428000000000e-10 3.226267600252e-03 + 3.528000000000e-10 -1.496702035742e-01 + 3.628000000000e-10 -2.792887178681e-01 + 3.728000000000e-10 -4.000019021719e-01 + 3.828000000000e-10 -5.160190704246e-01 + 3.928000000000e-10 -5.816500208715e-01 + 4.028000000000e-10 -5.372846837038e-01 + 4.128000000000e-10 -3.848834507397e-01 + 4.228000000000e-10 -1.993014483184e-01 + 4.328000000000e-10 -2.125168120944e-02 + 4.428000000000e-10 1.345897939599e-01 + 4.528000000000e-10 2.660516467047e-01 + 4.628000000000e-10 3.871267719337e-01 + 4.728000000000e-10 5.047282820024e-01 + 4.828000000000e-10 5.793062880329e-01 + 4.928000000000e-10 5.480670992790e-01 + 5.028000000000e-10 4.046247574272e-01 + 5.128000000000e-10 2.194567139019e-01 + 5.228000000000e-10 3.978854030163e-02 + 5.328000000000e-10 -1.190134240033e-01 + 5.428000000000e-10 -2.525512770557e-01 + 5.528000000000e-10 -3.741228468393e-01 + 5.628000000000e-10 -4.927999203803e-01 + 5.728000000000e-10 -5.755235861382e-01 + 5.828000000000e-10 -5.574109039140e-01 + 5.928000000000e-10 -4.240101965476e-01 + 6.028000000000e-10 -2.397070733991e-01 + 6.128000000000e-10 -5.859311656156e-02 + 6.228000000000e-10 1.031069489747e-01 + 6.328000000000e-10 2.389202178782e-01 + 6.428000000000e-10 3.611164053835e-01 + 6.528000000000e-10 4.804511503358e-01 + 6.628000000000e-10 5.703927182427e-01 + 6.728000000000e-10 5.651995411624e-01 + 6.828000000000e-10 4.426884649777e-01 + 6.928000000000e-10 2.598493744117e-01 + 7.028000000000e-10 7.747657769560e-02 + 7.128000000000e-10 -8.699618736653e-02 + 7.228000000000e-10 -2.252447884331e-01 + 7.328000000000e-10 -3.481970680463e-01 + 7.428000000000e-10 -4.678842164117e-01 + 7.528000000000e-10 -5.640875390474e-01 + 7.628000000000e-10 -5.714336476059e-01 + 7.728000000000e-10 -4.604185473907e-01 + 7.828000000000e-10 -2.797750138125e-01 + 7.928000000000e-10 -9.633858138806e-02 + 8.028000000000e-10 7.073777814255e-02 + 8.128000000000e-10 2.115493094061e-01 + 8.228000000000e-10 3.353876046363e-01 + 8.328000000000e-10 4.552524923411e-01 + 8.428000000000e-10 5.567938616314e-01 + 8.528000000000e-10 5.762058661922e-01 + 8.628000000000e-10 4.770908355033e-01 + 8.728000000000e-10 2.994880974607e-01 + 8.828000000000e-10 1.151828864331e-01 + 8.928000000000e-10 -5.431208395594e-02 + 9.028000000000e-10 -1.977861602727e-01 + 9.128000000000e-10 -3.226531529049e-01 + 9.228000000000e-10 -4.427347421602e-01 + 9.328000000000e-10 -5.488327643130e-01 + 9.428000000000e-10 -5.797041909504e-01 + 9.528000000000e-10 -4.927265308101e-01 + 9.628000000000e-10 -3.191097454976e-01 + 9.728000000000e-10 -1.342181141771e-01 + 9.828000000000e-10 3.744993884902e-02 + 9.928000000000e-10 1.836370942174e-01 + 1.002800000000e-09 3.096940812427e-01 + 1.012800000000e-09 4.298817640101e-01 + 1.022800000000e-09 5.397599749883e-01 + 1.032800000000e-09 5.817861936754e-01 + 1.042800000000e-09 5.074041226008e-01 + 1.052800000000e-09 3.388664774534e-01 + 1.062800000000e-09 1.535104608579e-01 + 1.072800000000e-09 -2.024845785028e-02 + 1.082800000000e-09 -1.692491421902e-01 + 1.092800000000e-09 -2.967013757932e-01 + 1.102800000000e-09 -4.171073443425e-01 + 1.112800000000e-09 -5.301213512093e-01 + 1.122800000000e-09 -5.826820342472e-01 + 1.132800000000e-09 -5.208927839223e-01 + 1.142800000000e-09 -3.582851623030e-01 + 1.152800000000e-09 -1.726179318326e-01 + 1.162800000000e-09 3.001935102304e-03 + 1.172800000000e-09 1.548738889534e-01 + 1.182800000000e-09 2.838707642593e-01 + 1.192800000000e-09 4.044922095117e-01 + 1.202800000000e-09 5.198180562761e-01 + 1.212800000000e-09 5.821632166084e-01 + 1.222800000000e-09 5.332184734218e-01 + 1.232800000000e-09 3.779624918474e-01 + 1.242800000000e-09 1.922988577092e-01 + 1.252800000000e-09 1.486703325848e-02 + 1.262800000000e-09 -1.399496932386e-01 + 1.272800000000e-09 -2.707197504860e-01 + 1.282800000000e-09 -3.916660474216e-01 + 1.292800000000e-09 -5.087606367752e-01 + 1.302800000000e-09 -5.803016232270e-01 + 1.312800000000e-09 -5.444413186477e-01 + 1.322800000000e-09 -3.977418947932e-01 + 1.332800000000e-09 -2.123689566689e-01 + 1.342800000000e-09 -3.326433605185e-02 + 1.352800000000e-09 1.245198660865e-01 + 1.362800000000e-09 2.572914801001e-01 + 1.372800000000e-09 3.786884397038e-01 + 1.382800000000e-09 4.970287842619e-01 + 1.392800000000e-09 5.770140673465e-01 + 1.402800000000e-09 5.543068732670e-01 + 1.412800000000e-09 4.172944393038e-01 + 1.422800000000e-09 2.326135914048e-01 + 1.432800000000e-09 5.200031629165e-02 + 1.442800000000e-09 -1.087117173734e-01 + 1.452800000000e-09 -2.436934942172e-01 + 1.462800000000e-09 -3.656702152799e-01 + 1.472800000000e-09 -4.848025482630e-01 + 1.482800000000e-09 -5.723385369588e-01 + 1.492800000000e-09 -5.626458033125e-01 + 1.502800000000e-09 -4.362543636943e-01 + 1.512800000000e-09 -2.528118155371e-01 + 1.522800000000e-09 -7.087265053387e-02 + 1.532800000000e-09 9.266186071927e-02 + 1.542800000000e-09 2.300274395412e-01 + 1.552800000000e-09 3.527140919248e-01 + 1.562800000000e-09 4.722911338649e-01 + 1.572800000000e-09 5.664223472519e-01 + 1.582800000000e-09 5.694169369289e-01 + 1.592800000000e-09 4.543351006071e-01 + 1.602800000000e-09 2.728185799251e-01 + 1.612800000000e-09 8.974653097500e-02 + 1.622800000000e-09 -7.645342918533e-02 + 1.632800000000e-09 -2.163412758022e-01 + 1.642800000000e-09 -3.398672125281e-01 + 1.652800000000e-09 -4.596702740436e-01 + 1.662800000000e-09 -5.594547917655e-01 + 1.672800000000e-09 -5.746885318592e-01 + 1.682800000000e-09 -4.713817902736e-01 + 1.692800000000e-09 -2.925998303757e-01 + 1.702800000000e-09 -1.085902848019e-01 + 1.712800000000e-09 6.009271011551e-02 + 1.722800000000e-09 2.026110402562e-01 + 1.732800000000e-09 3.271137583800e-01 + 1.742800000000e-09 4.470366757261e-01 + 1.752800000000e-09 5.516024260258e-01 + 1.762800000000e-09 5.785682691472e-01 + 1.772800000000e-09 4.872997263391e-01 + 1.782800000000e-09 3.121706971956e-01 + 1.792800000000e-09 1.275093354174e-01 + 1.802800000000e-09 -4.339966691138e-02 + 1.812800000000e-09 -1.885914489076e-01 + 1.822800000000e-09 -3.142192224600e-01 + 1.832800000000e-09 -4.343522534326e-01 + 1.842800000000e-09 -5.430041650422e-01 + 1.852800000000e-09 -5.811837349212e-01 + 1.862800000000e-09 -5.023856761573e-01 + 1.872800000000e-09 -3.319418855515e-01 + 1.882800000000e-09 -1.467398868003e-01 + 1.892800000000e-09 2.631801497144e-02 + 1.902800000000e-09 1.743391836774e-01 + 1.912800000000e-09 3.012879943958e-01 + 1.922800000000e-09 4.215592295324e-01 + 1.932800000000e-09 5.336096259357e-01 + 1.942800000000e-09 5.825911854269e-01 + 1.952800000000e-09 5.163685478590e-01 + 1.962800000000e-09 3.514506166310e-01 + 1.972800000000e-09 1.658449567189e-01 + 1.982800000000e-09 -9.123570295392e-03 + 1.992800000000e-09 -1.599641527363e-01 + 2.000000000000e-09 -2.536669268561e-01 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/diff_ring_oscillator.sym b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/diff_ring_oscillator.sym new file mode 100644 index 00000000..e632b156 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/run_0/diff_ring_oscillator.sym @@ -0,0 +1,27 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 70 -20 90 -20 {} +L 4 70 20 90 20 {} +L 7 20 70 20 90 {} +L 7 -20 70 -20 90 {} +B 5 87.5 -22.5 92.5 -17.5 {name=Voplus dir=out} +B 5 17.5 87.5 22.5 92.5 {name=vdd dir=inout} +B 5 -22.5 87.5 -17.5 92.5 {name=gnd dir=inout} +B 5 87.5 17.5 92.5 22.5 {name=Vominus dir=out} +A 4 -1.666666666666714 1.666666666666714 71.68604389202189 287.5924245621816 360 {} +A 4 -30 27.5 40.69705149024927 42.51044707800085 94.97910584399833 {} +A 4 30 -27.5 40.69705149024927 222.5104470780009 94.97910584399833 {} +T {@symname} -40.5 -56 0 0 0.1 0.1 {} +T {@name} -40 -47 0 0 0.1 0.1 { +} +T {Voplus} 65 -24 0 1 0.2 0.2 {} +T {vdd} 5 64 2 1 0.2 0.2 {} +T {gnd} -35 64 2 1 0.2 0.2 {} +T {Vominus} 65 16 0 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/simulation_summary.csv b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/simulation_summary.csv new file mode 100644 index 00000000..8f65c459 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/simulation_summary.csv @@ -0,0 +1,2 @@ +run,time_axis,vo_diff,frequency +run_0,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.292e-02, -1.722e-01, -3.004e-01, …]",5.414e+09 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/simulation_summary.md b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/simulation_summary.md new file mode 100644 index 00000000..a45b7af4 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/parameters/Frequency/simulation_summary.md @@ -0,0 +1,5 @@ +# Simulation Summary for Freq + +| run | time_axis | vo_diff | frequency | +| :-- | --------: | ------: | --------: | +| run_0 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.292e-02, -1.722e-01, -3.004e-01, …] | 5.414e+09 | diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/summary.md b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/summary.md new file mode 100644 index 00000000..a5320ec1 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-03-04/summary.md @@ -0,0 +1,9 @@ + +# CACE Summary for diff_ring_oscillator + +**netlist source**: schematic + +| Parameter | Tool | Result | Min Limit | Min Value | Typ Target | Typ Value | Max Limit | Max Value | Status | +| :------------------- | :------------------- | :-------------- | ---------: | -----------: | ---------: | -----------: | ---------: | -----------: | :------: | +| Freq | ngspice | frequency | 4.2 GHz | 5.414 GHz | 5.4 GHz | 5.414 GHz | 7.1 GHz | 5.414 GHz | Pass ✅ | + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/diff_oscillator_tb.sch new file mode 100644 index 00000000..8b2e4f89 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/diff_oscillator_tb.sch @@ -0,0 +1,65 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=gnd} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +N 390 -280 390 -250 {lab=GND} +N 390 -370 390 -340 {lab=vdd} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 10 -1170 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +* Keep this if your manual run has it — parity matters + +.ic V(Voplus)=1.2 +.control +* Stability & parity options +set noaskquit +set numdgt=12 + +* Save vectors and run +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n 160p + +* Define explicit vectors (avoid V(...) on calculated vectors) +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +* --- Main file that CACE reads: 2 columns (time, vo_diff) --- +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff + +* --- Extra debug file (CACE ignores): 4 columns w/ names --- +set wr_vecnames +wrdata CACE\{simpath\}/debug_CACE\{N\}.dat time vo_p vo_m vo_diff +unset wr_vecnames + +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} +C {vsource.sym} 390 -310 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 390 -250 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 390 -370 2 0 {name=p5 sig_type=std_logic lab=vdd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/frequency.png b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/frequency.png new file mode 100644 index 0000000000000000000000000000000000000000..c624000fa7f7e38dbd0b124bef68498c0b894429 GIT binary patch literal 43353 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 literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/.spiceinit b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/conditions.yaml b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/conditions.yaml new file mode 100644 index 00000000..7a0b728f --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/conditions.yaml @@ -0,0 +1,8 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: diff_oscillator_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0 +temperature: '27' diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/diff_oscillator_tb.sch new file mode 100644 index 00000000..e18d29c4 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/diff_oscillator_tb.sch @@ -0,0 +1,65 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=gnd} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +N 390 -280 390 -250 {lab=GND} +N 390 -370 390 -340 {lab=vdd} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 10 -1170 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +* Keep this if your manual run has it — parity matters + +.ic V(Voplus)=1.2 +.control +* Stability & parity options +set noaskquit +set numdgt=12 + +* Save vectors and run +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n 160p + +* Define explicit vectors (avoid V(...) on calculated vectors) +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +* --- Main file that CACE reads: 2 columns (time, vo_diff) --- +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/diff_oscillator_tb_0.data vo_diff + +* --- Extra debug file (CACE ignores): 4 columns w/ names --- +set wr_vecnames +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/debug_0.dat time vo_p vo_m vo_diff +unset wr_vecnames + +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice + +.temp 27 +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} +C {vsource.sym} 390 -310 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 390 -250 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 390 -370 2 0 {name=p5 sig_type=std_logic lab=vdd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/diff_oscillator_tb_0.data b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/diff_oscillator_tb_0.data new file mode 100644 index 00000000..b960892f --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/diff_oscillator_tb_0.data @@ -0,0 +1,185 @@ + 1.628000000000e-10 -2.292252894521e-02 + 1.728000000000e-10 -1.721878995476e-01 + 1.828000000000e-10 -3.003971530482e-01 + 1.928000000000e-10 -4.209827688535e-01 + 2.028000000000e-10 -5.322027853128e-01 + 2.128000000000e-10 -5.791583227387e-01 + 2.228000000000e-10 -5.110033194175e-01 + 2.328000000000e-10 -3.457576287601e-01 + 2.428000000000e-10 -1.607196798900e-01 + 2.528000000000e-10 1.365547887835e-02 + 2.628000000000e-10 1.638016925338e-01 + 2.728000000000e-10 2.919305498126e-01 + 2.828000000000e-10 4.124239288433e-01 + 2.928000000000e-10 5.263166298848e-01 + 3.028000000000e-10 5.824106149717e-01 + 3.128000000000e-10 5.252174273130e-01 + 3.228000000000e-10 3.651459872532e-01 + 3.328000000000e-10 1.795084214438e-01 + 3.428000000000e-10 3.226267600252e-03 + 3.528000000000e-10 -1.496702035742e-01 + 3.628000000000e-10 -2.792887178681e-01 + 3.728000000000e-10 -4.000019021719e-01 + 3.828000000000e-10 -5.160190704246e-01 + 3.928000000000e-10 -5.816500208715e-01 + 4.028000000000e-10 -5.372846837038e-01 + 4.128000000000e-10 -3.848834507397e-01 + 4.228000000000e-10 -1.993014483184e-01 + 4.328000000000e-10 -2.125168120944e-02 + 4.428000000000e-10 1.345897939599e-01 + 4.528000000000e-10 2.660516467047e-01 + 4.628000000000e-10 3.871267719337e-01 + 4.728000000000e-10 5.047282820024e-01 + 4.828000000000e-10 5.793062880329e-01 + 4.928000000000e-10 5.480670992790e-01 + 5.028000000000e-10 4.046247574272e-01 + 5.128000000000e-10 2.194567139019e-01 + 5.228000000000e-10 3.978854030163e-02 + 5.328000000000e-10 -1.190134240033e-01 + 5.428000000000e-10 -2.525512770557e-01 + 5.528000000000e-10 -3.741228468393e-01 + 5.628000000000e-10 -4.927999203803e-01 + 5.728000000000e-10 -5.755235861382e-01 + 5.828000000000e-10 -5.574109039140e-01 + 5.928000000000e-10 -4.240101965476e-01 + 6.028000000000e-10 -2.397070733991e-01 + 6.128000000000e-10 -5.859311656156e-02 + 6.228000000000e-10 1.031069489747e-01 + 6.328000000000e-10 2.389202178782e-01 + 6.428000000000e-10 3.611164053835e-01 + 6.528000000000e-10 4.804511503358e-01 + 6.628000000000e-10 5.703927182427e-01 + 6.728000000000e-10 5.651995411624e-01 + 6.828000000000e-10 4.426884649777e-01 + 6.928000000000e-10 2.598493744117e-01 + 7.028000000000e-10 7.747657769560e-02 + 7.128000000000e-10 -8.699618736653e-02 + 7.228000000000e-10 -2.252447884331e-01 + 7.328000000000e-10 -3.481970680463e-01 + 7.428000000000e-10 -4.678842164117e-01 + 7.528000000000e-10 -5.640875390474e-01 + 7.628000000000e-10 -5.714336476059e-01 + 7.728000000000e-10 -4.604185473907e-01 + 7.828000000000e-10 -2.797750138125e-01 + 7.928000000000e-10 -9.633858138806e-02 + 8.028000000000e-10 7.073777814255e-02 + 8.128000000000e-10 2.115493094061e-01 + 8.228000000000e-10 3.353876046363e-01 + 8.328000000000e-10 4.552524923411e-01 + 8.428000000000e-10 5.567938616314e-01 + 8.528000000000e-10 5.762058661922e-01 + 8.628000000000e-10 4.770908355033e-01 + 8.728000000000e-10 2.994880974607e-01 + 8.828000000000e-10 1.151828864331e-01 + 8.928000000000e-10 -5.431208395594e-02 + 9.028000000000e-10 -1.977861602727e-01 + 9.128000000000e-10 -3.226531529049e-01 + 9.228000000000e-10 -4.427347421602e-01 + 9.328000000000e-10 -5.488327643130e-01 + 9.428000000000e-10 -5.797041909504e-01 + 9.528000000000e-10 -4.927265308101e-01 + 9.628000000000e-10 -3.191097454976e-01 + 9.728000000000e-10 -1.342181141771e-01 + 9.828000000000e-10 3.744993884902e-02 + 9.928000000000e-10 1.836370942174e-01 + 1.002800000000e-09 3.096940812427e-01 + 1.012800000000e-09 4.298817640101e-01 + 1.022800000000e-09 5.397599749883e-01 + 1.032800000000e-09 5.817861936754e-01 + 1.042800000000e-09 5.074041226008e-01 + 1.052800000000e-09 3.388664774534e-01 + 1.062800000000e-09 1.535104608579e-01 + 1.072800000000e-09 -2.024845785028e-02 + 1.082800000000e-09 -1.692491421902e-01 + 1.092800000000e-09 -2.967013757932e-01 + 1.102800000000e-09 -4.171073443425e-01 + 1.112800000000e-09 -5.301213512093e-01 + 1.122800000000e-09 -5.826820342472e-01 + 1.132800000000e-09 -5.208927839223e-01 + 1.142800000000e-09 -3.582851623030e-01 + 1.152800000000e-09 -1.726179318326e-01 + 1.162800000000e-09 3.001935102304e-03 + 1.172800000000e-09 1.548738889534e-01 + 1.182800000000e-09 2.838707642593e-01 + 1.192800000000e-09 4.044922095117e-01 + 1.202800000000e-09 5.198180562761e-01 + 1.212800000000e-09 5.821632166084e-01 + 1.222800000000e-09 5.332184734218e-01 + 1.232800000000e-09 3.779624918474e-01 + 1.242800000000e-09 1.922988577092e-01 + 1.252800000000e-09 1.486703325848e-02 + 1.262800000000e-09 -1.399496932386e-01 + 1.272800000000e-09 -2.707197504860e-01 + 1.282800000000e-09 -3.916660474216e-01 + 1.292800000000e-09 -5.087606367752e-01 + 1.302800000000e-09 -5.803016232270e-01 + 1.312800000000e-09 -5.444413186477e-01 + 1.322800000000e-09 -3.977418947932e-01 + 1.332800000000e-09 -2.123689566689e-01 + 1.342800000000e-09 -3.326433605185e-02 + 1.352800000000e-09 1.245198660865e-01 + 1.362800000000e-09 2.572914801001e-01 + 1.372800000000e-09 3.786884397038e-01 + 1.382800000000e-09 4.970287842619e-01 + 1.392800000000e-09 5.770140673465e-01 + 1.402800000000e-09 5.543068732670e-01 + 1.412800000000e-09 4.172944393038e-01 + 1.422800000000e-09 2.326135914048e-01 + 1.432800000000e-09 5.200031629165e-02 + 1.442800000000e-09 -1.087117173734e-01 + 1.452800000000e-09 -2.436934942172e-01 + 1.462800000000e-09 -3.656702152799e-01 + 1.472800000000e-09 -4.848025482630e-01 + 1.482800000000e-09 -5.723385369588e-01 + 1.492800000000e-09 -5.626458033125e-01 + 1.502800000000e-09 -4.362543636943e-01 + 1.512800000000e-09 -2.528118155371e-01 + 1.522800000000e-09 -7.087265053387e-02 + 1.532800000000e-09 9.266186071927e-02 + 1.542800000000e-09 2.300274395412e-01 + 1.552800000000e-09 3.527140919248e-01 + 1.562800000000e-09 4.722911338649e-01 + 1.572800000000e-09 5.664223472519e-01 + 1.582800000000e-09 5.694169369289e-01 + 1.592800000000e-09 4.543351006071e-01 + 1.602800000000e-09 2.728185799251e-01 + 1.612800000000e-09 8.974653097500e-02 + 1.622800000000e-09 -7.645342918533e-02 + 1.632800000000e-09 -2.163412758022e-01 + 1.642800000000e-09 -3.398672125281e-01 + 1.652800000000e-09 -4.596702740436e-01 + 1.662800000000e-09 -5.594547917655e-01 + 1.672800000000e-09 -5.746885318592e-01 + 1.682800000000e-09 -4.713817902736e-01 + 1.692800000000e-09 -2.925998303757e-01 + 1.702800000000e-09 -1.085902848019e-01 + 1.712800000000e-09 6.009271011551e-02 + 1.722800000000e-09 2.026110402562e-01 + 1.732800000000e-09 3.271137583800e-01 + 1.742800000000e-09 4.470366757261e-01 + 1.752800000000e-09 5.516024260258e-01 + 1.762800000000e-09 5.785682691472e-01 + 1.772800000000e-09 4.872997263391e-01 + 1.782800000000e-09 3.121706971956e-01 + 1.792800000000e-09 1.275093354174e-01 + 1.802800000000e-09 -4.339966691138e-02 + 1.812800000000e-09 -1.885914489076e-01 + 1.822800000000e-09 -3.142192224600e-01 + 1.832800000000e-09 -4.343522534326e-01 + 1.842800000000e-09 -5.430041650422e-01 + 1.852800000000e-09 -5.811837349212e-01 + 1.862800000000e-09 -5.023856761573e-01 + 1.872800000000e-09 -3.319418855515e-01 + 1.882800000000e-09 -1.467398868003e-01 + 1.892800000000e-09 2.631801497144e-02 + 1.902800000000e-09 1.743391836774e-01 + 1.912800000000e-09 3.012879943958e-01 + 1.922800000000e-09 4.215592295324e-01 + 1.932800000000e-09 5.336096259357e-01 + 1.942800000000e-09 5.825911854269e-01 + 1.952800000000e-09 5.163685478590e-01 + 1.962800000000e-09 3.514506166310e-01 + 1.972800000000e-09 1.658449567189e-01 + 1.982800000000e-09 -9.123570295392e-03 + 1.992800000000e-09 -1.599641527363e-01 + 2.000000000000e-09 -2.536669268561e-01 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/diff_ring_oscillator.sym b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/diff_ring_oscillator.sym new file mode 100644 index 00000000..e632b156 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/run_0/diff_ring_oscillator.sym @@ -0,0 +1,27 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 70 -20 90 -20 {} +L 4 70 20 90 20 {} +L 7 20 70 20 90 {} +L 7 -20 70 -20 90 {} +B 5 87.5 -22.5 92.5 -17.5 {name=Voplus dir=out} +B 5 17.5 87.5 22.5 92.5 {name=vdd dir=inout} +B 5 -22.5 87.5 -17.5 92.5 {name=gnd dir=inout} +B 5 87.5 17.5 92.5 22.5 {name=Vominus dir=out} +A 4 -1.666666666666714 1.666666666666714 71.68604389202189 287.5924245621816 360 {} +A 4 -30 27.5 40.69705149024927 42.51044707800085 94.97910584399833 {} +A 4 30 -27.5 40.69705149024927 222.5104470780009 94.97910584399833 {} +T {@symname} -40.5 -56 0 0 0.1 0.1 {} +T {@name} -40 -47 0 0 0.1 0.1 { +} +T {Voplus} 65 -24 0 1 0.2 0.2 {} +T {vdd} 5 64 2 1 0.2 0.2 {} +T {gnd} -35 64 2 1 0.2 0.2 {} +T {Vominus} 65 16 0 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/simulation_summary.csv b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/simulation_summary.csv new file mode 100644 index 00000000..8f65c459 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/simulation_summary.csv @@ -0,0 +1,2 @@ +run,time_axis,vo_diff,frequency +run_0,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.292e-02, -1.722e-01, -3.004e-01, …]",5.414e+09 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/simulation_summary.md b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/simulation_summary.md new file mode 100644 index 00000000..a45b7af4 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/parameters/Frequency/simulation_summary.md @@ -0,0 +1,5 @@ +# Simulation Summary for Freq + +| run | time_axis | vo_diff | frequency | +| :-- | --------: | ------: | --------: | +| run_0 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.292e-02, -1.722e-01, -3.004e-01, …] | 5.414e+09 | diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/summary.md b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/summary.md new file mode 100644 index 00000000..a5320ec1 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-08-28_13-08-46/summary.md @@ -0,0 +1,9 @@ + +# CACE Summary for diff_ring_oscillator + +**netlist source**: schematic + +| Parameter | Tool | Result | Min Limit | Min Value | Typ Target | Typ Value | Max Limit | Max Value | Status | +| :------------------- | :------------------- | :-------------- | ---------: | -----------: | ---------: | -----------: | ---------: | -----------: | :------: | +| Freq | ngspice | frequency | 4.2 GHz | 5.414 GHz | 5.4 GHz | 5.414 GHz | 7.1 GHz | 5.414 GHz | Pass ✅ | + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/diff_oscillator_tb.sch new file mode 100644 index 00000000..8b2e4f89 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/diff_oscillator_tb.sch @@ -0,0 +1,65 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=gnd} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +N 390 -280 390 -250 {lab=GND} +N 390 -370 390 -340 {lab=vdd} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 10 -1170 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +* Keep this if your manual run has it — parity matters + +.ic V(Voplus)=1.2 +.control +* Stability & parity options +set noaskquit +set numdgt=12 + +* Save vectors and run +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n 160p + +* Define explicit vectors (avoid V(...) on calculated vectors) +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +* --- Main file that CACE reads: 2 columns (time, vo_diff) --- +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff + +* --- Extra debug file (CACE ignores): 4 columns w/ names --- +set wr_vecnames +wrdata CACE\{simpath\}/debug_CACE\{N\}.dat time vo_p vo_m vo_diff +unset wr_vecnames + +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} +C {vsource.sym} 390 -310 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 390 -250 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 390 -370 2 0 {name=p5 sig_type=std_logic lab=vdd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/frequency.png b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/frequency.png new file mode 100644 index 0000000000000000000000000000000000000000..d2bd4121ca10b5af73f837a89c772ae0f2bb88bf GIT binary patch literal 42515 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 ppp`w~_ps)s!V++p9XtPRN)O}Xd? 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 literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/.spiceinit b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/conditions.yaml b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/conditions.yaml new file mode 100644 index 00000000..c9e97c56 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/conditions.yaml @@ -0,0 +1,8 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: diff_oscillator_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0 +temperature: '27' diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/diff_oscillator_tb.sch new file mode 100644 index 00000000..e297ca60 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/diff_oscillator_tb.sch @@ -0,0 +1,65 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=gnd} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +N 390 -280 390 -250 {lab=GND} +N 390 -370 390 -340 {lab=vdd} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 10 -1170 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +* Keep this if your manual run has it — parity matters + +.ic V(Voplus)=1.2 +.control +* Stability & parity options +set noaskquit +set numdgt=12 + +* Save vectors and run +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n 160p + +* Define explicit vectors (avoid V(...) on calculated vectors) +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +* --- Main file that CACE reads: 2 columns (time, vo_diff) --- +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/diff_oscillator_tb_0.data vo_diff + +* --- Extra debug file (CACE ignores): 4 columns w/ names --- +set wr_vecnames +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/debug_0.dat time vo_p vo_m vo_diff +unset wr_vecnames + +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice + +.temp 27 +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} +C {vsource.sym} 390 -310 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 390 -250 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 390 -370 2 0 {name=p5 sig_type=std_logic lab=vdd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/diff_oscillator_tb_0.data b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/diff_oscillator_tb_0.data new file mode 100644 index 00000000..b960892f --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/diff_oscillator_tb_0.data @@ -0,0 +1,185 @@ + 1.628000000000e-10 -2.292252894521e-02 + 1.728000000000e-10 -1.721878995476e-01 + 1.828000000000e-10 -3.003971530482e-01 + 1.928000000000e-10 -4.209827688535e-01 + 2.028000000000e-10 -5.322027853128e-01 + 2.128000000000e-10 -5.791583227387e-01 + 2.228000000000e-10 -5.110033194175e-01 + 2.328000000000e-10 -3.457576287601e-01 + 2.428000000000e-10 -1.607196798900e-01 + 2.528000000000e-10 1.365547887835e-02 + 2.628000000000e-10 1.638016925338e-01 + 2.728000000000e-10 2.919305498126e-01 + 2.828000000000e-10 4.124239288433e-01 + 2.928000000000e-10 5.263166298848e-01 + 3.028000000000e-10 5.824106149717e-01 + 3.128000000000e-10 5.252174273130e-01 + 3.228000000000e-10 3.651459872532e-01 + 3.328000000000e-10 1.795084214438e-01 + 3.428000000000e-10 3.226267600252e-03 + 3.528000000000e-10 -1.496702035742e-01 + 3.628000000000e-10 -2.792887178681e-01 + 3.728000000000e-10 -4.000019021719e-01 + 3.828000000000e-10 -5.160190704246e-01 + 3.928000000000e-10 -5.816500208715e-01 + 4.028000000000e-10 -5.372846837038e-01 + 4.128000000000e-10 -3.848834507397e-01 + 4.228000000000e-10 -1.993014483184e-01 + 4.328000000000e-10 -2.125168120944e-02 + 4.428000000000e-10 1.345897939599e-01 + 4.528000000000e-10 2.660516467047e-01 + 4.628000000000e-10 3.871267719337e-01 + 4.728000000000e-10 5.047282820024e-01 + 4.828000000000e-10 5.793062880329e-01 + 4.928000000000e-10 5.480670992790e-01 + 5.028000000000e-10 4.046247574272e-01 + 5.128000000000e-10 2.194567139019e-01 + 5.228000000000e-10 3.978854030163e-02 + 5.328000000000e-10 -1.190134240033e-01 + 5.428000000000e-10 -2.525512770557e-01 + 5.528000000000e-10 -3.741228468393e-01 + 5.628000000000e-10 -4.927999203803e-01 + 5.728000000000e-10 -5.755235861382e-01 + 5.828000000000e-10 -5.574109039140e-01 + 5.928000000000e-10 -4.240101965476e-01 + 6.028000000000e-10 -2.397070733991e-01 + 6.128000000000e-10 -5.859311656156e-02 + 6.228000000000e-10 1.031069489747e-01 + 6.328000000000e-10 2.389202178782e-01 + 6.428000000000e-10 3.611164053835e-01 + 6.528000000000e-10 4.804511503358e-01 + 6.628000000000e-10 5.703927182427e-01 + 6.728000000000e-10 5.651995411624e-01 + 6.828000000000e-10 4.426884649777e-01 + 6.928000000000e-10 2.598493744117e-01 + 7.028000000000e-10 7.747657769560e-02 + 7.128000000000e-10 -8.699618736653e-02 + 7.228000000000e-10 -2.252447884331e-01 + 7.328000000000e-10 -3.481970680463e-01 + 7.428000000000e-10 -4.678842164117e-01 + 7.528000000000e-10 -5.640875390474e-01 + 7.628000000000e-10 -5.714336476059e-01 + 7.728000000000e-10 -4.604185473907e-01 + 7.828000000000e-10 -2.797750138125e-01 + 7.928000000000e-10 -9.633858138806e-02 + 8.028000000000e-10 7.073777814255e-02 + 8.128000000000e-10 2.115493094061e-01 + 8.228000000000e-10 3.353876046363e-01 + 8.328000000000e-10 4.552524923411e-01 + 8.428000000000e-10 5.567938616314e-01 + 8.528000000000e-10 5.762058661922e-01 + 8.628000000000e-10 4.770908355033e-01 + 8.728000000000e-10 2.994880974607e-01 + 8.828000000000e-10 1.151828864331e-01 + 8.928000000000e-10 -5.431208395594e-02 + 9.028000000000e-10 -1.977861602727e-01 + 9.128000000000e-10 -3.226531529049e-01 + 9.228000000000e-10 -4.427347421602e-01 + 9.328000000000e-10 -5.488327643130e-01 + 9.428000000000e-10 -5.797041909504e-01 + 9.528000000000e-10 -4.927265308101e-01 + 9.628000000000e-10 -3.191097454976e-01 + 9.728000000000e-10 -1.342181141771e-01 + 9.828000000000e-10 3.744993884902e-02 + 9.928000000000e-10 1.836370942174e-01 + 1.002800000000e-09 3.096940812427e-01 + 1.012800000000e-09 4.298817640101e-01 + 1.022800000000e-09 5.397599749883e-01 + 1.032800000000e-09 5.817861936754e-01 + 1.042800000000e-09 5.074041226008e-01 + 1.052800000000e-09 3.388664774534e-01 + 1.062800000000e-09 1.535104608579e-01 + 1.072800000000e-09 -2.024845785028e-02 + 1.082800000000e-09 -1.692491421902e-01 + 1.092800000000e-09 -2.967013757932e-01 + 1.102800000000e-09 -4.171073443425e-01 + 1.112800000000e-09 -5.301213512093e-01 + 1.122800000000e-09 -5.826820342472e-01 + 1.132800000000e-09 -5.208927839223e-01 + 1.142800000000e-09 -3.582851623030e-01 + 1.152800000000e-09 -1.726179318326e-01 + 1.162800000000e-09 3.001935102304e-03 + 1.172800000000e-09 1.548738889534e-01 + 1.182800000000e-09 2.838707642593e-01 + 1.192800000000e-09 4.044922095117e-01 + 1.202800000000e-09 5.198180562761e-01 + 1.212800000000e-09 5.821632166084e-01 + 1.222800000000e-09 5.332184734218e-01 + 1.232800000000e-09 3.779624918474e-01 + 1.242800000000e-09 1.922988577092e-01 + 1.252800000000e-09 1.486703325848e-02 + 1.262800000000e-09 -1.399496932386e-01 + 1.272800000000e-09 -2.707197504860e-01 + 1.282800000000e-09 -3.916660474216e-01 + 1.292800000000e-09 -5.087606367752e-01 + 1.302800000000e-09 -5.803016232270e-01 + 1.312800000000e-09 -5.444413186477e-01 + 1.322800000000e-09 -3.977418947932e-01 + 1.332800000000e-09 -2.123689566689e-01 + 1.342800000000e-09 -3.326433605185e-02 + 1.352800000000e-09 1.245198660865e-01 + 1.362800000000e-09 2.572914801001e-01 + 1.372800000000e-09 3.786884397038e-01 + 1.382800000000e-09 4.970287842619e-01 + 1.392800000000e-09 5.770140673465e-01 + 1.402800000000e-09 5.543068732670e-01 + 1.412800000000e-09 4.172944393038e-01 + 1.422800000000e-09 2.326135914048e-01 + 1.432800000000e-09 5.200031629165e-02 + 1.442800000000e-09 -1.087117173734e-01 + 1.452800000000e-09 -2.436934942172e-01 + 1.462800000000e-09 -3.656702152799e-01 + 1.472800000000e-09 -4.848025482630e-01 + 1.482800000000e-09 -5.723385369588e-01 + 1.492800000000e-09 -5.626458033125e-01 + 1.502800000000e-09 -4.362543636943e-01 + 1.512800000000e-09 -2.528118155371e-01 + 1.522800000000e-09 -7.087265053387e-02 + 1.532800000000e-09 9.266186071927e-02 + 1.542800000000e-09 2.300274395412e-01 + 1.552800000000e-09 3.527140919248e-01 + 1.562800000000e-09 4.722911338649e-01 + 1.572800000000e-09 5.664223472519e-01 + 1.582800000000e-09 5.694169369289e-01 + 1.592800000000e-09 4.543351006071e-01 + 1.602800000000e-09 2.728185799251e-01 + 1.612800000000e-09 8.974653097500e-02 + 1.622800000000e-09 -7.645342918533e-02 + 1.632800000000e-09 -2.163412758022e-01 + 1.642800000000e-09 -3.398672125281e-01 + 1.652800000000e-09 -4.596702740436e-01 + 1.662800000000e-09 -5.594547917655e-01 + 1.672800000000e-09 -5.746885318592e-01 + 1.682800000000e-09 -4.713817902736e-01 + 1.692800000000e-09 -2.925998303757e-01 + 1.702800000000e-09 -1.085902848019e-01 + 1.712800000000e-09 6.009271011551e-02 + 1.722800000000e-09 2.026110402562e-01 + 1.732800000000e-09 3.271137583800e-01 + 1.742800000000e-09 4.470366757261e-01 + 1.752800000000e-09 5.516024260258e-01 + 1.762800000000e-09 5.785682691472e-01 + 1.772800000000e-09 4.872997263391e-01 + 1.782800000000e-09 3.121706971956e-01 + 1.792800000000e-09 1.275093354174e-01 + 1.802800000000e-09 -4.339966691138e-02 + 1.812800000000e-09 -1.885914489076e-01 + 1.822800000000e-09 -3.142192224600e-01 + 1.832800000000e-09 -4.343522534326e-01 + 1.842800000000e-09 -5.430041650422e-01 + 1.852800000000e-09 -5.811837349212e-01 + 1.862800000000e-09 -5.023856761573e-01 + 1.872800000000e-09 -3.319418855515e-01 + 1.882800000000e-09 -1.467398868003e-01 + 1.892800000000e-09 2.631801497144e-02 + 1.902800000000e-09 1.743391836774e-01 + 1.912800000000e-09 3.012879943958e-01 + 1.922800000000e-09 4.215592295324e-01 + 1.932800000000e-09 5.336096259357e-01 + 1.942800000000e-09 5.825911854269e-01 + 1.952800000000e-09 5.163685478590e-01 + 1.962800000000e-09 3.514506166310e-01 + 1.972800000000e-09 1.658449567189e-01 + 1.982800000000e-09 -9.123570295392e-03 + 1.992800000000e-09 -1.599641527363e-01 + 2.000000000000e-09 -2.536669268561e-01 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/diff_ring_oscillator.sym b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/diff_ring_oscillator.sym new file mode 100644 index 00000000..e632b156 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/run_0/diff_ring_oscillator.sym @@ -0,0 +1,27 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 70 -20 90 -20 {} +L 4 70 20 90 20 {} +L 7 20 70 20 90 {} +L 7 -20 70 -20 90 {} +B 5 87.5 -22.5 92.5 -17.5 {name=Voplus dir=out} +B 5 17.5 87.5 22.5 92.5 {name=vdd dir=inout} +B 5 -22.5 87.5 -17.5 92.5 {name=gnd dir=inout} +B 5 87.5 17.5 92.5 22.5 {name=Vominus dir=out} +A 4 -1.666666666666714 1.666666666666714 71.68604389202189 287.5924245621816 360 {} +A 4 -30 27.5 40.69705149024927 42.51044707800085 94.97910584399833 {} +A 4 30 -27.5 40.69705149024927 222.5104470780009 94.97910584399833 {} +T {@symname} -40.5 -56 0 0 0.1 0.1 {} +T {@name} -40 -47 0 0 0.1 0.1 { +} +T {Voplus} 65 -24 0 1 0.2 0.2 {} +T {vdd} 5 64 2 1 0.2 0.2 {} +T {gnd} -35 64 2 1 0.2 0.2 {} +T {Vominus} 65 16 0 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/simulation_summary.csv b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/simulation_summary.csv new file mode 100644 index 00000000..8f65c459 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/simulation_summary.csv @@ -0,0 +1,2 @@ +run,time_axis,vo_diff,frequency +run_0,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.292e-02, -1.722e-01, -3.004e-01, …]",5.414e+09 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/simulation_summary.md b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/simulation_summary.md new file mode 100644 index 00000000..a45b7af4 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/parameters/Frequency/simulation_summary.md @@ -0,0 +1,5 @@ +# Simulation Summary for Freq + +| run | time_axis | vo_diff | frequency | +| :-- | --------: | ------: | --------: | +| run_0 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.292e-02, -1.722e-01, -3.004e-01, …] | 5.414e+09 | diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/summary.md b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/summary.md new file mode 100644 index 00000000..a5320ec1 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_14-28-29/summary.md @@ -0,0 +1,9 @@ + +# CACE Summary for diff_ring_oscillator + +**netlist source**: schematic + +| Parameter | Tool | Result | Min Limit | Min Value | Typ Target | Typ Value | Max Limit | Max Value | Status | +| :------------------- | :------------------- | :-------------- | ---------: | -----------: | ---------: | -----------: | ---------: | -----------: | :------: | +| Freq | ngspice | frequency | 4.2 GHz | 5.414 GHz | 5.4 GHz | 5.414 GHz | 7.1 GHz | 5.414 GHz | Pass ✅ | + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/diff_oscillator_tb.sch new file mode 100644 index 00000000..8b2e4f89 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/diff_oscillator_tb.sch @@ -0,0 +1,65 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=gnd} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +N 390 -280 390 -250 {lab=GND} +N 390 -370 390 -340 {lab=vdd} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 10 -1170 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +* Keep this if your manual run has it — parity matters + +.ic V(Voplus)=1.2 +.control +* Stability & parity options +set noaskquit +set numdgt=12 + +* Save vectors and run +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n 160p + +* Define explicit vectors (avoid V(...) on calculated vectors) +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +* --- Main file that CACE reads: 2 columns (time, vo_diff) --- +set wr_singlescale +wrdata CACE\{simpath\}/CACE\{filename\}_CACE\{N\}.data vo_diff + +* --- Extra debug file (CACE ignores): 4 columns w/ names --- +set wr_vecnames +wrdata CACE\{simpath\}/debug_CACE\{N\}.dat time vo_p vo_m vo_diff +unset wr_vecnames + +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib CACE\{PDK_ROOT\}/CACE\{PDK\}/libs.tech/ngspice/models/cornerMOSlv.lib mos_CACE\{corner\} + +.include CACE\{DUT_path\} + +.temp CACE\{temperature\} +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} +C {vsource.sym} 390 -310 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 390 -250 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 390 -370 2 0 {name=p5 sig_type=std_logic lab=vdd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/frequency.png b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/frequency.png new file mode 100644 index 0000000000000000000000000000000000000000..d2bd4121ca10b5af73f837a89c772ae0f2bb88bf GIT binary patch literal 42515 zcmZsC2Q-{f*Y3>dW^~bs9=-RHh#^D^As9qAdN0v4h(U;mK6**C5WPkjiQYvQH6cWa zP7rcm`M&?I|E_h^6_wS_i=HwX7#i4@^*B06Bm*c5*1)|@bU5RmJ=3s z{l5KeGQ z@`>YWYvJO3(t#~rM(q9ZCRZ+ezXJ?n|#g1k2AIr|>f-2lYwoTEF z8Qc>8UEI9vWwd$u|6P=FbYI5)t@O#U&II(o)$*q7aku^N{7x5lx6tO60*$T#>dAOu^(YlVSm+pn;9nA znJQ>1;=ZIXHTa(wkL`yIXG+`rT4*M*D2&MG-rU>->0XP-%gf)Yd;tHqK9gKrUWx+W z*=BLa1-1b5zw-6-+p<*u_g@ZM4-U_9h|~X%w9WrM1Gjk$CxHK#s3eB}#Wmqm5ufj` zq^(C4&s6wQK7Dzod9arBNGdo)Dzkga$l?_ql!g_fWxdyS*0bBVEaX`K-%Tbd%BC-Z z_S$IE%maDdS`Qusui)Iq3N|i;C+Wx$3Ag`d|1p|taTKI;@5;yJYXeE+q8}rTkXiKZ z*TzC!9(D8P|C}}c6S^YDj569)8Z{?dh3R0Yv!gkR6+*(|PCKw$Q1v zCo)Gv;s-s9?w0d)j_udO*VmzMCme0X=y%2cBOeM%|K<+3KKJ0dmvN&TbIZq%@7tFa z7hl=u1Qh)^Q~13SA#*$iKgiw-CiuA5E`PfC%p&-F(4wcWPkr(Eoy_5aj*gD4*Z(vCTY0}7rE24@azt%e`(5X0f#c)j$v-*LOa3^I6i=uhmr}F%uYh-Et8r+b`cU}o z&Ob4d_SvnU`L=EGSMKb@`9JD0rs9y!hOTayFLIo&pBGBe5P{)5TMm&Xz4yl>c#Y$B zr|-t`z_CeTT984(a(HJ_xB4j(ZA>o$h|^tyYEA z+K=}9`nVVGBj+08+MmcJqD{5edPI6UXP@i2oTSD5MvMDg$oxOr6Ct4d8OB9PB=EF_ z`n^%*hl`7?srS{^-7hnikHW};L8c8ZohvJOC-p|=0eElJalJQ2ZnZ3lbV_JbYvzxS z|Ko$a%R{I&dp@5C4O%%I6z+Zf{Ey8-=;f~e&v$7ab9QM~6Ghrh`=6lTWKA>s+>nNo zi`o%6=tS|OUfGST2wIC^ibo0uxF4Fn5oZPcYIbmR)H{*tTP-)u{p`6M0xLW(*m~Eb zTy1M@DNz|n&w%UMJK_HA`NA#UzEH*J;KHs%k zIGxNaOZx`RCq|FRe21AmzdHHdBi$YrK`KXh^Fo%uO*R4JDiEm3ciYfqzOFwoBq&JU zu+schd;49cz|H*Mlf`!<^&ctTTE1L5Gibx}>Vs_@>@dn7OpjQ#*0?I2c$uwk5tw7G z{+^NLBiz%gZA4;SuL{f3RvD!4UCT|kFUA&IEawOEe%Sxm;o2SFDZmn#??*)_X$w_d zxLWu+E19g{mQ3_I%6#@E+0}+kzU&4|P=LG!_x|Mjy;Ad+!Y>|(cX^Df(ykW73YDEN z|7txN@w6~)^*?C(l7W6D?KjKSCH)Mxifz`P6zt*333MfRaK!cJ*Lg+LpU=!?Y2sF* ziTvN{_U=XIn^BCKowL<(Io_uIdZAWbaSsZb{bICyH-d6$NfHLiZ{82BKV|;2UHLb@ zSE@bAbo8#li5Is-`&qBiK~Fr}pEIc9>@%7x?_cXVhb&7AjPdsF0?OSm$NgT$Jrcy< zzrMYHi(fwOuSJX0@M?fo8IL@!gXJXTT zmoxH5ktrJ7QcuF!{NCsi$O~T|ANsXQCp>9oaG!1ESJ*lGDj!v@c(BBJ)#j2>bTZdI zAsSNMV$8COztMqHMxlY& zLF_&EPrdHJ3~C`8dRZP1S2+yTC{%U>yLA#w0o&7!w>?|1FDTavv=mAfU@#Lr%=6kLDg zptH`EwF8c-X={%WjwO|i7_z7ciBiC+3iTHL(E1mze0h=pB%-~N;(9#V9QC()_~NfT z{?B_sjJ+amna{=_J?K#;fG08ONNoYSp+$XN_6>s}RhB5-U_?wvku% zqZmEbn&>(j5knA4z%zSr;Z{7WBHA>%?V!Kak*7`Ue!Ly-I(JfcpX5B6lh=}On!PLX zvcqkw{+b0J>EOcpS7*;7+vrOqDVkeUgR7R0j$z+edtxW|5LDQHvwB<_|;t0@6xHK7*OnjqL1vx8b3Bt4(R*))n>@p1%*g`09(w9=Zl2ZX8 zA$|{cy$;7zwm;NziuP$AkIS9J(VkuVF^f3AYY8SQ4nRX zP)>}BM0oqE!q2><-SrQrZ@anAD0NiO-gue>=hYF<)J)llQGTW61~u~i@fMGl1~Yvz zS{z#b-`i>uJSyp3XKUY+fUYc~iEQkPO+6;>J_VtQi3s3dnK6zM)~ruu6D|q2Y5WY0 z^M39U`BYm*`%4YW^`GWu_U!mz*559fkEZ9_&s6GYEA8l$D_kW zG%W9lXgtHkv61*VPnAAzvNV{S+m8wm?#F`7;S zn$%HSAZL0(EU-UU`<^*yl!pNBPJYH<{b_cwxXyCiEqlE(l2zO;iophbK`0I{?+ywy zg-r0b;0+8VIA$2$nG5?^EE=SNp$|+G5l^NcG2K})7oV>(GQwaMXW>Q(L*e;|?Df&c z+IKFW<{tSA?^*V%t5NC;BBR|zx^mhaQxaJwNOoEO{Hdm#yIVV7t!9KstAFQCjrVDN z!sN!`;6sB4hRFGo#$DxyZ@K(^Ij8@4Q$2;uX25&E_(5-Yz65^~MbQ>wMZ8Th=BI19 z)`K%h0HCHH(O%JNBmy~$VX`#hD$;b;-+q2L<(y9x6)1BMlsX*?xo)td<2NNm%ROFi zTX>W~U#9RJP_gQCwoju=>6SdOp)vkj2gmKTaw6|JA_0+G_j8U8#s4!#V~oq*jU+$8 zT<0aVqzaa&?-5Vn0@_^E$W?Ax^8CdwD;GR?3T#v^L2VPCb_53_3dfm)%#q6c*l9B| zl25GW`C*U&ZlFA6u;!}4n;68@F~i2~(SGl7;n}?NL%OB5CP4uY)V}Z~MTXI5umFZ` z7v(QUDOzQ5AWJtcI^xfSx9|9fNIX24 zjz6?gsF#c{btO_^M{^Yvl`&c`-mk3~stazigL2j6h}lHs^QNLQe&C5E@>@53>5;Dx z1b-G0X?yh(9gPo%ua73$U3)9D<{|yakNAhkCrornSF#{Z*wE_|v05z!MPPG(3G3<_ zt|T{*Jsy1529Qz)TZ8>sx_SG(ABKOjmWVJj2{(r_t0hJQ0^9BCo_A1?p!pcc4e=cx z&FN2;*1!S3Ij7gIR01t|W~lIna-49UUw;b`bQRB*K_F&>HkMK>{sgmoa7Z`srM09t zwcprMG+8jgwbDL=?Y&kH?xad?8*_X^V4j(|eZ`i+*X;_+5=kbzn(@|b1<~8Z0TafU zI5$fRs2p9!TT6k#Kg8M=*MHY7qsxMLCQwyF_ZURWKffxA_P$gK7&gR|r!=7E=M3HH z9<2YJK%!^yK8gK}H(+8;QHn2%&PeH>74L;yCL*Nf3eov4V4M`JSK~1dd4HI*Fv7s6 zEcs=O#F?lJ(S`A7E62X{3F)bzw=6fp=oI6i8OHG=igGII6_P3<0`J7rYz-wWnmjU9 zQZ%dufu0(w(GTOyS)=(bX{*lqXu{dI#)HTCWJQrBTr8^HSxgbQI6)0dr?x}Zuu^CA zl6T#dxRz_-?os!`7Cqx2q&XXoNR+#Cx})v-%Cvu?RU^CtZ;~NjDYrgmSMxQqmw_g9 zFWw3b$}B5(_#>4pXe@Q{J)P~_+_8_Elwx+%0XuXhE39ow??D3nylA@MGt~zihBFCP zbkj%DO8e)v-4mznn_A-`rzoe-s_4?LuiMW^YHZ*Bk*&2Cwvc$3L*Hg&i~yw@QRupF zk0$OaRp2qhv>(qF=*wp!qYhX*KhqK37Vm<@rut9vZ6Gq(%AyX^r_HgXaU~2L)uUhf zk)pI)&xpj}E^Ycua}t(&c8Nm?Q~f`+RFpr#rUa74O=}(J4M98Snmq+HHjngFhVS+| z##=g=n10IWRIg`3{1fl2q{7{T#t62+@jvPx9Gw5nU5M$ET7Q~?ib5YQlR|A#HK?S2;tHQ-x!9fqM*o8u}yJkXa&|`dQ@MnTg z(lB8RDg*B%#u&FE#S)SySn%t8z9=q}z@5&nmVcTwF0XJ`-cA78J>+Bh*MArS>QyHV zbY|ht!ABWOSo_N94e21T6H|t8ag_vmh9Q~+;nc`?BiOsHDIS}<(Dz!?lgCQ72R5I3N*X@#+i2QXEc=K?G4p!Nm;%PBpm8 zAAtFIQndK}?MK!?>W@BDp6r07YE|`Wdq>twZBD%ySF!CkoDqp8^G^>IWizImFy0B; z{32-c)41iciQwz}(=E$BuY7Jgm~04|E*;5ZB=Bb2XWp)U>h-YJPrnEAw0-GqTE8Ks z-9ts+D4Y$T^*M8QYJw92^>&ky5NC$1x!!cNR?lNxp> zq&5Scf1%~pRx~_ku(%<D8UthRIT?WH6PVG?D3yu2dlw6Yi zy!dnnT(3(@=tbrL>=guB3VS*^V!#4b7$Y@b9|Dk>-Ur0?&Is zcWLMZM4>%ek*_61##+=E{vD%X_A^*L(b%naQ5w62`}dRSw;1~i`*5>t#M*dOqUxu& zk>DLK9LeD^p&xJWB8T5ZTUDD*)=UI)EuV4@kMsp@<86{US4F3<*VB5p=_Vyv0>mIvfaLY=PSj=o?Wj;646WH?!(cQT&#~YI|3`hy1nS zJ>+SXp$V;eg^n0Ljf?I_B`1W6i0-6ddJ#gps!@xUsDjo*AxKa%oNdtm&2+}I$?AF# z6SG~{Y0bL$#$R zZm2Sj_;NI}Ip;jFXv<)wBzWeCCJpD1Evxxi{S+QUmmU|E=*Bj&BA%l>>Emgi{ROfj zBFc&UVB}0qfTK!l)*$@&fbj8wlc*P+1l;C+eP%hurM4%hT7zyKU1xR03EC>5?qx~u zG>%Ww)`OeeP(?AHMRze#3y?TDM$W3FX677LWOu2@Bz3)$z2ZkQ-CbtD5rWGi89Fl=sX8HAx6 zL<|PK3@baWqquP!R*X|quQz$|Xm-Y4s=e|QTm}ulVG8k$I{`%@9nz<@ikT(3r^R&z zWM!l3q@3{cQnY96VHhNj#alaqvFP=;PA#+1^;O62aG!Lx>36a~PSZzsMY3WkOO%rB zH|6-Az~OGt@Qr#CrbbRKbnymeHt9JFD|vH92_{xpaPuc?J%(kiqfFuUR=!9IxwuO; z*DGz~WA|6b(gwRAV=U&w0lg{2N!hLjum(&%LxDTsP&ZmF?Y#t3@$!C_ur&OLME*N9 zo80`vcWRDQ(gi=k1Wz7qDve0+M7{l{=d1$aqNo>KDbJ_3wi8qCWW3xlp&IwRV8jN5 zjhT8^*b6gMYm@M%&|Yk%t3V_$`C%^La-0yCL1}Hf(L zGibAXTSZ-)S2dsv^E<|QreBwQ;1{qO$00PcY;1N#$QU{bR$8T^ksV7wdrhf z1@1kZGf){*W^S~>SV;gluQ~0RkPa1IK)*w0}{^Co>#!B9J zEBe69YJpqG=m9I3L~&awiL-CR>GUBzWYf{Z#p3NeL8cX*VL+J1gGDXzNu3=CnBf@` zeEcH`!Bvy$uWbs&PVeYFe2@_{Nk1s2RWecfMx8m2cGmvEq2=wTSCSJ!*Z({)OdBsN zCBl`{qE5lgppbrdSWKTUBmZ!0_V8~dEw-N0ImJ~XE-5TyCSgi@x+^o1Qrlg$RvRM2 z*RRfTq>Jw~YEjsXLhTmmlund7g4E*dtVYe%oc^#n;lCeHvK5w&xM75W-VS_0{aTVvbAA*i&)b zvY{_boI`3K6I$9A8<4(4X5eAn9u|4AN<$M%F+!wq^GMW*G1O^D7x`A!Mt#^{bmHx$ z1cPY8%L&=Q86X|M`Inh^YC5#qLux&vW%C@>vIOITqcf5 z?%G%nCA*3xxRCuoHdmi3B2^q+e8Es6Q;&T-_j>VmIDP00+Ct`jI<(t9Du1TOUFh+%d19G-0@h5pQj(ILL9{&=sGZdF z&R#xP`fpsR2z*#W2W4}YK1EV`90sm4);Xnb@F)xLr|q;=@lky|1p(=F*5J+(`h6<_fJilWpuOv`l?Sed<-~C9L#F ze6oBEcZ}++g=mGx_kmQcDQNRms$*(2=s2+$`Ty^rv|O|o=Y}#=8^Z{geG+EzDAj5c zsgwpIGcYRCnZ{(v!ap6>rwg%2$!!>T^BmSpyh2!k3F)bpyOvg}X9h*Kxj1IcGvLAN zm`WCR>@+SvNoX7WGqq9G1Q*eMgVV_OFJ6z-Zr}sh_pi1ybF;vo@0u>Q-dBfS1v2?g z>dE|kn^fgEQG{Mj>$mj)8Ux>(zQ-rkJINwx*~>4wqeA z0F9-wi3$CqAoGxuCuRZbDNUEZK2pR^P2Y;^uAecF1)4io7-@I&m3sZKOc-vSs=E}U zOTSV~*)#n|_S^47@IoymmM29SJ>qd$_vt^{!gw)Ll9})DXFC~{cD+fX=;j2I7Bn1M zBQtB{lwut{kN#9+b3Wbmix|U&!)yveCM2AZAb=YCY+su8>yt{G<&ZPqtE0-6Ek2;H zwmte|I1{H5Lrhmc*IK7kyta1g!J#@OO&~^tI9bb}tPWi^YPbKRk^+*`E3SEmjyGl&ry(UKC?2fL3D(z`cDj7S$7CA%;;A z!%!b_Q-6Mi1m~^$eoGxLm}LG|#FY3_&5~~2(t*dcPD7V(rG@%oA1Ri^20Z4~={wO1 zO0E!maD-R~GdVwqrc+YOj#osPuz!oUV|#LVGT_CxMBA*~KcDH=0(-J&(@01no~+JU z<@57#xp`a5);7>L>v?&Lzo)Ieww6k`bsr+-GHZF&40ODz9md&RW~;zJ`|?HkyQKR) zs?t!U_gX(5ln}_Yz^V27iX2;7N=QB{IcGgk!(>jIqh|5G$z^gIn0WM?=#KBmMy#p7 zZNKiJ;n0^8UZ@t}gaoBshQHj*H{$Qh z{fzy;kes12(5R?3uGDKu zB?=dm%#vbvGfD|dFhcJ+=$&V)3C5~LJl@ZU!y@9``r6hZL8p^Bv~J9`V8Gim^FznP z6kTtE7Q6omQm-vc&1=LeOGsRCognh#7l=|cy_aLNNCQ&=rCWp!P|UY|{-rSq%5L^` zqoP3RsA0acHm9hcPgdASDHYRWhjs1o`JTlv-rxhB7077c+LB)o%QPQ>$Iq=5aTJk# z-S_XSM0~Gjf|OikEnX~xd{ma>Qe3AE$z}mQV&_Q)A9f#4`X*%Md6_qP58*RiDxaJC z-R6wy_tygw4nj9F;^K{08Vqw7jFdc2i32Fu5p7@}C^WMp5LGgCyl}H)1~@QEVF$`C zMd1dd5xQ1rGiO*S9?gfuI}G+&nX7FugLH)SP1z7en{Uoeb6>&43Us(7>+r}E!xl3;lg+CLhA)cf;LOBj%d5oIYWN*gHRO@DGd$M+byDDVtxl3g$< z^&ttcuAQ_9Z0Jq6T+u$U$~y1}8?!5O^c3JO}KdZ<4nXW|M*3lz^KHlT&7} zk>!f6FbNm_Dma~_f4Bni^plm`p2cyhUuGAr9oOxlxBCD+{z+ zqfqHI38fcTr`FB7M2Xr|sXt3xWO@g>GU8Ie4xGXN-E}tsL_#H5`A%`l`Se>l3HkW4 zKY1yR#C*G=IEbj8eI&Tr)_0<*wqAD`Y@g=d`YU!{1nr7DDzN3Yv~EEacmIF@F)XQOe!SjlDaB)8VvI;6OlRAvf> zVl<@58@Jm`6MfqWYo6*TeOjC5hCn^w{UUgS*sr817hz$|Piwu9ecrt}fy8r-$Y|8a zCz3&k%xO&xYcrFvPmy)%hYE_sYQovU$%;8=%luH`OFP(;3Rxo_gni0c4~?YruM?31 zygbj>O*b7XqSnWKWq5B21A?rtCZ(PcsK#0=#!CL`^2H*q$s1T?q<#cX!4MZXCXaf5g<7(i&1M^NL+qUs=lC2Ut;k{ z@<$-LW83$$488)1^VE4q^FM=c-FBZOW^dCfw|97A_Nkg6x& zvy^4hBwITw0=!=~gEMJAnbX~e`{KmBCkjM;8re8X=RwM1NR35=ySsl1oOscFtpD!} z{?yQvkr6khNvuqQO6+P|ncd1x1Xjh$Z03B_zGPqH=jG8KhW?y`%RYG;xa5OyeMyfB z9`B?Jv_n(Z)|k`5X?)7I;*J?O8@pUjP3yh=#BaPbwzT7*46J)HR;@X@YXvL0O|q(e%`}U`&{X&Zm%5_gh2GqynpCyXOT=T3c6yEKLwrCg2h>WOo^80JZR-E z1sXSaDnK(Hz!-2X8E0d!ADqBvwxg5{1%92V1|{|DwABxkAz@d^G|6@oU}GJ-(dC3j zthpo(mJZs;9E1w|%Uju#3VL_w=ns);yb%vdUwF;%d7%l;$`p(oP~;7}V8RFud`k(7 zx?mSGvc_^Imu6+6^MYV}>_CxXwYx-(V`GjYDsVW*2wz7MXXW^}7j%l@^H7y^8_SA> zs6jdXq2A%tPy*VkN?>#pUMyF&U)Z5HV&eY=RPwO|;mBs4EGgrL4VP9LUhNTbY`#$4MM;k)7g;vDPuY8%3mBAX|K?Be+&MT)rD zp1yUBN0#1S=QE>K$zP{hyno9?nWr5hQ`xk(W+%*VE1S(6loPHKNn4-$_^nfF_h`nG zU$Kw-k8irO2ky;PxUOU@I3N)a-xQte35JgRP;dw**>uph^|pp>*Q< z_eOKugeUQ6vP+wsuSoJvy-)SIp@r8ExNKz7`BAS1j?#>`fyq44;GY6a;p*?AGAoA+ zuHhSM&v9hL+dOP1Q1hi*S8S88lfbMayb>h3H7yHNpIdudv}U4RiRg0Id3bBqy=VH4 z4aHlgGr0H*JI*M;7{PyV;i6G&D^=lEZ$dS6_y9UC7?oUSbaTnTck=x1KDIzvs&}`0 zjN~59XmdXwHka?GOBO@7E3~`7vE!}bNR*ZPDIUt?uk^h$!n}6+-W#_;w4&xiTq22k zEEh+W_XZOTua${ganMTXCbQdjJJ|=08zM!^m@y2HeRD7~U=2_k6Od zibJzDx>I1<9#W>im&)3Rwt3iCF7lC-xNU&!IW-6Et=}Dv!wC;ctTL|6;9%eBy{p3Y zh|qf^FFTwka#-ObS z!oTb5bxWT^hhV&X?*W7+RXW48#2PK|Dydh6ljhazh4fEn(o}=@3_;&$0C%-wNnpy( zP_3cvmd`g~BNsc89CRQN!ADVi+e$cZWVqQ_Ob~yhaYR`UGvsUuo+YSp8BTD|j#R#4 zti{XbO>E>xMY737GnB1 zRBbN7hOXGcvog3Xr=uZIiA~%#W$LO5;S@fCm7-|L)Pi&QR|(WeS1-FT=&JQ!2qpm? zNs&)FKe#@@({6DKB4XK*eU+E;dFWy5cM~sqt+G%Thp#FVlfJptC|xQ`*=!z}xp`*w zi_N)L0v;PzEy2YE@T257toNY2)S7f9xcKJ2I%q2%(OGDs_E)*$eKXeScWG%%vrz){ z)dO2BC(5Xn!&l26)Rmq}Baocfqhh6!y9p=D)xFcuzL}kXn{X-v89y#d&!?ae? zG-u87V)$_<43EO2j8gZ~rgrl8=|0c-fF0WSbgv_T&6FpfbsXnT0v$qBe67BmwB+Gq zL_*d}H3eBDjuIbD{jB>y3mf2JJv^F~lzo1dTB42jr!%4hrotr`42(`#D`(~3vs#yHseP1@KTBjJm>uHhWq0%04O?T zyD-#!boTY-P+mdn$_$vc>fZO@ag_#EQTg@iv|F3*C`&1d$7hGpf7`O6ACSi;^MXoq zy+Kb?Ut$61P0jx8*@|-aP#^0kOP)^c#y^o0ej6^(z`=&cR@Duh5)dwdB!BgV+?RmH z>(Pk`w`rlET~2!`ea2NM4O|7$=a#T1gi{e_fxxNrp5s4!U_#9qTzF3Dh4)<71%v^Lo$miM2Du{+vD*hR6FJXJihQLH`ZS=-x^J3pPT@iQu<>%*Z&*QKN4;*4BzeP)mfX@-KE7jF9B#u)4Z7h zS5UAd{WW!KU0ygnv5g~}nez|s6<7?Ap???eiXBe8g_Ru!$p?$T1xbhF%MWN$SFOib zWmSR@Db8)QzrUZ{TK(TZDahmMWafs&9&PEx7tWP!ehb@`9oH9S9nX(4m%H3Uj~M@) zHgokz0Bt$u!|+>_Bhwk0p;~|3f#a-Hv)%T`sv3 zcNZcVVW)?kx}Z*J-9>FfK1}p)p3XqkF&C45bJ8YZ+n}WC(b?DZthz`Bs&PWEZc4Nl zo&~JM2v;bHcd{e0bZz@qz7^W5nQ6MhH0sx{UuBigo;~}HvCr{55eKe3+}v$&ov&-D zYzF4^-{=%q+&lU)46SoZv1F8Cku1|NH)jp{&0YyriII*SC1siu&}=uZaXE;X2lriM z1*BwYQPHKWy`t`caz^*kt_bLB5~CqvSxUZz(J&Zp3WUdja@FvV3lKCn-F&qT!OL!T zx`T1;Fp%*`WExiBN1U-|(BH!u)HnfEXq@J7Ey$$KV zrO~I!K!hFi(WBA6w<3aLJAb<}K|6>*D#V);rv{wY6dQ4G*aWsz6z_ zr)&5gp#y=a4DL6q+!ZK>T;WQ>Cm0yENplfEfq`snq07 zQs+(zn|TPn50o##Wp@E3M1=f&XWG?!d7sQS^E5RDgD;LF@Vs(O41u-eq2y(RkZ!zO z$F^s0Y&mh1{7rTl#4GMi`+Hc*fb4U(1ozn^UHMU# z4->R5VjWqi{7J(zlZGaM&$nevmtZ7mZU12 zMD33YFK=c2=-gL{nwPyHV8cS3GtG{kPy~~8zabL*x=kQ+eeK6Qe?_qVwb^`9H8w84 z++Mik8b86^nyxkA{)g*V*|bXjEwC$A1G}0*;SMH#qYqvAQ7kWSoPyfD3koUM`4>>( zR&pi8-Vtyk;#={(D_)crtItix1I_4$t+5*vFf4ud4)3Rr$=qc^WS#(&wPT{6p@j|w zcF^n@yJwP6^8>hgU?*?I8+A-Dqy?7GWJzuimJtCZMyzRJKjc@l$i$@2E=W4CL;8ee z=gM6YB;N;K|EZ9@75hnKpmR*O!J)!}diEy!qd24Ie9v&Pi}&9P2|EkTRLcM+dUO5Y z29NdM%#W(F?1X@@fH}Qah;nOQr=cds3toj$E^mq!%=SE)236B!?jtfedf%pmFMzlK z**t17*2WY==kQ7mm_gETY+2!JWZh9>F0&*A3AJppoB52ZO8)&i3)-meWufX|{Y3Z< z$&)t%Nsy<^%Pph}kTLREBqzt+`SQJxKGAd@+J$^5kVJCRC2T)&PgL{>ml6izZT^ah zSin0)(p+ybbiSG1z{ZfOTRzr!n*Rn0-6s|5)a`3QgPJ+O{nyA{=Z-Yv!vvQE##k!~VM-@()E$4#UdRN5-?x6w!G@TX{O3vMJKcrolcCG7Avc|dAAY2P zZ2*L%O5_I$1x68wV0R1j&m}@WQ84`u8;S@g5XbEk6yDz%O7si^;N&z*bvzroWctK@ zlVk5HGY4OP4ouN+O?TEop#D?8j?=#`hJd{6u_xY5Y9`FXAcKFkJC<(EcspfWd3SOd zSB{6X2B9DUM=cyemPZ5*(sF94X*uOn9RKuGYH{b%fAcg?=S~oep6T%9-FQ zcqD`^RG7?*NAHdeskm7IvmKDMVlC^j6<+}zbVlmi^r^)OaHx|m^%M2&#;u+Fsn@JiIJkjVb@%xM`(Oh8W5=k4 zk;qWecj`(X;QVCS`V!W&g(kQYOA2!Rpi7Zd&!2M)#r@qd@F5agZ7)m_%X*6pOJ@if zp&+7~5=8R!-w8mC#1yVrx%}_3#R4=v@^LB=!h-)W1;|aoB3&*!L5cg969QJAIwoZ zm|(>Ih0l{I{?;tP!eGtQ?Ka^02NiWhmJm4xjaq0!D1TET={tI0O^{hTv`$-*C`S^I zLSsu@5?~Al9j52M38skDNMNEtPBZX-epo4;#b3ZVixU+U0$za$*w!Fctyca3cq$cj ztHXt{M7Tj~tG3EaU_hGtr#@JWd2Q{b;3iB0@!6y~g@)6K#vcz}lg^eJt-=g(=ty`s z_kFRSD0+s((;m&4Qv$I4Hq1P% z4Hz0zk9>z9Yzhl=GD5teTYHk(fYgmq-cyl|ymD2W8(jmCkt0Cr43wRkfQzTv zK9Eazzwid{17_wAuTlxzw=x@GhkfG=fPJTBGsCko{BA!&GWx55U+nNc#Aj z5?q}-xztl-HolMnp7Z|rsGd0IU~`($jPjH^D2$Ay5-2%y)U$gnHPKQJFT-g8|3oB* zupFn{z|v_@4v>1;Ccb-?6uEZJPpvsUO4for-HADU{{5>5TP4oOzb)C;AQb+(GMZ3@ zTJkqA(4!3VRQ2pMI{E}@*-RrxutzE_E`Gm4CT%*s{gTumHTc6&!rMfuQLK57i<14r z*y3w#+q@yoUZTEEaCC`EAI4%k(MA$xL0Ohpc(J!f+ zWzsT@hWE9(Y@Yz?>KS~Ei|--eui4EJO<)UqZ;$ixGOL+;ijsiq@}@ZD!LRw#9my_E zemcfwL&0g?+4v52o3#DJ2Z#xyU&8xFn+(Lxk;RlRiUBGCyqo~mL>S)JP_l%N$ei_r@!*FJvR&;; zpH}ZlW(kKkbL$U14!KY-V!QZVIn0G@6wNh$(+^1f#UZ9*yh1Y|Hu?&UGYe|KXKGo1eP5dOE{q?$Xv(m z;OiLDtMB zcgVl7$>DVoWCuiz5{*iotOiqX-Iu$wG*_pU%f`|opcJp&#oGIY1uEbbNqML$3d53b ztUc7R?0ja?XMDukD>>+eI=jJYm8zmX2vVp@e9Et5&EL&TTV;=klhVl%oJ9ThdMmE} zqmYaLc~22h9I;sFcR{(7Ri)wDIuL+Z+WI8n37p7@s-SHvJ9~B$``2(T*}D$XbaPTjJXC z<84tF-S9Ft*#^sQ)L1l;qVFEWJj(0nxDDE$$i1eXb1|GPkO;q@jPm9&BA=%0zk<9W z#~w@zM&DiVC+J80PF(~4dfX#zS=! zo}%ehZuk9pwY4^!_w7#dtwEUV*R22_B=}oM`=_1(2)kx`c=(!GClc12a@uu=BXsqG zS;)MV&giM{t$4*#V_+7<;`%Ucb7!age7<({Zsu2rWNXAT%g#EsBE;Q=EXYIim7m@a znN|d@qR*T%#kuwQ+ZFEQTTC#~Q*@LtWrPDV`lI^Om!ss%BkJQr%ryYOjRHKC~Au^G?KlT%JmUbMH|VT6`2)n_}1ut*S6-N$m& zTez{fs~XXr==f96R5qnlRUCe$Ob0&z^5<1erI26E8`hSVN;isXl_1Uxjb83*#pD}y z(h|yx$osSO6yQy=3z2uinD+eEYz4xNBm1c+d`#GV!1~bA~bFzfOxg)4xUJj~C623ZyHo&xd(&%oyjJSwE8=Cux3cu~mSjGKo$50E3XZ z8#GX>EUFyYpB_JK`J=8HXbevk;h^~;^p`Qo)PQ7MlYc(^KyUDs zMD($hl$@HDj7Va|!yxQle-@-R3Q5DuKYD*b{R565h@w_U!O4_7KU%%msMyWi{0V+b zZ0q3T^zo=DehmVI@hi?3ThBGQ&G!YC2dRBu8nS<0`YU^IelX$;7(;h>Xw^We0Lpp8 z;|5~(V2+GW?kD)WOQGm#&Y~7Y4D+ms#2?D_w+i9Gj;cT^z-a;JiDIFhk?xu1%X<^E zKSIaU5x22|)CJs35vY|M5k~dIf^l3bhUkdPLcdpi|IZ0t|L!g8K2k^dGs4EHryq2K zzNircB#9XAI^3g1%tp{HUQtJX^srmpPi5$r{n6rJtVt8-^lUYfq8g_m~g?|(s!1cMkELQ z$cX&?A7PpJ2v0G?%banMoM_I-$CBztnybgXCazGqSDa8VgpSQXk_(uN+^0?cAqp6qLLA_E-tD?;enri)GWL70d|O~Kl~uLXpRLsvX}M{}L$z|LQunU?D>BMppH_|!^Gd3V43 z3*-f9nfxw!WG;p)uigCfmnCDI#*-8#CaUJg8B{7K1zR^lXWdIrtrBkgSU4eH(3L?u zVQ9_I`>p3QBiE^efBqI-s^=d7FZZX`ZOctPmlSq2gCa3DW9P2rP$#Sj4W0-3(Xc$H zXQOr-r#lh#={7X#1Fmu^^wLFA)eCn|OSZ^w58NnX1Lc<#HMeStw-=+7T z!$V-%u?P^UF3zW{QD$$=<7~vP>`=DfujgsKF}C;+a5FD_ABU-qIRE{*77z-Hjc;xP zc4zbHT6WAk18I!_ONdh`MSOorj0c9mcA|( zHkfP+dN#Azx@J@O#4AQ(MVg74S&=Z$8^UjAAtqk4J`9W7MgJ%tkc1)J;QG`j3JhYc ze~jmRx+&zAp3q$(>A;;P$ES<5`PYXn9~^JSp55!1|9>2O0X+5pxs({)VT-wz(r>yMd=QIPJ#*$$w@iPyyG?5{yhiB`yUA3%O!YWHG z&sK-2sDEufl9+SR*5+>fr$ZS(2xxb!nlgR0eaJSfxT};Cad~P{ha`R1ei=HLElVZ)J-}q>D`@G^t6LE& zSN|()Sx2y*AE7d=d~9>R9&uS(BVB>%V;tTep)$(UHI$)<&0Hsl9T$nEHo$k8&8Fa4 zWfP!^F;rFN=*T9dE{$-`SJP4I|K6{b>TS+Eu-T1wdkL~Ul_Qc``40IDnzPv1{dmdq z_(ssQWAmReomv3yZFwpyE1!&Iv_0vjx|Q>7Ij8S`??Q97js0O4(M8Jduru4xx9;gG zG~>m1adBZ5(M90MCZ|rAbiOVR4Jzmg8yc>>DeNM-?!}Ym5N!bU&0s(7P~m*BN}r|| z?}X8i0HxB+ik0hp|8CN-+Yje|{#d_$4zrRE;>8cR<99-adC-0l$9Xjn1Abrb<=}S_nW@=hCPR%*%X5cEQFn=DlN_I^QAo*LqkJ79vgtKp|4D2guvM5 z_1ZD0g&VX=$EWfEiTig5ezHS@k6+s#i}VbUY1_Lk9M4>6%>4QpwfmR`-05~9`l&>! z6TB31PaF1a4{98;>;~WPm(;srg`KqZTQY?^E?a+#n#5DeJ*_+coCmXvY!x_-dNtB4 zO|v?G`QZ5qwUp9_|0N zvUhFXta$5lx|(4fvAerVWu}URBblMQ{*u}@qaiS@4V7K*UKDtN> z5fvp{`Y5u@kL36fr&cv_>^LSCh0#X6=R~_MN_r9ES}gS?&eT)wsC+D}shu(5?N>_o z@86Z*!B%^q#H{G2?4hwb;-iz3F>X={F9>Jb9-YY@J#_>QM{iI605wT!}(bCq`!w_g0KNN>yc!_J(ErwP&%#77LZ|1`&Z^>hR_ z$lE3TZ|KS%k4N@b2R^r6Cf#B0yaLUGbG)~N7+~a^*YI+5b>zxINAZTme+o16imdt2 z{fOiae*#^|IQBR3ZnOJzmO4aKlf_^4^8vM(Kp|3_nVf$X+>Q{69;QFUJEC)Mh#<$JJ|t> z=6lJo^$&t4^}49E+^$-bt2|O_#NeNdS8W|$UTbPutMKh=VmVReUq#-&ysSo*g=LHC zrmpFIk}Tf_xP%R&(Ek(}V&TJb_=*pI^~kpUrttdyf#Gbo{nnKskf-_V|Df+jbN&WO zz!R!@yKZ2w`^F_TIKJsTZaY>!AHQ{xQqknF^rq_KWzjPlD+F3PWA15p$h-H^%Bxy)UrMIOl6cCS-U*RT6pu;TI@RX z=|Opgk2gYY6gIP|!jPVTeE)bjrs%#G3*$|+K#G=X4n2o}Is**ap~+TM zgJH$bk9MMOoO4|M{n}1um-evba-QSy-iD`K_)B-2Xig(0l0|_O-?<)1E4j%1^)4}H z+IxPqpHO#c4C56N<%xZgVj~+h=n?O^h_Hl%8;h@L=o{=*2eHJlA}MiOd~^bY)YLX| zDFpMCg#t+*1fJ7D0xa?@!&e#AXeuOUG}NDR&`F2Uk;^5{ECF1mn=(afUL@ygyP=K# z1aGF67NDhGkmhk3I-<631KSNQ{iAb$dK9&kLXuE9%NFT1EU|b_AF!{EL>MI!7rne@ z@@i(h^V0dbu8V3A;?#hlnr4kG!NP{ccBJqkUageAla@A3k+%`T3K|)u6&V>bsRusy zb%-xzGuou7!`Hq>L!-kkD820cv$i+eE)t!IvC{DlRyiinVCxaNOgtB~uyR5_xt6N)JFKX&*Sh&;~wPogMeUFNbeXNz}EQ9!nh779+oP2{@ zydfOEzrb}&===cGGvt0-w<20N_Q!;kpC~|_!>XYH1806 zTqsTV>3F#+1sYARq48Dybe)X)(aUEeS-L5^+rqWiAeY!S4YD?;orrAFVOk;S}$s7TJw&>hxS+dqghyj2+Y(!;xtkjHC*&=LM>BN zi3)%hM2|q&BFu$+j*>g6Glt}jWs(X%`qhzLk}$cU-9d+&nwBJ2R3^h%ChwOEHfrZk z!8$m3%}6MXCu7oHtp-xyo<=Q_>{R)0q!?=Bx$JxgIHp(lwN;uMbPd!jLmly1FdtOt zMGmEG5c3@v2gAA;F*!G!$B75sH!R#O-u$p$E|AfYWkRq{h}K6O!6mA^#A{EZ<|-Fp zS;T?>6Uyx-n)x)UgJXs>ytMfGexUO(*mOjk|G4q_(Z!VyS{Wv*0%NAQTF+S-%|$~e zDc)p)zV)Q<9ieJMtO-(#&=%V@y)wbv7DsLK};(Y~?=wsbk-DHO3UzWgI>|V*nmfr7EbHfz7xuQo=`f0%nGe|N$!5Ar`h z__%}FeSG}!WK}GJ6mqruy3(A5|9O35^+QJ-Y~F?cBfhE^sy|JgaR^4*T&78kXrV%u zHnf2Pli%4fi;v0NxR?RLae_zl&VM;YN&dR5hEfDLZ3Cp|+xsr1yXE&gqYKp{U6j{H zR>OKp)A2~$h^TK&XGC*qv$?d*|Gcu1i@02m=uI(DxmnB#x9m7mWxN}LU*sNIOH62g z$I_SH?{t0tP=SW6C9pA-C0-rZa}-6tt{ci1*+Z zVHDu8uS)rhBk+Mb)^65BHQbq8^M|IrLC0{eqVGPA|H_o{WIv-l0d%{M-P8)YHSSd7 zPZ5@{gr(na0z$IOM@QWem!&%7FazED@Q2`8X(ZVXQ(RoIOKEgeE>3epm?*|RH2nBe zO}CGcsqui~2E98GN$ky2O7eO!$O$ncpvk^>a;d4@=*db%_1zQyvlvZP1gcT{v)QjT zK|5AgmVIYCO*h&AxnQ}fX@0q-CyspnJ7@ak?Jq<@DuZ)V!n3Zi2TN-?sv;jeW4~r; zZV77y+{PHgdAELP88?<~cJ96>H!_$|L9xsv&P!!o@cZf!e!(zq+CF-Qa>TbSEO zy=k&HGxC`6rScK;{NuCxIsU`)&0Ft2)_^Tz-d6UP#YY_RDgv*FAdA5q@g>gk8H_o0 z`b7KYzwyKl8^A8V%J8`{FJbh3z-! z177kt(e%hurMqm@MCmK^#z!u=tK@&4ZSed(=RdLpZf^|Rr-W|$o$aQ;xOnTtR0`e$ z%vLh$V@W4qE!JC_t|jQ^4!eL%FY$Y-<@Dj(aT}SI=+`Sf@-@^r*l)`1rv$`4lWaaM z*O+^(L<4+orMU1IoJ)tPEuBe4{29ID+eyge05-cPe@bsX2bIu&lp3IM3wh_Q{yG}# z{nE{wQMDsdxI8-{`?A-_iuw(fIztbDb_(()hlr?;meVRSde-^$1T#?cr^7RJ-_5Dyl7T{A(!M?Sz5luskVakAU_RiTv(|2lDp0Bbosn0n`1Q(vYstVPjEBf|h%fQ^xb^Bno>11ZuS zij{aiqC4c~;_FPq18th<47!egc)&&~QcW@<-Q@h>Yvwb@&kmFq+=LDud-+U_!piiiqighY%UCoaC@Y@AQFJTfEwyW2;TTQ~Bm zdL%KY`*{XR%jhR6OS$a&XGlzNMmeuiL~glU5Nxd( zo3p%)*miw+r;DFEq)4uE@?PdPHvgiM@`)V!n2>9B1aHwk=o+IJaR*U8UO457V`r`< z(WREqEPM4Ms*Lb0Fu9BXW-EV28`h((^joq`sH*l`1&O3-7Rn^DGsu;jF}4 zsX64xm!?N00W?ND?X+@9)0R-!w|~=s0_~nnEpP0j#33qVn zA9}RsgQ||v>ZxIt14fVHLV1szhag!jV-N>>j_&tdOa|ogv(%5DUU#n3_-hFX4JlXm<9WgnPj4#&>P`HeHo~>>|lxVoK1?fEPXzb)0 zK0GD-FfjlAv3R1i@Kpo9bajub-=6Bh?pXJB675aO*Dj@Vu|U!@U#y)bC?|2IuFhEP zw#a>Ymw990CZd|@Ir9{@ix-_z$g(^yAr#5tvDB3Dl$QVpvA-zai0tklpf&W|Qv*P7 zU9!lY1C+=m9nlQ1UF87CLK3UwY|;!N-d;FY1a(EbW|fTvMt) z3WQ55G4c8@z$x4Z185tbM~G*MOG{Za=ch%6(E+(>h}!MIA}ZOuWjoRb!;o9mbo|cK zf^H~ALy@30hUtO72_YT`q|10XSUQQ1FpkqMrDHkP?P^K^|5eDKtB7Ap{y7mr-m$TC&aeimHmk8JWQPCFOLM!V4j$B-$eY8`|0OU#V{Ey~i`Z!$T;IIw^Gg=mcCnMR@DRXDc-A@K?Py_qf0o6I@bEUR zaz|q4&1D!_2ouQ-n$pTcymJLB3~vAyQk1Z%v1NIZVW26`4G-|qzKtB@#ou-nyC+N- z^f%oRoOpoh#|~~VqQDM3ot*;wDzf|gOMo8RYB~G^1R0o8JD5ri=ZS+ZzJVq-*ma;N zqSFms(s03{C<<-CrM-QYWHS}Qlfc`QIlEn>7s0J z$5b*7rwe_IixtkLYcei=a?thoGU`z;cQT$ndciJz9o{2b{^B;wQz1%VZ+m|g$_Beh zw5unqPy=DL{)GR=SY7yL3gRiHV-5|WSyx0CATCUSZ0*&|yM zR^rwRkpImgIT2hmb2x>zut>4B{EY{alt{{%a$Vc>alb-~{dO@V`-7IcpEPky(o{?~ zrCR3A!$q_fkZ@**{HlpcuBBgoyANp@RAo^3EJ1Ss0(p$169dlN64QjqVp)-}He>@g zzEXK;NG0LR7j=$tOeEi!RK+6;$%YJH1?V4DRxhg6CAff`ikejhSvAKw&`g_&^B-?Q8syumTRB{v@&&<36oz(8eoCFTwL??2tLZb@=Ckby`a*&%jcy1VE zx;jKfX=->=*G!vZ1NXLAJslU`G+A_vzEeaQyJRTaBpEgG~qr!%HjIh%YEs&^gr5J-65CmR5^uVT$EVlB!pBkziOFa$x+ zUe|yO4<@c8i@kiGbcJ5vE!J|Hxpq~mAQ^_F`6T_18gl{6L}p!e!|y$b2w&2stWj5cuK^hYsve1_}%Jz%O)^sF}w zNa!L3N(J35YV=DsbnadZx7Hdd8;nNv3%+I0S3Ig}y38&+v=~0eKRobGnh;OuU=xvy zmPNziJc`+C1r$jo{$$N4*HhCHVtwj-v6-$=(ZNKX&t62fdL zg{xt2Z~y)4`a#I~?!Sw6-wr5oK~)vS6@&&%$e)W?H}+ZA>kzylyTkKPWN%L)N!|~- z==?#THM=q<|AE?6Ry2E`B(N0Jzcfk4kFN<#fp!w&x+x9nVxR2aq{F{!sX7w-q-d^hU0~ZTXrF< z3^_rw?zH!IDAi;MKJFz;$lH=b+NE_$o#kyf97z|S@zMcDIu?_**zxtYM4M;GvtSMg zK8JrLtm7@*SP!z^6t2KyIndR;t}~TrP6P(OBAJG)Gco5OD>XP(p*63vijnr5T8!m> z0fEegZdF;dh0Du4n2XhnXMBE^7ohNb^6kBQk9N)${;6D9yLv;zOk2)iMr!kq(4p#wjd9e##_J0WL;u3e>^tzgoQ$2}d z2?adpD_*`T2?XR0U_iToAAaxQ2o5O;Km?N#-SV?6FPZqu%gc&eMKrHm9OtQNwUIEj zr()Vnn`U)Cop6nP$7Gql5CdQw3EDJ}!?*ERGu>qzPEFU^Ncyb$E)zg2`h4t$2)ne~?2OD*(nNk8vP}z3 zGeLpDv*eiQOfkb=#$IMgxiq4}=l3V3AA|4_uahk0qiOt+TmO_A?|+l|)!uqMANESx z)4Y3kWc@(y;?MZ+wQTR@D?<;2ISC{g$CHdh9(?lGSR6DpQf4D*LxEcyF0_e#Ran3j zJEwCEQc|CaHEADABqQn=vm!uZkoFvvD_dp-15qn(J&BTJ#3T=#%2HX#Y*f;)VoswZ z3ds^MB>Bd5oO9^MrZC}q!a$@2)ZMG_Vkzd$%}w=t_wJ2<6|rw)&D14|06>uM$w&KXxeVX4DA%c@ji$LFp^~*0AyEB(%VyC_r5wO)lCDDb4ZIHshaJ z{uKYa1D^^4A&bGg{QU3ahQ-GqkzZ|R59s4HL5xEIn2zsr+M})Lr!kQ82A+YVb|^aF z%P(r&cO;t4=ETy!%|iWM$Lz!^N{=`HhX~SsOx0&7aj34(9!>=)ec~|gFT6!uT9h95 zIsHXh5PNkWY{oS?rtMJcn(9fK@%hPO22Z${@z5Y?;yN*_4+Nx9jDjo*d@3dChu;J5 zO?qA}6}o)*kYK>|-vg-6a_+0+)$FCdb5&J1Ybe_qlTUw(52 zN*1>wZY>{)%7XEzdx~{)`0{{U@~;3AmBwUh6I$6S3*UZuWZvaR6mmo_j!_j)H_=SA zk)G$;dcE>?F@fA_zX2~SbKMUu{Z>FzL8q-ku|GgugCNq)o6yo^G4um%Zpy#0yk~>- zB<4ZJmXtUKoi;b`8GMaMhY|K~OgM`k{~rkIJ*_;X-B_GOk7V$l>6)AJTz`99zlqjq-bqP}l3FvsT|7R?(Aep;0nOlaQ`ya( zkXvG=N@3`6cYDAVCeaQXs6H%NHX5iI67ozENi{U~F(eqXM6$#PpN^3iK@9_b64Llm z3Tm7amQkg-DoDTw)K&EdyOI|02oaaUZ3U-2;xLR>m z?EEetyB{mPAZFmNhsiykyZFQAGkd9s^J`-1+DC7=;T!e3212>|b_GtYswW?CXb1fT z!6~5Yu$p4D0}e1-A<{Y&c=0S`J^fdiHJnkv8^#@SPUtg5Nc&QoA(u$P)^v0T(DwB4 z^&0-u7S)=3qg$chv3yyRNRgpqGi$b=u`3P&t0OUWVX$_crU)Z%`bCyDn zATfi61&!X)`3Lm*orH>FND6lsV7&-*v4XlxP=y2B)jV<>he0RVT^&hIrqf5s={x9%Jbb>01^cV%;5a5^(4(I+*tczEPEd32LBhG1Kb-B9B zT$}1maUyhpC!V$BYn7uqD{n^o`L8 z4~JY^e!FR-vf42t7c{Et8BrF6!o+rXSACu7Vo4W;FrbjI$C^16uQ&%>1$0-bJ!7k7 ziBu;YVJA0~D#4{{Qc8i6WhUwlktzdx1jYyUb?FXZKARK)l5#E@ ze73t0sKAPtLzetpOYLFu{O>u4XMolHPk}$p#e)o#12jC&M#akvbO@?!3o}I?YMyNK zjGw1FZbrPR&u_zoHvZJ1_?-pD2S|Y-gX0+NbhyOKF7#5ntX}~e9=cdYHjl1LhmrW$ z3Cs+1PE{`Zmw=5bO;kR^L4D*Ny3nbhjBwlMzD{j4uQ95zo%O(Hz31AJ#{_Grcq% zleM9supqcayl-f(thYOpoAv}Hp!765U&nygxeo{%+dJ$&we2my3Pf2ltwJtCm6al{ z8s?Ila)aoBMUp1L;;kBHKI)E;(*!da8$&P}B%Gk6yz83&qhN0gT3R17+l10$+u124 zzq88A7JvK8lJlQ9W06enuiHMh6X06nCpS%mL^S^%4jPxS?054hUKceDAEqye=2YKH z$*n+IS~wU<4x~dK6pp#NRlMxz%9O^*JiCSP!=H>A1K9$vv! zMw}Cc6#FY1^QNy~g&h|*E7zXg2CA zQLen_lC7}lJ=7>0p9O42HV7L^;+Mu@dcV#1Oqg1rmupkyFge9!361lO9Fjh!7K^+D z0Tk@!)zzpq;Kka1*2EOe7WCG3#Lcs%Pj4<+FvS)LkGvedyQ(=PN-c&6H+#_qJx|9? zG#Z@!-Z66Vgc5v_FBeWZ-SamdVm3yDesg?ARbh9rw5F{1W)VbK;9hSSuNT+pvF)vI zRPMux&fT%M_m^lN-P;mYA9E?I(V#f-4=}$^v~dS3TPA+@Fiq*^|I?tw&-t3XF)#u; z-wGvxe*J}CQyK!4v{(!z~usN(-jD|Mlb17bv@oM3T z@5H2~V@jJrzZ-Em1Rn-Q zin+yp;#nXg_>BN^-0mZS{^2%s{#%$?D4?-{$2zjp#y^)X<^kjGj1-ip;L}!{VYUDM z^176jfS`0EffwJ*R%Yd&7PsG139knLy39o^wwma4b#^lJH@6T9sZT3sItR4|AxBm>@1i zaOe8s_ZQBFOAeNTU_q4#cC@<9`k1l8y6n4xf=ORirS1qfenG_<#a>=+#gQLg3s|sP zk&s=cSdSx$y@jJHDfGdjnu~;`uXJxZ+F5tZt<$XQPGR_FYlEHgK>2?iE5@ZCRHMm_ zNsAe{ZC08RPwf2)eTk~L^Fwx0fxN?7Mz0gRLhM2xyy84mt9zIae(uxjtkajEAiIN! zg20-XQW)}3fuC&Er21Mnr$_51_68p8?GJMut#rEX6-F}P3_KD>#%#G#=hyyfSuyv zpNUWkL9MXnvZt{VA+4!Q0^*1~#asc~(05VDLpy!6Y{lb5Rax@0gzxF$H>Wjp4{i8N zM(Tqd+s#1AK(X=$#&krIpsU>97z7{EL}&b>Ub|hXkafJQu7`jlA1Y8FZ37f&zF3~% zO3dCd?M*e@SrUJ7hkL4hw|wQTpI8|4uN*Ojfl>k~1m|cnbe>ja5(|T#wfHD@-61av z6xX1%bMxN9yZb4-#aOt-V%xe+i;U`rsglPK%&)sXvH6cutp3elc_{m_WaO}L$4}{% zwiO*U_=?L7{EC4Ib}59$E6%rO-zV1x@xl&qDc3#8$EEJ(_*MXf&S@{muq zYxPBLZf?WUw5c554xjvxm%rni>YQOlIO)d1oSXtyM}b{BHQk`q?MNUs2jYrrI<+eS zaTmNx1B}|~xAhO#D?wZ&7m*mOgCi+O%bd^uE3`C^1+RrLH+6R6409kp)LSo0XiKul z?DLa1+k6NT`~_7j85pMhNS?rrUBCn!=**wz2n4i4=TYLuUo`Q4eUv9=Glot+jMKh) zlBONEdjU^=7;n$QfWLqRZ?5{im1|*}UaO(x+qK|HyqFi99oZ)@GX}- z&KS@g+-K>$b*LMEWhY&2W?hIY{OO+xit%43%jc=?Z z@7cFp$016j;7t9Eam`6y`z9DT(|n>G_G^vBcyAjT?tzJ|oY9d5?}((J({uOV0W9FY zG0nsVt)j_aXXPpy2X0m#bIA_F{Vn0F4PASxsUSMTf+OFB>mrJWxDVc zwIY@rFfAwYMwZwnN;yH&{BQ6Vm;g19si{HzKv|?L4cFBJdt>`mc z0K4y}msRDLm>0ucRkAE;!@^?R;bj{+EhjJv8lM89IXE_pMG(YU5-c^AsA%ze?thWi zSSt#e(YxJgmEUEZkj~{ki z4ECwl7KaDRM1KRVTeX`6U8dH|;A=e7^H^h{pGr1Em^`L19`@iOrz{`^gg7|(s+(L~ zPix&Ce_W#WjW*ri$duvdKrT1`xS9FdKonEHVkG_bMkXnoJiGL#ry z<&C`GNlTN~jb)j8(OoF6^BfPj2p=9DIj#1m0bVZnws`Ny`}gl(n}~nwD#!B7m`Gq9 zVmEy)q_b-8dDIB0I4aRGx_juSYhmcn1D&v8$L5M9E4W7NP}Z_jP`Y~-Pl5>a7@oV` z7<$MQ`|Ti#5x$a~38oVxAi|+03`MEK-ar&Ce z7P9SH?H-r)MY)K!F!=cY1i?;T%!80kCJ;O+!T$KfF$Xa4_5M`>pwmmn^P;uA{np9# zJ(A-r&TG8<1#>Y6`ny_)YPxizKx&I!i#zL~maJ)m^giB2x8FEZ`N%q??~r#xtmxrB zx_^c+Ckl_+a|%rPvN!8=dxzs0X~X1g*nCt ppp`w~_ps)s!V++p9XtPRN)O}Xd? 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 literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/.spiceinit b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/.spiceinit new file mode 100644 index 00000000..02b902fb --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/.spiceinit @@ -0,0 +1,30 @@ +* a custom spiceinit file for IHP-Open-PDK + +* export PDK_ROOT and PDK environmental variables first and add it to your .bashrc +* export PDK_ROOT= installation_specific_directory/IHP-Open-PDK +* export PDK=ihp-sg13g2 + +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice ) +setcs sourcepath = ( $sourcepath $PDK_ROOT/$PDK/libs.tech/ngspice/models $PDK_ROOT/ihp-sg13g2/libs.ref/sg13g2_io/spice ) +*echo $sourcepath + +*option tnom=28 +*option list + +* KLU solver still do not work correctly for every simulation +*option klu + +*option node +*option opts +*option warn=1 +*option maxwarns=10 +*option savecurrents + +*set ngbehavior=hsa +*set noinit + +* add OSDI +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/psp103_nqs.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/r3_cmc.osdi' +osdi '$PDK_ROOT/$PDK/libs.tech/ngspice/osdi/mosvar.osdi' + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/conditions.yaml b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/conditions.yaml new file mode 100644 index 00000000..111ef545 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/conditions.yaml @@ -0,0 +1,8 @@ +DUT_path: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice +N: 0 +PDK: ihp-sg13g2 +PDK_ROOT: /home/pedersen/IHP-Open-PDK +corner: tt +filename: diff_oscillator_tb +simpath: /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0 +temperature: '27' diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/diff_oscillator_tb.sch new file mode 100644 index 00000000..94d8601e --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/diff_oscillator_tb.sch @@ -0,0 +1,65 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 760 -230 760 -210 {lab=vdd} +N 720 -230 720 -210 {lab=gnd} +N 830 -340 850 -340 {lab=Voplus} +N 830 -300 850 -300 {lab=Vominus} +N 390 -280 390 -250 {lab=GND} +N 390 -370 390 -340 {lab=vdd} +C {opin.sym} 850 -340 0 0 {name=p3 lab=Voplus} +C {opin.sym} 850 -300 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 10 -1170 0 0 {name=transient_tb only_toplevel=false +value=" +.param temp=27 +* Keep this if your manual run has it — parity matters + +.ic V(Voplus)=1.2 +.control +* Stability & parity options +set noaskquit +set numdgt=12 + +* Save vectors and run +save all +op +write diff_oscillator_tb.raw +set appendwrite +tran 10p 2n 160p + +* Define explicit vectors (avoid V(...) on calculated vectors) +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +* --- Main file that CACE reads: 2 columns (time, vo_diff) --- +set wr_singlescale +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/diff_oscillator_tb_0.data vo_diff + +* --- Extra debug file (CACE ignores): 4 columns w/ names --- +set wr_vecnames +wrdata /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/debug_0.dat time vo_p vo_m vo_diff +unset wr_vecnames + +write diff_oscillator_tb.raw +.endc +"} +C {iopin.sym} 760 -210 0 0 {name=p1 lab=vdd} +C {devices/code_shown.sym} 10 -510 0 0 {name=MODEL1 only_toplevel=true +format="tcleval( @value )" +value=" +.lib /home/pedersen/IHP-Open-PDK/ihp-sg13g2/libs.tech/ngspice/models/cornerMOSlv.lib mos_tt + +.include /home/pedersen/projects/IHP-AnalogAcademy/modules/module_4_type_2_PLL/diff_Roscillator/xschem/simulations/schematic/diff_ring_oscillator.spice + +.temp 27 +" +} +C {diff_ring_oscillator.sym} 740 -320 0 0 {name=x1} +C {iopin.sym} 720 -210 2 0 {name=p2 lab=gnd} +C {vsource.sym} 390 -310 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 390 -250 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 390 -370 2 0 {name=p5 sig_type=std_logic lab=vdd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/diff_oscillator_tb_0.data b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/diff_oscillator_tb_0.data new file mode 100644 index 00000000..b960892f --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/diff_oscillator_tb_0.data @@ -0,0 +1,185 @@ + 1.628000000000e-10 -2.292252894521e-02 + 1.728000000000e-10 -1.721878995476e-01 + 1.828000000000e-10 -3.003971530482e-01 + 1.928000000000e-10 -4.209827688535e-01 + 2.028000000000e-10 -5.322027853128e-01 + 2.128000000000e-10 -5.791583227387e-01 + 2.228000000000e-10 -5.110033194175e-01 + 2.328000000000e-10 -3.457576287601e-01 + 2.428000000000e-10 -1.607196798900e-01 + 2.528000000000e-10 1.365547887835e-02 + 2.628000000000e-10 1.638016925338e-01 + 2.728000000000e-10 2.919305498126e-01 + 2.828000000000e-10 4.124239288433e-01 + 2.928000000000e-10 5.263166298848e-01 + 3.028000000000e-10 5.824106149717e-01 + 3.128000000000e-10 5.252174273130e-01 + 3.228000000000e-10 3.651459872532e-01 + 3.328000000000e-10 1.795084214438e-01 + 3.428000000000e-10 3.226267600252e-03 + 3.528000000000e-10 -1.496702035742e-01 + 3.628000000000e-10 -2.792887178681e-01 + 3.728000000000e-10 -4.000019021719e-01 + 3.828000000000e-10 -5.160190704246e-01 + 3.928000000000e-10 -5.816500208715e-01 + 4.028000000000e-10 -5.372846837038e-01 + 4.128000000000e-10 -3.848834507397e-01 + 4.228000000000e-10 -1.993014483184e-01 + 4.328000000000e-10 -2.125168120944e-02 + 4.428000000000e-10 1.345897939599e-01 + 4.528000000000e-10 2.660516467047e-01 + 4.628000000000e-10 3.871267719337e-01 + 4.728000000000e-10 5.047282820024e-01 + 4.828000000000e-10 5.793062880329e-01 + 4.928000000000e-10 5.480670992790e-01 + 5.028000000000e-10 4.046247574272e-01 + 5.128000000000e-10 2.194567139019e-01 + 5.228000000000e-10 3.978854030163e-02 + 5.328000000000e-10 -1.190134240033e-01 + 5.428000000000e-10 -2.525512770557e-01 + 5.528000000000e-10 -3.741228468393e-01 + 5.628000000000e-10 -4.927999203803e-01 + 5.728000000000e-10 -5.755235861382e-01 + 5.828000000000e-10 -5.574109039140e-01 + 5.928000000000e-10 -4.240101965476e-01 + 6.028000000000e-10 -2.397070733991e-01 + 6.128000000000e-10 -5.859311656156e-02 + 6.228000000000e-10 1.031069489747e-01 + 6.328000000000e-10 2.389202178782e-01 + 6.428000000000e-10 3.611164053835e-01 + 6.528000000000e-10 4.804511503358e-01 + 6.628000000000e-10 5.703927182427e-01 + 6.728000000000e-10 5.651995411624e-01 + 6.828000000000e-10 4.426884649777e-01 + 6.928000000000e-10 2.598493744117e-01 + 7.028000000000e-10 7.747657769560e-02 + 7.128000000000e-10 -8.699618736653e-02 + 7.228000000000e-10 -2.252447884331e-01 + 7.328000000000e-10 -3.481970680463e-01 + 7.428000000000e-10 -4.678842164117e-01 + 7.528000000000e-10 -5.640875390474e-01 + 7.628000000000e-10 -5.714336476059e-01 + 7.728000000000e-10 -4.604185473907e-01 + 7.828000000000e-10 -2.797750138125e-01 + 7.928000000000e-10 -9.633858138806e-02 + 8.028000000000e-10 7.073777814255e-02 + 8.128000000000e-10 2.115493094061e-01 + 8.228000000000e-10 3.353876046363e-01 + 8.328000000000e-10 4.552524923411e-01 + 8.428000000000e-10 5.567938616314e-01 + 8.528000000000e-10 5.762058661922e-01 + 8.628000000000e-10 4.770908355033e-01 + 8.728000000000e-10 2.994880974607e-01 + 8.828000000000e-10 1.151828864331e-01 + 8.928000000000e-10 -5.431208395594e-02 + 9.028000000000e-10 -1.977861602727e-01 + 9.128000000000e-10 -3.226531529049e-01 + 9.228000000000e-10 -4.427347421602e-01 + 9.328000000000e-10 -5.488327643130e-01 + 9.428000000000e-10 -5.797041909504e-01 + 9.528000000000e-10 -4.927265308101e-01 + 9.628000000000e-10 -3.191097454976e-01 + 9.728000000000e-10 -1.342181141771e-01 + 9.828000000000e-10 3.744993884902e-02 + 9.928000000000e-10 1.836370942174e-01 + 1.002800000000e-09 3.096940812427e-01 + 1.012800000000e-09 4.298817640101e-01 + 1.022800000000e-09 5.397599749883e-01 + 1.032800000000e-09 5.817861936754e-01 + 1.042800000000e-09 5.074041226008e-01 + 1.052800000000e-09 3.388664774534e-01 + 1.062800000000e-09 1.535104608579e-01 + 1.072800000000e-09 -2.024845785028e-02 + 1.082800000000e-09 -1.692491421902e-01 + 1.092800000000e-09 -2.967013757932e-01 + 1.102800000000e-09 -4.171073443425e-01 + 1.112800000000e-09 -5.301213512093e-01 + 1.122800000000e-09 -5.826820342472e-01 + 1.132800000000e-09 -5.208927839223e-01 + 1.142800000000e-09 -3.582851623030e-01 + 1.152800000000e-09 -1.726179318326e-01 + 1.162800000000e-09 3.001935102304e-03 + 1.172800000000e-09 1.548738889534e-01 + 1.182800000000e-09 2.838707642593e-01 + 1.192800000000e-09 4.044922095117e-01 + 1.202800000000e-09 5.198180562761e-01 + 1.212800000000e-09 5.821632166084e-01 + 1.222800000000e-09 5.332184734218e-01 + 1.232800000000e-09 3.779624918474e-01 + 1.242800000000e-09 1.922988577092e-01 + 1.252800000000e-09 1.486703325848e-02 + 1.262800000000e-09 -1.399496932386e-01 + 1.272800000000e-09 -2.707197504860e-01 + 1.282800000000e-09 -3.916660474216e-01 + 1.292800000000e-09 -5.087606367752e-01 + 1.302800000000e-09 -5.803016232270e-01 + 1.312800000000e-09 -5.444413186477e-01 + 1.322800000000e-09 -3.977418947932e-01 + 1.332800000000e-09 -2.123689566689e-01 + 1.342800000000e-09 -3.326433605185e-02 + 1.352800000000e-09 1.245198660865e-01 + 1.362800000000e-09 2.572914801001e-01 + 1.372800000000e-09 3.786884397038e-01 + 1.382800000000e-09 4.970287842619e-01 + 1.392800000000e-09 5.770140673465e-01 + 1.402800000000e-09 5.543068732670e-01 + 1.412800000000e-09 4.172944393038e-01 + 1.422800000000e-09 2.326135914048e-01 + 1.432800000000e-09 5.200031629165e-02 + 1.442800000000e-09 -1.087117173734e-01 + 1.452800000000e-09 -2.436934942172e-01 + 1.462800000000e-09 -3.656702152799e-01 + 1.472800000000e-09 -4.848025482630e-01 + 1.482800000000e-09 -5.723385369588e-01 + 1.492800000000e-09 -5.626458033125e-01 + 1.502800000000e-09 -4.362543636943e-01 + 1.512800000000e-09 -2.528118155371e-01 + 1.522800000000e-09 -7.087265053387e-02 + 1.532800000000e-09 9.266186071927e-02 + 1.542800000000e-09 2.300274395412e-01 + 1.552800000000e-09 3.527140919248e-01 + 1.562800000000e-09 4.722911338649e-01 + 1.572800000000e-09 5.664223472519e-01 + 1.582800000000e-09 5.694169369289e-01 + 1.592800000000e-09 4.543351006071e-01 + 1.602800000000e-09 2.728185799251e-01 + 1.612800000000e-09 8.974653097500e-02 + 1.622800000000e-09 -7.645342918533e-02 + 1.632800000000e-09 -2.163412758022e-01 + 1.642800000000e-09 -3.398672125281e-01 + 1.652800000000e-09 -4.596702740436e-01 + 1.662800000000e-09 -5.594547917655e-01 + 1.672800000000e-09 -5.746885318592e-01 + 1.682800000000e-09 -4.713817902736e-01 + 1.692800000000e-09 -2.925998303757e-01 + 1.702800000000e-09 -1.085902848019e-01 + 1.712800000000e-09 6.009271011551e-02 + 1.722800000000e-09 2.026110402562e-01 + 1.732800000000e-09 3.271137583800e-01 + 1.742800000000e-09 4.470366757261e-01 + 1.752800000000e-09 5.516024260258e-01 + 1.762800000000e-09 5.785682691472e-01 + 1.772800000000e-09 4.872997263391e-01 + 1.782800000000e-09 3.121706971956e-01 + 1.792800000000e-09 1.275093354174e-01 + 1.802800000000e-09 -4.339966691138e-02 + 1.812800000000e-09 -1.885914489076e-01 + 1.822800000000e-09 -3.142192224600e-01 + 1.832800000000e-09 -4.343522534326e-01 + 1.842800000000e-09 -5.430041650422e-01 + 1.852800000000e-09 -5.811837349212e-01 + 1.862800000000e-09 -5.023856761573e-01 + 1.872800000000e-09 -3.319418855515e-01 + 1.882800000000e-09 -1.467398868003e-01 + 1.892800000000e-09 2.631801497144e-02 + 1.902800000000e-09 1.743391836774e-01 + 1.912800000000e-09 3.012879943958e-01 + 1.922800000000e-09 4.215592295324e-01 + 1.932800000000e-09 5.336096259357e-01 + 1.942800000000e-09 5.825911854269e-01 + 1.952800000000e-09 5.163685478590e-01 + 1.962800000000e-09 3.514506166310e-01 + 1.972800000000e-09 1.658449567189e-01 + 1.982800000000e-09 -9.123570295392e-03 + 1.992800000000e-09 -1.599641527363e-01 + 2.000000000000e-09 -2.536669268561e-01 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/diff_ring_oscillator.sym b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/diff_ring_oscillator.sym new file mode 100644 index 00000000..e632b156 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/run_0/diff_ring_oscillator.sym @@ -0,0 +1,27 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=primitive +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 70 -20 90 -20 {} +L 4 70 20 90 20 {} +L 7 20 70 20 90 {} +L 7 -20 70 -20 90 {} +B 5 87.5 -22.5 92.5 -17.5 {name=Voplus dir=out} +B 5 17.5 87.5 22.5 92.5 {name=vdd dir=inout} +B 5 -22.5 87.5 -17.5 92.5 {name=gnd dir=inout} +B 5 87.5 17.5 92.5 22.5 {name=Vominus dir=out} +A 4 -1.666666666666714 1.666666666666714 71.68604389202189 287.5924245621816 360 {} +A 4 -30 27.5 40.69705149024927 42.51044707800085 94.97910584399833 {} +A 4 30 -27.5 40.69705149024927 222.5104470780009 94.97910584399833 {} +T {@symname} -40.5 -56 0 0 0.1 0.1 {} +T {@name} -40 -47 0 0 0.1 0.1 { +} +T {Voplus} 65 -24 0 1 0.2 0.2 {} +T {vdd} 5 64 2 1 0.2 0.2 {} +T {gnd} -35 64 2 1 0.2 0.2 {} +T {Vominus} 65 16 0 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/simulation_summary.csv b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/simulation_summary.csv new file mode 100644 index 00000000..8f65c459 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/simulation_summary.csv @@ -0,0 +1,2 @@ +run,time_axis,vo_diff,frequency +run_0,"[1.628e-10, 1.728e-10, 1.828e-10, …]","[-2.292e-02, -1.722e-01, -3.004e-01, …]",5.414e+09 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/simulation_summary.md b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/simulation_summary.md new file mode 100644 index 00000000..a45b7af4 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/parameters/Frequency/simulation_summary.md @@ -0,0 +1,5 @@ +# Simulation Summary for Freq + +| run | time_axis | vo_diff | frequency | +| :-- | --------: | ------: | --------: | +| run_0 | [1.628e-10, 1.728e-10, 1.828e-10, …] | [-2.292e-02, -1.722e-01, -3.004e-01, …] | 5.414e+09 | diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/summary.md b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/summary.md new file mode 100644 index 00000000..a5320ec1 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/runs/RUN_2025-11-11_17-40-06/summary.md @@ -0,0 +1,9 @@ + +# CACE Summary for diff_ring_oscillator + +**netlist source**: schematic + +| Parameter | Tool | Result | Min Limit | Min Value | Typ Target | Typ Value | Max Limit | Max Value | Status | +| :------------------- | :------------------- | :-------------- | ---------: | -----------: | ---------: | -----------: | ---------: | -----------: | :------: | +| Freq | ngspice | frequency | 4.2 GHz | 5.414 GHz | 5.4 GHz | 5.414 GHz | 7.1 GHz | 5.414 GHz | Pass ✅ | + diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/testbench/diff_oscillator_tb.sch b/modules/module_4_type_2_PLL/diff_Roscillator/testbench/diff_oscillator_tb.sch index 96a4c078..40030ac1 100644 --- a/modules/module_4_type_2_PLL/diff_Roscillator/testbench/diff_oscillator_tb.sch +++ b/modules/module_4_type_2_PLL/diff_Roscillator/testbench/diff_oscillator_tb.sch @@ -4,16 +4,16 @@ K {} V {} S {} E {} -B 2 1250 -560 2050 -160 {flags=graph -y1=-0.59 -y2=1.3 +B 2 1060 -700 1860 -300 {flags=graph +y1=-0.023 +y2=0.7 ypos1=0 ypos2=2 divy=5 subdivy=1 unity=1 -x1=0 -x2=2e-09 +x1=2.2231151e-07 +x2=2.2291988e-07 divx=5 subdivx=1 xlabmag=1.0 @@ -26,64 +26,54 @@ color="4 7 12" node="voplus vominus vo_diff"} -N 650 -240 700 -240 {lab=#net1} -N 650 -160 700 -160 {lab=#net2} -N 850 -240 900 -240 {lab=#net3} -N 850 -160 900 -160 {lab=#net4} -N 550 -290 550 -270 {lab=vdd} -N 750 -290 950 -290 {lab=vdd} -N 950 -290 950 -270 {lab=vdd} -N 750 -290 750 -270 {lab=vdd} -N 550 -290 750 -290 {lab=vdd} -N 550 -130 550 -110 {lab=GND} -N 550 -110 750 -110 {lab=GND} -N 750 -130 750 -110 {lab=GND} -N 750 -110 950 -110 {lab=GND} -N 950 -130 950 -110 {lab=GND} -N 480 -240 500 -240 {lab=Voplus} -N 480 -330 1070 -330 {lab=Voplus} -N 1050 -240 1070 -240 {lab=Voplus} -N 480 -330 480 -240 {lab=Voplus} -N 1070 -330 1070 -240 {lab=Voplus} -N 1070 -160 1070 -70 {lab=Vominus} -N 1050 -160 1070 -160 {lab=Vominus} -N 480 -160 500 -160 {lab=Vominus} -N 480 -160 480 -70 {lab=Vominus} -N 400 -130 400 -90 {lab=GND} -N 480 -70 1070 -70 {lab=Vominus} -N 400 -230 400 -190 {lab=vdd} -C {differential_core.sym} 650 -200 0 0 {name=x1} -C {differential_core.sym} 850 -200 0 0 {name=x2} -C {differential_core.sym} 1050 -200 0 0 {name=x3} -C {lab_pin.sym} 950 -290 2 0 {name=p1 sig_type=std_logic lab=vdd} -C {vsource.sym} 400 -160 0 0 {name=V1 value=1.2 savecurrent=false} -C {gnd.sym} 950 -110 0 0 {name=l1 lab=GND} -C {gnd.sym} 400 -90 0 0 {name=l2 lab=GND} -C {lab_pin.sym} 400 -230 2 0 {name=p2 sig_type=std_logic lab=vdd} -C {opin.sym} 1070 -330 0 0 {name=p3 lab=Voplus} -C {opin.sym} 1070 -70 2 1 {name=p4 lab=Vominus} -C {code_shown.sym} 0 -450 0 0 {name=transient_tb only_toplevel=false +N 350 -300 350 -270 {lab=vdd} +N 350 -210 350 -180 {lab=GND} +N 600 -290 600 -270 {lab=GND} +N 640 -290 640 -270 {lab=vdd} +N 710 -400 740 -400 {lab=Voplus} +N 710 -360 740 -360 {lab=Vominus} +C {opin.sym} 740 -400 0 0 {name=p3 lab=Voplus} +C {opin.sym} 740 -360 2 1 {name=p4 lab=Vominus} +C {code_shown.sym} 10 -1120 0 0 {name=transient_tb only_toplevel=false value=" .include diff_oscillator_tb.save .param temp=27 .ic V(Voplus)=1.2 .control -save all +set noaskquit +set numdgt=12 + +* Save & simulate +save all op write diff_oscillator_tb.raw set appendwrite -tran 10p 2n +tran 10p 1u 160p save all -let vo_diff = v(Voplus) - v(Vominus) -write diff_oscillator_tb.raw +* Explicit vectors +let vo_p = v(Voplus) +let vo_m = v(Vominus) +let vo_diff = vo_p - vo_m + +* --- Main output (mimic CACE naming, just to compare) --- +set wr_singlescale +wrdata differential_output.txt vo_diff + +* --- Extra debug (like we did for CACE) --- +set wr_vecnames +wrdata manual_debug.dat time vo_p vo_m vo_diff +unset wr_vecnames + +write diff_oscillator_tb.raw .endc "} -C {devices/code_shown.sym} 0 -110 0 0 {name=MODEL only_toplevel=true +C {devices/code_shown.sym} 10 -460 0 0 {name=MODEL only_toplevel=true format="tcleval( @value )" value=".lib cornerMOSlv.lib mos_tt -"} -C {launcher.sym} 1310 -70 0 0 {name=h3 +" +} +C {launcher.sym} 1120 -240 0 0 {name=h3 descr=SimulateNGSPICE tclcommand=" # Setup the default simulation commands if not already set up @@ -107,11 +97,17 @@ write_data [save_params] $netlist_dir/[file rootname [file tail [xschem get curr xschem netlist simulate "} -C {devices/launcher.sym} 1310 -110 0 0 {name=h1 +C {devices/launcher.sym} 1120 -280 0 0 {name=h1 descr="OP annotate" tclcommand="xschem annotate_op" } -C {launcher.sym} 1310 -30 0 0 {name=h5 +C {launcher.sym} 1120 -190 0 0 {name=h5 descr="load waves" tclcommand="xschem raw_read $netlist_dir/diff_oscillator_tb.raw tran" } +C {vsource.sym} 350 -240 0 0 {name=V1 value=1.2 savecurrent=false} +C {gnd.sym} 350 -180 0 0 {name=l2 lab=GND} +C {lab_pin.sym} 350 -300 0 0 {name=p2 sig_type=std_logic lab=vdd} +C {diff_ring_oscillator.sym} 620 -380 0 0 {name=x1} +C {gnd.sym} 600 -270 0 0 {name=l1 lab=GND} +C {lab_pin.sym} 640 -270 0 1 {name=p1 sig_type=std_logic lab=vdd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/testbench/diff_oscillator_tb.sym b/modules/module_4_type_2_PLL/diff_Roscillator/testbench/diff_oscillator_tb.sym new file mode 100644 index 00000000..35d2073e --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/testbench/diff_oscillator_tb.sym @@ -0,0 +1,14 @@ +v {xschem version=3.4.6 file_version=1.2} +K {type=subcircuit +format="@name @pinlist @symname" +template="name=x1" +} +T {@symname} -99 -6 0 0 0.3 0.3 {} +T {@name} 135 -32 0 0 0.2 0.2 {} +P 4 5 130 -20 -130 -20 -130 20 130 20 130 -20 {} +B 5 147.5 -12.5 152.5 -7.5 {name=Voplus dir=out} +L 4 130 -10 150 -10 {} +T {Voplus} 125 -14 0 1 0.2 0.2 {} +B 5 147.5 7.5 152.5 12.5 {name=Vominus dir=out} +L 4 130 10 150 10 {} +T {Vominus} 125 6 0 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/testbench/python/freq.py b/modules/module_4_type_2_PLL/diff_Roscillator/testbench/python/freq.py new file mode 100644 index 00000000..5fe904f3 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/testbench/python/freq.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +import sys +import numpy as np +import matplotlib +matplotlib.use("Agg") # Use non-GUI backend for batch plotting +import matplotlib.pyplot as plt + +def main(): + if len(sys.argv) < 2: + print("Usage: python plot_diffout.py data.txt") + sys.exit(1) + + filename = sys.argv[1] + + # Load data (two columns: time, differential output) + data = np.loadtxt(filename) + t = data[:, 0] + y = data[:, 1] + + # Plot + plt.figure(figsize=(8,5)) + plt.plot(t, y, label="Differential Output") + plt.xlabel("Time (s)") + plt.ylabel("Differential Output (V)") + plt.title("Differential Output vs Time") + plt.legend() + plt.grid(True) + + # Save plot as PNG + outname = filename.replace(".txt", ".png") + plt.savefig(outname, dpi=300) + plt.close() + print(f"Saved plot as {outname}") + + # Estimate frequency using FFT + # Compute sampling interval + dt = np.mean(np.diff(t)) + fs = 1/dt # sampling frequency + + # FFT + Y = np.fft.fft(y - np.mean(y)) # remove DC component + freqs = np.fft.fftfreq(len(Y), d=dt) + + # Only positive frequencies + mask = freqs > 0 + freqs = freqs[mask] + Y = np.abs(Y[mask]) + + # Find frequency with maximum magnitude + freq_peak = freqs[np.argmax(Y)] + print(f"Estimated frequency: {freq_peak:.3e} Hz") + +if __name__ == "__main__": + main() diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/testbench/python/pn_spectrum.py b/modules/module_4_type_2_PLL/diff_Roscillator/testbench/python/pn_spectrum.py new file mode 100644 index 00000000..203f4622 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/testbench/python/pn_spectrum.py @@ -0,0 +1,186 @@ +#!/usr/bin/env python3 +""" +pn_batch.py + +Usage: + python pn_batch.py data1.txt data2.txt ... + +Input format: + - Two columns: time[s] v[t] + - Three columns: time[s] vp[t] vn[t] (script will use vp - vn) + +Outputs: + - ./spectrum/_phase_noise.png + - printed summary: carrier freq estimate, fs (after resample), record length, samples +""" + +import sys +from pathlib import Path +import numpy as np +import matplotlib.pyplot as plt +from scipy.signal import welch, butter, filtfilt +from scipy.interpolate import interp1d + +# --------- Parameters you can tweak ---------- +RESAMPLE = True # resample to uniform grid if input isn't uniform +TARGET_SAMPLES = 200000 # target samples when resampling (tradeoff mem / res) +LPF_BW = None # if None, autopick based on carrier (see code). Bandwidth for baseband LPF (Hz) +NPERSEG = None # if None, will choose based on record length (see code) +OVERLAP = 0.5 # fraction for Welch overlap +# ------------------------------------------------ + +def load_data(fname): + data = np.loadtxt(fname) + if data.ndim == 1 or data.shape[1] == 1: + raise ValueError("File must have 2 or 3 columns (time, v) or (time, vp, vn)") + t = data[:,0] + if data.shape[1] == 2: + v = data[:,1] + else: + v = data[:,1] - data[:,2] + return t, v + +def uniform_resample(t, v, target_samples=200000): + # build uniform grid from min->max with target_samples (bounded) + t0, t1 = float(t[0]), float(t[-1]) + dt_median = np.median(np.diff(t)) + if dt_median == 0: + raise ValueError("Median dt is zero: check the input file for repeated timestamps.") + N = min(target_samples, max(1024, int((t1 - t0) / dt_median))) + tu = np.linspace(t0, t1, N) + interp = interp1d(t, v, kind='cubic', bounds_error=False, fill_value="extrapolate") + vu = interp(tu) + return tu, vu + +def estimate_carrier_freq(t, v, fs_est=None): + # Quick FFT-based estimate (uses zero-padding for better resolution) + N = len(t) + i0, i1 = N//4, 3*N//4 + x = v[i0:i1] * np.hanning(i1-i0) + nfft = 1 << (int(np.ceil(np.log2(len(x)))) + 3) + X = np.fft.rfft(x, n=nfft) + freqs = np.fft.rfftfreq(nfft, d=(t[1]-t[0])) + mag = np.abs(X) + idx = np.argmax(mag) + # parabolic refine around peak + if 1 <= idx < len(mag)-1: + alpha = mag[idx-1] + beta = mag[idx] + gamma = mag[idx+1] + p = 0.5*(alpha - gamma)/(alpha - 2*beta + gamma) + peak_freq = (freqs[idx] + p*(freqs[1]-freqs[0])) + else: + peak_freq = freqs[idx] + return peak_freq + +def lowpass_iq(t, v, fc, fs_bb): + # Mix down to baseband using the estimated fc, then lowpass to fs_bb/2 + t = np.asarray(t) + carrier = 2*np.pi*fc*t + I = v * np.cos(carrier) + Q = -v * np.sin(carrier) + + nyq = 0.5 * (1.0/(t[1]-t[0])) + cutoff = min(0.5*fs_bb, nyq*0.9) + b, a = butter(4, cutoff/nyq) + I_f = filtfilt(b, a, I) + Q_f = filtfilt(b, a, Q) + + t_start, t_end = t[0], t[-1] + num = int(np.floor((t_end - t_start) * fs_bb)) + if num < 16: + raise ValueError("fs_bb too high or record too short for downsampling. Decrease fs_bb.") + tb = np.linspace(t_start, t_end, num) + I_interp = interp1d(t, I_f, kind='cubic')(tb) + Q_interp = interp1d(t, Q_f, kind='cubic')(tb) + return tb, I_interp, Q_interp + +def compute_phase_from_iq(I, Q): + phase = np.unwrap(np.arctan2(Q, I)) + return phase + +def phase_to_LdBcHz(phase, fs_bb, nperseg=None, overlap=0.5): + if nperseg is None: + nperseg = min(len(phase), 2**14) + noverlap = int(nperseg * overlap) + f, Pphi = welch(phase, fs=fs_bb, nperseg=nperseg, noverlap=noverlap, scaling='density', window='hann') + L = 10*np.log10(0.5 * Pphi) + return f, L + +def process_file(fname): + fname = Path(fname) + t, v = load_data(fname) + sort_idx = np.argsort(t) + t = t[sort_idx] + v = v[sort_idx] + + if RESAMPLE: + t_u, v_u = uniform_resample(t, v, target_samples=TARGET_SAMPLES) + else: + dt = np.diff(t) + if np.max(dt) - np.min(dt) > 1e-12: + t_u, v_u = uniform_resample(t, v, target_samples=TARGET_SAMPLES) + else: + t_u, v_u = t, v + + dt = t_u[1] - t_u[0] + fs = 1.0 / dt + T = t_u[-1] - t_u[0] + + fc = estimate_carrier_freq(t_u, v_u, fs_est=fs) + + if LPF_BW is None: + fs_bb = min(1e6, max(200000.0, fs/20)) + else: + fs_bb = max(1000.0, LPF_BW*4) + + nyq_orig = 0.5*fs + if fs_bb > nyq_orig*0.9: + fs_bb = nyq_orig*0.9 + + try: + tb, Ibb, Qbb = lowpass_iq(t_u, v_u, fc, fs_bb) + except Exception as e: + raise RuntimeError("IQ demod failed: " + str(e)) + + phase = compute_phase_from_iq(Ibb, Qbb) + p = np.polyfit(tb, phase, 1) + phase_dev = phase - np.polyval(p, tb) + + if NPERSEG is None: + nperseg = int(max(256, min(len(phase_dev), int(fs_bb * (T/8.0))))) + nperseg = 1 << int(np.floor(np.log2(nperseg))) + else: + nperseg = NPERSEG + + f, L = phase_to_LdBcHz(phase_dev, fs_bb, nperseg=nperseg, overlap=OVERLAP) + + outdir = Path("spectrum") + outdir.mkdir(parents=True, exist_ok=True) + out_png = outdir / (fname.stem + "_phase_noise.png") + + plt.figure(figsize=(6.5,4)) + plt.semilogx(f, L) + plt.xlim(max(1.0, f[1]), f[-1]) + plt.xlabel("Offset frequency [Hz]") + plt.ylabel("Phase noise [dBc/Hz]") + plt.title(f"{fname.name} fc~{fc/1e6:.6f} MHz fs_bb={fs_bb/1e3:.1f} kHz T={T*1e6:.3f} µs") + plt.grid(True, which='both', ls=':', alpha=0.6) + plt.tight_layout() + plt.savefig(out_png, dpi=150) + plt.close() + + print(f"{fname.name}: fc={fc:.3f} Hz, fs={fs:.1f} Hz, T={T:.6f} s, samples={len(t_u)}") + +def main(): + if len(sys.argv) < 2: + print("Usage: python pn_batch.py data1.txt data2.txt ...") + sys.exit(1) + for f in sys.argv[1:]: + try: + process_file(f) + except Exception as e: + print(f"Error processing {f}: {e}") + +if __name__ == "__main__": + main() diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/testbench/simulations/diff_oscillator_tb.save b/modules/module_4_type_2_PLL/diff_Roscillator/testbench/simulations/diff_oscillator_tb.save index 50debb58..235abce2 100644 --- a/modules/module_4_type_2_PLL/diff_Roscillator/testbench/simulations/diff_oscillator_tb.save +++ b/modules/module_4_type_2_PLL/diff_Roscillator/testbench/simulations/diff_oscillator_tb.save @@ -1,62 +1,62 @@ * Place this .save file with a .include line in your testbench -.save @n.x1.xm1.nsg13_lv_nmos[ids] -.save @n.x1.xm1.nsg13_lv_nmos[gm] -.save @n.x1.xm1.nsg13_lv_nmos[gds] -.save @n.x1.xm1.nsg13_lv_nmos[vth] -.save @n.x1.xm1.nsg13_lv_nmos[vgs] -.save @n.x1.xm1.nsg13_lv_nmos[vdss] -.save @n.x1.xm1.nsg13_lv_nmos[vds] -.save @n.x1.xm1.nsg13_lv_nmos[cgg] -.save @n.x1.xm1.nsg13_lv_nmos[cgsol] -.save @n.x1.xm1.nsg13_lv_nmos[cgdol] -.save @n.x1.xm2.nsg13_lv_nmos[ids] -.save @n.x1.xm2.nsg13_lv_nmos[gm] -.save @n.x1.xm2.nsg13_lv_nmos[gds] -.save @n.x1.xm2.nsg13_lv_nmos[vth] -.save @n.x1.xm2.nsg13_lv_nmos[vgs] -.save @n.x1.xm2.nsg13_lv_nmos[vdss] -.save @n.x1.xm2.nsg13_lv_nmos[vds] -.save @n.x1.xm2.nsg13_lv_nmos[cgg] -.save @n.x1.xm2.nsg13_lv_nmos[cgsol] -.save @n.x1.xm2.nsg13_lv_nmos[cgdol] -.save @n.x2.xm1.nsg13_lv_nmos[ids] -.save @n.x2.xm1.nsg13_lv_nmos[gm] -.save @n.x2.xm1.nsg13_lv_nmos[gds] -.save @n.x2.xm1.nsg13_lv_nmos[vth] -.save @n.x2.xm1.nsg13_lv_nmos[vgs] -.save @n.x2.xm1.nsg13_lv_nmos[vdss] -.save @n.x2.xm1.nsg13_lv_nmos[vds] -.save @n.x2.xm1.nsg13_lv_nmos[cgg] -.save @n.x2.xm1.nsg13_lv_nmos[cgsol] -.save @n.x2.xm1.nsg13_lv_nmos[cgdol] -.save @n.x2.xm2.nsg13_lv_nmos[ids] -.save @n.x2.xm2.nsg13_lv_nmos[gm] -.save @n.x2.xm2.nsg13_lv_nmos[gds] -.save @n.x2.xm2.nsg13_lv_nmos[vth] -.save @n.x2.xm2.nsg13_lv_nmos[vgs] -.save @n.x2.xm2.nsg13_lv_nmos[vdss] -.save @n.x2.xm2.nsg13_lv_nmos[vds] -.save @n.x2.xm2.nsg13_lv_nmos[cgg] -.save @n.x2.xm2.nsg13_lv_nmos[cgsol] -.save @n.x2.xm2.nsg13_lv_nmos[cgdol] -.save @n.x3.xm1.nsg13_lv_nmos[ids] -.save @n.x3.xm1.nsg13_lv_nmos[gm] -.save @n.x3.xm1.nsg13_lv_nmos[gds] -.save @n.x3.xm1.nsg13_lv_nmos[vth] -.save @n.x3.xm1.nsg13_lv_nmos[vgs] -.save @n.x3.xm1.nsg13_lv_nmos[vdss] -.save @n.x3.xm1.nsg13_lv_nmos[vds] -.save @n.x3.xm1.nsg13_lv_nmos[cgg] -.save @n.x3.xm1.nsg13_lv_nmos[cgsol] -.save @n.x3.xm1.nsg13_lv_nmos[cgdol] -.save @n.x3.xm2.nsg13_lv_nmos[ids] -.save @n.x3.xm2.nsg13_lv_nmos[gm] -.save @n.x3.xm2.nsg13_lv_nmos[gds] -.save @n.x3.xm2.nsg13_lv_nmos[vth] -.save @n.x3.xm2.nsg13_lv_nmos[vgs] -.save @n.x3.xm2.nsg13_lv_nmos[vdss] -.save @n.x3.xm2.nsg13_lv_nmos[vds] -.save @n.x3.xm2.nsg13_lv_nmos[cgg] -.save @n.x3.xm2.nsg13_lv_nmos[cgsol] -.save @n.x3.xm2.nsg13_lv_nmos[cgdol] +.save @n.x1.x1.xm1.nsg13_lv_nmos[ids] +.save @n.x1.x1.xm1.nsg13_lv_nmos[gm] +.save @n.x1.x1.xm1.nsg13_lv_nmos[gds] +.save @n.x1.x1.xm1.nsg13_lv_nmos[vth] +.save @n.x1.x1.xm1.nsg13_lv_nmos[vgs] +.save @n.x1.x1.xm1.nsg13_lv_nmos[vdss] +.save @n.x1.x1.xm1.nsg13_lv_nmos[vds] +.save @n.x1.x1.xm1.nsg13_lv_nmos[cgg] +.save @n.x1.x1.xm1.nsg13_lv_nmos[cgsol] +.save @n.x1.x1.xm1.nsg13_lv_nmos[cgdol] +.save @n.x1.x1.xm2.nsg13_lv_nmos[ids] +.save @n.x1.x1.xm2.nsg13_lv_nmos[gm] +.save @n.x1.x1.xm2.nsg13_lv_nmos[gds] +.save @n.x1.x1.xm2.nsg13_lv_nmos[vth] +.save @n.x1.x1.xm2.nsg13_lv_nmos[vgs] +.save @n.x1.x1.xm2.nsg13_lv_nmos[vdss] +.save @n.x1.x1.xm2.nsg13_lv_nmos[vds] +.save @n.x1.x1.xm2.nsg13_lv_nmos[cgg] +.save @n.x1.x1.xm2.nsg13_lv_nmos[cgsol] +.save @n.x1.x1.xm2.nsg13_lv_nmos[cgdol] +.save @n.x1.x2.xm1.nsg13_lv_nmos[ids] +.save @n.x1.x2.xm1.nsg13_lv_nmos[gm] +.save @n.x1.x2.xm1.nsg13_lv_nmos[gds] +.save @n.x1.x2.xm1.nsg13_lv_nmos[vth] +.save @n.x1.x2.xm1.nsg13_lv_nmos[vgs] +.save @n.x1.x2.xm1.nsg13_lv_nmos[vdss] +.save @n.x1.x2.xm1.nsg13_lv_nmos[vds] +.save @n.x1.x2.xm1.nsg13_lv_nmos[cgg] +.save @n.x1.x2.xm1.nsg13_lv_nmos[cgsol] +.save @n.x1.x2.xm1.nsg13_lv_nmos[cgdol] +.save @n.x1.x2.xm2.nsg13_lv_nmos[ids] +.save @n.x1.x2.xm2.nsg13_lv_nmos[gm] +.save @n.x1.x2.xm2.nsg13_lv_nmos[gds] +.save @n.x1.x2.xm2.nsg13_lv_nmos[vth] +.save @n.x1.x2.xm2.nsg13_lv_nmos[vgs] +.save @n.x1.x2.xm2.nsg13_lv_nmos[vdss] +.save @n.x1.x2.xm2.nsg13_lv_nmos[vds] +.save @n.x1.x2.xm2.nsg13_lv_nmos[cgg] +.save @n.x1.x2.xm2.nsg13_lv_nmos[cgsol] +.save @n.x1.x2.xm2.nsg13_lv_nmos[cgdol] +.save @n.x1.x3.xm1.nsg13_lv_nmos[ids] +.save @n.x1.x3.xm1.nsg13_lv_nmos[gm] +.save @n.x1.x3.xm1.nsg13_lv_nmos[gds] +.save @n.x1.x3.xm1.nsg13_lv_nmos[vth] +.save @n.x1.x3.xm1.nsg13_lv_nmos[vgs] +.save @n.x1.x3.xm1.nsg13_lv_nmos[vdss] +.save @n.x1.x3.xm1.nsg13_lv_nmos[vds] +.save @n.x1.x3.xm1.nsg13_lv_nmos[cgg] +.save @n.x1.x3.xm1.nsg13_lv_nmos[cgsol] +.save @n.x1.x3.xm1.nsg13_lv_nmos[cgdol] +.save @n.x1.x3.xm2.nsg13_lv_nmos[ids] +.save @n.x1.x3.xm2.nsg13_lv_nmos[gm] +.save @n.x1.x3.xm2.nsg13_lv_nmos[gds] +.save @n.x1.x3.xm2.nsg13_lv_nmos[vth] +.save @n.x1.x3.xm2.nsg13_lv_nmos[vgs] +.save @n.x1.x3.xm2.nsg13_lv_nmos[vdss] +.save @n.x1.x3.xm2.nsg13_lv_nmos[vds] +.save @n.x1.x3.xm2.nsg13_lv_nmos[cgg] +.save @n.x1.x3.xm2.nsg13_lv_nmos[cgsol] +.save @n.x1.x3.xm2.nsg13_lv_nmos[cgdol] diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/testbench/spectrum/differential_output_phase_noise.png b/modules/module_4_type_2_PLL/diff_Roscillator/testbench/spectrum/differential_output_phase_noise.png new file mode 100644 index 0000000000000000000000000000000000000000..e6a42d1b20f3743f67aa9d0c5760265faf49b810 GIT binary patch literal 141938 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%0APC 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 X6R%sTcZ?diBy_guZcg5K=*<5D_0hUz literal 0 HcmV?d00001 diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/testbench/xschemrc b/modules/module_4_type_2_PLL/diff_Roscillator/testbench/xschemrc index 795ca780..34b6db6d 100644 --- a/modules/module_4_type_2_PLL/diff_Roscillator/testbench/xschemrc +++ b/modules/module_4_type_2_PLL/diff_Roscillator/testbench/xschemrc @@ -14,5 +14,5 @@ source $::env(PDK_ROOT)/$::env(PDK)/libs.tech/xschem/xschemrc #### Add custom libraries (directories with .lib files) -append XSCHEM_LIBRARY_PATH :../schematic/ +append XSCHEM_LIBRARY_PATH :../xschem/ diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/xschem/diff_ring_oscillator.sch b/modules/module_4_type_2_PLL/diff_Roscillator/xschem/diff_ring_oscillator.sch new file mode 100644 index 00000000..f52c0e30 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/xschem/diff_ring_oscillator.sch @@ -0,0 +1,37 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 560 -430 610 -430 {lab=#net1} +N 560 -350 610 -350 {lab=#net2} +N 760 -430 810 -430 {lab=#net3} +N 760 -350 810 -350 {lab=#net4} +N 460 -480 460 -460 {lab=vdd} +N 660 -480 860 -480 {lab=vdd} +N 860 -480 860 -460 {lab=vdd} +N 660 -480 660 -460 {lab=vdd} +N 460 -480 660 -480 {lab=vdd} +N 460 -320 460 -300 {lab=gnd} +N 460 -300 660 -300 {lab=gnd} +N 660 -320 660 -300 {lab=gnd} +N 660 -300 860 -300 {lab=gnd} +N 860 -320 860 -300 {lab=gnd} +N 390 -430 410 -430 {lab=#net5} +N 390 -520 980 -520 {lab=#net5} +N 960 -430 980 -430 {lab=#net5} +N 390 -520 390 -430 {lab=#net5} +N 980 -520 980 -430 {lab=#net5} +N 980 -350 980 -260 {lab=Voplus} +N 960 -350 980 -350 {lab=Voplus} +N 390 -350 410 -350 {lab=Voplus} +N 390 -350 390 -260 {lab=Voplus} +N 390 -260 980 -260 {lab=Voplus} +C {differential_core.sym} 560 -390 0 0 {name=x1} +C {differential_core.sym} 760 -390 0 0 {name=x2} +C {differential_core.sym} 960 -390 0 0 {name=x3} +C {opin.sym} 980 -260 0 0 {name=p3 lab=Voplus} +C {opin.sym} 980 -510 2 1 {name=p4 lab=Vominus} +C {iopin.sym} 860 -480 0 0 {name=p1 lab=vdd} +C {iopin.sym} 860 -300 0 0 {name=p2 lab=gnd} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/xschem/diff_ring_oscillator.sym b/modules/module_4_type_2_PLL/diff_Roscillator/xschem/diff_ring_oscillator.sym new file mode 100644 index 00000000..b9399769 --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/xschem/diff_ring_oscillator.sym @@ -0,0 +1,27 @@ +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=subcircuit +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 70 -20 90 -20 {} +L 4 70 20 90 20 {} +L 7 20 70 20 90 {} +L 7 -20 70 -20 90 {} +B 5 87.5 -22.5 92.5 -17.5 {name=Voplus dir=out} +B 5 17.5 87.5 22.5 92.5 {name=vdd dir=inout} +B 5 -22.5 87.5 -17.5 92.5 {name=gnd dir=inout} +B 5 87.5 17.5 92.5 22.5 {name=Vominus dir=out} +A 4 -1.666666666666714 1.666666666666714 71.68604389202189 287.5924245621816 360 {} +A 4 -30 27.5 40.69705149024927 42.51044707800085 94.97910584399833 {} +A 4 30 -27.5 40.69705149024927 222.5104470780009 94.97910584399833 {} +T {@symname} -40.5 -56 0 0 0.1 0.1 {} +T {@name} -40 -47 0 0 0.1 0.1 { +} +T {Voplus} 65 -24 0 1 0.2 0.2 {} +T {vdd} 5 64 2 1 0.2 0.2 {} +T {gnd} -35 64 2 1 0.2 0.2 {} +T {Vominus} 65 16 0 1 0.2 0.2 {} diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/schematic/differential_core.sch b/modules/module_4_type_2_PLL/diff_Roscillator/xschem/differential_core.sch similarity index 100% rename from modules/module_4_type_2_PLL/diff_Roscillator/schematic/differential_core.sch rename to modules/module_4_type_2_PLL/diff_Roscillator/xschem/differential_core.sch diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/schematic/differential_core.sym b/modules/module_4_type_2_PLL/diff_Roscillator/xschem/differential_core.sym similarity index 100% rename from modules/module_4_type_2_PLL/diff_Roscillator/schematic/differential_core.sym rename to modules/module_4_type_2_PLL/diff_Roscillator/xschem/differential_core.sym diff --git a/modules/module_4_type_2_PLL/diff_Roscillator/xschem/xschemrc b/modules/module_4_type_2_PLL/diff_Roscillator/xschem/xschemrc new file mode 100644 index 00000000..34b6db6d --- /dev/null +++ b/modules/module_4_type_2_PLL/diff_Roscillator/xschem/xschemrc @@ -0,0 +1,18 @@ +# xschemrc - Custom configuration file for xschem +# This file sources another xschemrc file from a known location + +# Source the base configuration from a known location +source $::env(PDK_ROOT)/$::env(PDK)/libs.tech/xschem/xschemrc + +# (Optional) Add any custom overrides or extensions below +# set xschem_library_path /home/user/my_libs +# set xschem_gui_font "Monospace 10" + +#### include skywater libraries. Here I use [pwd]. This works if I start xschem from here. +###only if you dont have this setup already ### +###append XSCHEM_LIBRARY_PATH :[file dirname [info script]] + + +#### Add custom libraries (directories with .lib files) +append XSCHEM_LIBRARY_PATH :../xschem/ +