(hopefully) final commit
diff --git a/gds/caravel.gds.gz b/gds/caravel.gds.gz index 56113e9..318009f 100644 --- a/gds/caravel.gds.gz +++ b/gds/caravel.gds.gz Binary files differ
diff --git a/gds/caravel.mag b/gds/caravel.mag index 1869147..f20c8ab 100644 --- a/gds/caravel.mag +++ b/gds/caravel.mag
@@ -1,7 +1,7 @@ magic tech sky130A magscale 1 2 -timestamp 1608121336 +timestamp 1608157530 << checkpaint >> rect -1260 -1260 718860 1038860 << metal1 >> @@ -80750,187 +80750,187 @@ rect 459478 40175 459520 40411 rect 454976 40133 459520 40175 use user_id_programming user_id_value ../mag -timestamp 1608121336 +timestamp 1608157530 transform 1 0 656624 0 1 80926 box 0 0 7109 7077 use storage storage ../mag -timestamp 1608121336 +timestamp 1608157530 transform 1 0 52032 0 1 53156 box 0 0 88934 189234 use mgmt_core soc ../mag -timestamp 1608121336 +timestamp 1608157530 transform 1 0 210422 0 1 53602 box 0 0 430000 180000 use sky130_fd_sc_hvl__lsbufhv2lv_1_wrapped rstb_level ../mag -timestamp 1608121336 +timestamp 1608157530 transform -1 0 137896 0 -1 51956 box -66 -83 5058 5000 use simple_por por ../mag -timestamp 1608121336 +timestamp 1608157530 transform 1 0 654176 0 -1 112880 box 25 11 11344 8338 use mgmt_protect mgmt_buffers ../mag -timestamp 1608121336 +timestamp 1608157530 transform 1 0 212180 0 1 246848 box -1586 -1605 201502 19557 use gpio_control_block gpio_control_bidir\[1\] ../mag -timestamp 1608121336 +timestamp 1608157530 transform -1 0 708537 0 1 166200 box 0 0 33934 18344 use gpio_control_block gpio_control_bidir\[0\] -timestamp 1608121336 +timestamp 1608157530 transform -1 0 708537 0 1 121000 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[36\] -timestamp 1608121336 +timestamp 1608157530 transform 1 0 8567 0 1 245800 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[37\] -timestamp 1608121336 +timestamp 1608157530 transform 1 0 8567 0 1 202600 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[2\] -timestamp 1608121336 +timestamp 1608157530 transform -1 0 708537 0 1 211200 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[3\] -timestamp 1608121336 +timestamp 1608157530 transform -1 0 708537 0 1 256400 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[33\] -timestamp 1608121336 +timestamp 1608157530 transform 1 0 8567 0 1 375400 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[34\] -timestamp 1608121336 +timestamp 1608157530 transform 1 0 8567 0 1 332200 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[35\] -timestamp 1608121336 +timestamp 1608157530 transform 1 0 8567 0 1 289000 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[4\] -timestamp 1608121336 +timestamp 1608157530 transform -1 0 708537 0 1 301400 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[5\] -timestamp 1608121336 +timestamp 1608157530 transform -1 0 708537 0 1 346400 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[7\] -timestamp 1608121336 +timestamp 1608157530 transform -1 0 708537 0 1 479800 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[6\] -timestamp 1608121336 +timestamp 1608157530 transform -1 0 708537 0 1 391600 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[32\] -timestamp 1608121336 +timestamp 1608157530 transform 1 0 8567 0 1 418600 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[31\] -timestamp 1608121336 +timestamp 1608157530 transform 1 0 8567 0 1 546200 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[30\] -timestamp 1608121336 +timestamp 1608157530 transform 1 0 8567 0 1 589400 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[29\] -timestamp 1608121336 +timestamp 1608157530 transform 1 0 8567 0 1 632600 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[9\] -timestamp 1608121336 +timestamp 1608157530 transform -1 0 708537 0 1 568800 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[8\] -timestamp 1608121336 +timestamp 1608157530 transform -1 0 708537 0 1 523800 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[10\] -timestamp 1608121336 +timestamp 1608157530 transform -1 0 708537 0 1 614000 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[28\] -timestamp 1608121336 +timestamp 1608157530 transform 1 0 8567 0 1 675800 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[27\] -timestamp 1608121336 +timestamp 1608157530 transform 1 0 8567 0 1 719000 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[26\] -timestamp 1608121336 +timestamp 1608157530 transform 1 0 8567 0 1 762200 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[13\] -timestamp 1608121336 +timestamp 1608157530 transform -1 0 708537 0 1 749200 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[12\] -timestamp 1608121336 +timestamp 1608157530 transform -1 0 708537 0 1 704200 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[11\] -timestamp 1608121336 +timestamp 1608157530 transform -1 0 708537 0 1 659000 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[25\] -timestamp 1608121336 +timestamp 1608157530 transform 1 0 8567 0 1 805400 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[24\] -timestamp 1608121336 +timestamp 1608157530 transform 1 0 8567 0 1 931224 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[23\] -timestamp 1608121336 +timestamp 1608157530 transform 0 1 97200 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[22\] -timestamp 1608121336 +timestamp 1608157530 transform 0 1 148600 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[21\] -timestamp 1608121336 +timestamp 1608157530 transform 0 1 200000 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[20\] -timestamp 1608121336 +timestamp 1608157530 transform 0 1 251400 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[19\] -timestamp 1608121336 +timestamp 1608157530 transform 0 1 303000 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[18\] -timestamp 1608121336 +timestamp 1608157530 transform 0 1 353400 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[17\] -timestamp 1608121336 +timestamp 1608157530 transform 0 1 420800 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[16\] -timestamp 1608121336 +timestamp 1608157530 transform 0 1 497800 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[15\] -timestamp 1608121336 +timestamp 1608157530 transform 0 1 549200 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[14\] -timestamp 1608121336 +timestamp 1608157530 transform -1 0 708537 0 1 927600 box 0 0 33934 18344 use user_project_wrapper mprj ../mag -timestamp 1608121336 +timestamp 1608157530 transform 1 0 65308 0 1 278716 box -8436 -7366 592360 711302 use chip_io padframe ../mag -timestamp 1608121336 +timestamp 1608157530 transform 1 0 0 0 1 0 box 0 0 717600 1037600 << properties >>
diff --git a/gds/caravel.old.gds.gz b/gds/caravel.old.gds.gz index b77c465..56113e9 100644 --- a/gds/caravel.old.gds.gz +++ b/gds/caravel.old.gds.gz Binary files differ
diff --git a/gds/user_project_wrapper.gds.gz b/gds/user_project_wrapper.gds.gz index 28dd3b4..f9dcb6c 100644 --- a/gds/user_project_wrapper.gds.gz +++ b/gds/user_project_wrapper.gds.gz Binary files differ
diff --git a/xschem/pll_collection/pll_collection.sch b/xschem/pll_collection/pll_collection.sch index 6b69bb0..51f8b16 100644 --- a/xschem/pll_collection/pll_collection.sch +++ b/xschem/pll_collection/pll_collection.sch
@@ -56,9 +56,7 @@ N 2340 -140 2560 -140 { lab=#net16} N 2560 -190 2560 -140 { lab=#net16} N 2540 -190 2560 -190 { lab=#net16} -N 2540 -210 2620 -210 { lab=#net17} -N 2700 -210 2780 -210 { lab=out} -N 230 -550 540 -550 { lab=vdd} +N 360 -550 540 -550 { lab=vdd} N 540 -370 540 -320 { lab=#net12} N 540 -550 560 -550 { lab=vdd} N 210 -550 230 -550 { lab=vdd} @@ -70,9 +68,63 @@ N 800 0 1060 0 { lab=vss} N 540 0 800 0 { lab=vss} N 210 0 540 0 { lab=vss} -N 340 -210 440 -210 { lab=#net18} -N 340 -190 430 -190 { lab=#net19} -N 430 -190 440 -190 { lab=#net19} +N 340 -210 440 -210 { lab=#net17} +N 340 -190 440 -190 { lab=#net18} +N 2020 -310 2040 -310 { lab=vss} +N 2040 -370 2040 -340 { lab=bias_cp} +N 2040 -370 2110 -370 { lab=bias_cp} +N 2110 -370 2110 -310 { lab=bias_cp} +N 2080 -310 2110 -310 { lab=bias_cp} +N 2040 -280 2040 -0 { lab=vss} +N 2020 0 2040 -0 { lab=vss} +N 2020 -310 2020 0 { lab=vss} +N 1850 -630 2040 -630 { lab=bias_cp} +N 2040 -630 2040 -370 { lab=bias_cp} +N 2580 -510 2580 -210 { lab=#net19} +N 940 -650 940 -580 { lab=vss} +N 640 -580 940 -580 { lab=vss} +N 640 -770 640 -580 { lab=vss} +N 940 -920 940 -750 { lab=vdd} +N 640 -920 940 -920 { lab=vdd} +N 360 -920 360 -550 { lab=vdd} +N 640 -920 640 -870 { lab=vdd} +N 790 -820 1170 -820 { lab=rf_p} +N 1090 -700 1170 -700 { lab=rf_n} +N 1840 -550 3070 -550 { lab=vdd} +N 3070 -550 3070 -280 { lab=vdd} +N 3070 0 3390 0 { lab=vss} +N 3390 -120 3390 0 { lab=vss} +N 3070 -160 3070 0 { lab=vss} +N 3500 -220 3570 -220 { lab=cp_out} +N 3390 -550 3390 -320 { lab=vdd} +N 3070 -550 3390 -550 { lab=vdd} +N 2540 -210 2580 -210 { lab=#net19} +N 2560 -230 2990 -230 { lab=ref_freq} +N 2560 -630 2560 -230 { lab=ref_freq} +N 2360 -630 2560 -630 { lab=ref_freq} +N 2960 -510 3570 -510 { lab=div_out} +N 2960 -430 3570 -430 { lab=dither_output} +N 2960 -360 3570 -360 { lab=output_frequency} +N 2750 -210 2990 -210 { lab=#net20} +N 2750 -360 2750 -210 { lab=#net20} +N 1840 -0 2020 0 { lab=vss} +N 230 -550 360 -550 { lab=vdd} +N 360 -920 640 -920 { lab=vdd} +N 2040 0 3070 0 { lab=vss} +N 1300 -900 1320 -900 { lab=vss} +N 1320 -960 1320 -930 { lab=bias_rf} +N 1320 -960 1390 -960 { lab=bias_rf} +N 1390 -960 1390 -900 { lab=bias_rf} +N 1360 -900 1390 -900 { lab=bias_rf} +N 1130 -1220 1320 -1220 { lab=bias_rf} +N 1320 -1220 1320 -960 { lab=bias_rf} +N 940 -580 1310 -580 { lab=vss} +N 1310 -580 1320 -580 { lab=vss} +N 1320 -870 1320 -580 { lab=vss} +N 1300 -900 1300 -580 { lab=vss} +N 2750 -360 2800 -360 { lab=#net20} +N 2750 -510 2800 -510 { lab=#net21} +N 2580 -510 2670 -510 { lab=#net19} C {vco_2-4GHz/vco_2-4GHz.sym} 210 -220 0 0 {name=xvco} C {divider_cml/divider_cml.sym} 540 -200 0 0 {name=x1} C {divider_cml/divider_cml.sym} 800 -200 0 0 {name=x2} @@ -105,16 +157,74 @@ C {iopin.sym} 0 -550 0 1 {name=p1 lab=vdd} C {iopin.sym} 0 0 0 1 {name=p2 lab=vss} C {ipin.sym} 0 -220 0 0 {name=p3 lab=ctl} -C {opin.sym} 2780 -210 0 0 {name=p4 lab=out} +C {opin.sym} 3570 -510 0 0 {name=p4 lab=div_out} C {ipin.sym} 0 -460 0 0 {name=p6 lab=en_n} C {sky130_stdcells/dfxbp_1.sym} 2190 -200 0 0 {name=x7 VGND=vss VNB=vss VPB=vdd VPWR=vdd prefix=sky130_fd_sc_hd__ } C {sky130_stdcells/dfxbp_1.sym} 2450 -200 0 0 {name=x8 VGND=vss VNB=vss VPB=vdd VPWR=vdd prefix=sky130_fd_sc_hd__ } -C {sky130_stdcells/bufinv_16.sym} 2660 -210 0 0 {name=x9 VGND=vss VNB=vss VPB=vdd VPWR=vdd prefix=sky130_fd_sc_hd__ } +C {sky130_stdcells/bufinv_16.sym} 2840 -510 0 0 {name=x9 VGND=vss VNB=vss VPB=vdd VPWR=vdd prefix=sky130_fd_sc_hd__ } C {lab_pin.sym} 340 -310 0 1 {name=l2 sig_type=std_logic lab=ph1_p} C {lab_pin.sym} 340 -290 0 1 {name=l3 sig_type=std_logic lab=ph1_n} C {lab_pin.sym} 340 -160 0 1 {name=l6 sig_type=std_logic lab=ph4_p} C {lab_pin.sym} 340 -140 0 1 {name=l7 sig_type=std_logic lab=ph4_n} C {lab_pin.sym} 1940 -190 0 1 {name=l8 sig_type=std_logic lab=ff_nc} -C {sky130_stdcells/tapvpwrvgnd_1.sym} 2040 -450 0 0 {name=x10[2:1] VGND=vss VPWR=vdd prefix=sky130_fd_sc_hd__ } +C {sky130_stdcells/tapvpwrvgnd_1.sym} 1640 -900 0 0 {name=x10[2:1] VGND=vss VPWR=vdd prefix=sky130_fd_sc_hd__ } C {lab_pin.sym} 340 -260 0 1 {name=l1 sig_type=std_logic lab=ph2_p} C {lab_pin.sym} 340 -240 0 1 {name=l4 sig_type=std_logic lab=ph2_n} +C {lab_wire.sym} 3150 -210 0 1 {name=l5 sig_type=std_logic lab=DOWN} +C {chargepump/chargepump.sym} 3390 -220 0 0 {name=x10[81:1] w_invp=3u l_invp=0.18u w_invn=1u l_invn=0.18u w_currn=1u l_currn=4u w_currp=3u l_currp=4u m_curr=20 w_swn=1u l_swn=0.18u w_swp=3u l_swp=0.18u m_sw=4} +C {lab_wire.sym} 3150 -230 0 1 {name=l10 sig_type=std_logic lab=UP} +C {phase_frequency_detector/phase_frequency_detector.sym} 3070 -220 0 0 {name=x11} +C {lab_wire.sym} 3280 -210 0 0 {name=l11 sig_type=std_logic lab=UP} +C {lab_wire.sym} 3280 -230 0 0 {name=l12 sig_type=std_logic lab=DOWN} +C {rf_driver/rf_driver.sym} 640 -820 0 0 {name=x12} +C {sky130_fd_pr/nfet_01v8_lvt.sym} 2060 -310 0 1 {name=M3 +L=1 +W=1 +ad="'W * 0.29'" pd="'2 * (W + 0.29)'" +as="'W * 0.29'" ps="'2 * (W + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +nf=1 mult=200 +model=nfet_01v8_lvt +spiceprefix=X +} +C {lab_wire.sym} 2110 -310 0 1 {name=l13 sig_type=std_logic lab=bias_cp +} +C {ipin.sym} 1850 -630 0 0 {name=p5 lab=bias_cp} +C {rf_driver/rf_driver.sym} 940 -700 0 0 {name=x13} +C {lab_pin.sym} 490 -830 0 0 {name=l14 sig_type=std_logic lab=ph2_p} +C {lab_pin.sym} 490 -810 0 0 {name=l15 sig_type=std_logic lab=bias_rf} +C {lab_pin.sym} 790 -710 0 0 {name=l16 sig_type=std_logic lab=ph2_n} +C {lab_pin.sym} 790 -690 0 0 {name=l17 sig_type=std_logic lab=bias_rf} +C {lab_wire.sym} 640 -580 0 1 {name=l18 sig_type=std_logic lab=vss} +C {opin.sym} 1170 -820 0 0 {name=p7 lab=rf_p} +C {opin.sym} 1170 -700 0 0 {name=p8 lab=rf_n} +C {lab_wire.sym} 3330 -320 0 0 {name=l19 sig_type=std_logic lab=bias_cp +} +C {opin.sym} 3570 -220 0 0 {name=p9 lab=cp_out} +C {ipin.sym} 2360 -630 0 0 {name=p10 lab=ref_freq} +C {sky130_stdcells/bufinv_16.sym} 2920 -510 0 0 {name=x10[16:1] VGND=vss VNB=vss VPB=vdd VPWR=vdd prefix=sky130_fd_sc_hd__ } +C {opin.sym} 3570 -430 0 0 {name=p11 lab=dither_output} +C {sky130_stdcells/bufinv_16.sym} 2840 -430 0 0 {name=x10 VGND=vss VNB=vss VPB=vdd VPWR=vdd prefix=sky130_fd_sc_hd__ } +C {sky130_stdcells/bufinv_16.sym} 2920 -430 0 0 {name=x11[16:1] VGND=vss VNB=vss VPB=vdd VPWR=vdd prefix=sky130_fd_sc_hd__ } +C {opin.sym} 3570 -360 0 0 {name=p12 lab=output_frequency} +C {sky130_stdcells/bufinv_16.sym} 2840 -360 0 0 {name=x14 VGND=vss VNB=vss VPB=vdd VPWR=vdd prefix=sky130_fd_sc_hd__ } +C {sky130_stdcells/bufinv_16.sym} 2920 -360 0 0 {name=x15[16:1] VGND=vss VNB=vss VPB=vdd VPWR=vdd prefix=sky130_fd_sc_hd__ } +C {ipin.sym} 0 -740 0 0 {name=p13 lab=input_frequeny} +C {noconn.sym} 2800 -430 0 0 {name=l9} +C {noconn.sym} 0 -740 0 1 {name=l21} +C {sky130_fd_pr/nfet_01v8_lvt.sym} 1340 -900 0 1 {name=M4 +L=1 +W=1 +ad="'W * 0.29'" pd="'2 * (W + 0.29)'" +as="'W * 0.29'" ps="'2 * (W + 0.29)'" +nrd="'0.29 / W'" nrs="'0.29 / W'" +sa=0 sb=0 sd=0 +nf=1 mult=200 +model=nfet_01v8_lvt +spiceprefix=X +} +C {lab_wire.sym} 1390 -900 0 1 {name=l20 sig_type=std_logic lab=bias_rf +} +C {ipin.sym} 1130 -1220 0 0 {name=p14 lab=bias_rf} +C {sky130_stdcells/bufinv_16.sym} 2710 -510 0 0 {name=x15 VGND=vss VNB=vss VPB=vdd VPWR=vdd prefix=sky130_fd_sc_hd__ }
diff --git a/xschem/rf_driver/rf_driver.sch b/xschem/rf_driver/rf_driver.sch new file mode 100644 index 0000000..4026310 --- /dev/null +++ b/xschem/rf_driver/rf_driver.sch
@@ -0,0 +1,20 @@ +v { version=2.9.8 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 0 -110 50 -110 { lab=in} +N 0 -200 140 -200 { lab=vdd} +N 0 -90 50 -90 { lab=bias} +N 350 -100 400 -100 { lab=out} +N 200 -50 200 0 { lab=vss} +N 0 0 200 0 { lab=vss} +N 140 -200 200 -200 { lab=vdd} +N 200 -200 200 -150 { lab=vdd} +C {iopin.sym} 0 -200 0 1 {name=p1 lab=vdd} +C {iopin.sym} 0 0 0 1 {name=p2 lab=vss} +C {ipin.sym} 0 -110 0 0 {name=p3 lab=in} +C {ipin.sym} 0 -90 0 0 {name=p4 lab=bias} +C {opin.sym} 400 -100 0 0 {name=p5 lab=out} +C {rf_driver_cell/rf_driver_cell.sym} 200 -100 0 0 {name=x1[32:1]}
diff --git a/xschem/rf_driver/rf_driver.sym b/xschem/rf_driver/rf_driver.sym new file mode 100644 index 0000000..968ae17 --- /dev/null +++ b/xschem/rf_driver/rf_driver.sym
@@ -0,0 +1,30 @@ +v {xschem version=2.9.8 file_version=1.2} +G {} +K {type=subcircuit +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -130 -30 130 -30 {} +L 4 -130 30 130 30 {} +L 4 -130 -30 -130 30 {} +L 4 130 -30 130 30 {} +L 4 -150 -10 -130 -10 {} +L 4 130 0 150 0 {} +L 4 -150 10 -130 10 {} +L 7 0 -50 0 -30 {} +L 7 0 30 0 50 {} +B 5 -2.5 -52.5 2.5 -47.5 {name=vdd dir=inout name=p1 } +B 5 -152.5 -12.5 -147.5 -7.5 {name=in dir=in name=p3 } +B 5 147.5 -2.5 152.5 2.5 {name=out dir=out name=p5 } +B 5 -152.5 7.5 -147.5 12.5 {name=bias dir=in name=p4 } +B 5 -2.5 47.5 2.5 52.5 {name=vss dir=inout name=p2 } +T {@symname} 49 54 0 0 0.3 0.3 {} +T {@name} 55 38 0 0 0.2 0.2 {} +T {vdd} -14 -25 0 0 0.2 0.2 {} +T {in} -125 -14 0 0 0.2 0.2 {} +T {out} 125 -4 0 1 0.2 0.2 {} +T {bias} -125 6 0 0 0.2 0.2 {} +T {vss} -14 15 0 0 0.2 0.2 {}