Merge branch 'master' of https://github.com/yrrapt/caravel_amsat_txrx_ic
diff --git a/gds/caravel.gds.gz b/gds/caravel.gds.gz index 40c51a6..b77c465 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 fba17c2..fdb8eec 100644 --- a/gds/caravel.mag +++ b/gds/caravel.mag
@@ -1,7 +1,7 @@ magic tech sky130A magscale 1 2 -timestamp 1607460486 +timestamp 1607895242 << checkpaint >> rect -1260 -1260 718860 1038860 << metal1 >> @@ -81614,187 +81614,187 @@ rect 400342 222659 400384 222895 rect 380288 222617 400384 222659 use user_id_programming user_id_value ../mag -timestamp 1607460486 +timestamp 1607895242 transform 1 0 656625 0 1 80926 box 0 0 7109 7077 use storage storage ../mag -timestamp 1607460486 +timestamp 1607895242 transform 1 0 52031 0 1 61392 box 0 0 88934 189234 use mgmt_core soc ../mag -timestamp 1607460486 +timestamp 1607895242 transform 1 0 204550 0 1 53700 box 0 0 430000 170000 use sky130_fd_sc_hvl__lsbufhv2lv_1_wrapped rstb_level ../mag -timestamp 1607460486 +timestamp 1607895242 transform 1 0 154753 0 1 51403 box 0 1 5124 5084 use simple_por por ../mag -timestamp 1607460486 +timestamp 1607895242 transform 1 0 654176 0 1 104197 box 25 11 11344 8338 use mgmt_protect mgmt_buffers ../mag -timestamp 1607460486 +timestamp 1607895242 transform 1 0 288100 0 1 239747 box 0 0 169594 13025 use gpio_control_block gpio_control_bidir\[1\] ../mag -timestamp 1607460486 +timestamp 1607895242 transform -1 0 708537 0 1 166200 box 0 0 33934 18344 use gpio_control_block gpio_control_bidir\[0\] -timestamp 1607460486 +timestamp 1607895242 transform -1 0 708537 0 1 121000 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[37\] -timestamp 1607460486 +timestamp 1607895242 transform 1 0 8567 0 1 202600 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[36\] -timestamp 1607460486 +timestamp 1607895242 transform 1 0 8567 0 1 245800 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[3\] -timestamp 1607460486 +timestamp 1607895242 transform -1 0 708537 0 1 256400 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[2\] -timestamp 1607460486 +timestamp 1607895242 transform -1 0 708537 0 1 211200 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[35\] -timestamp 1607460486 +timestamp 1607895242 transform 1 0 8567 0 1 289000 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[34\] -timestamp 1607460486 +timestamp 1607895242 transform 1 0 8567 0 1 332200 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[33\] -timestamp 1607460486 +timestamp 1607895242 transform 1 0 8567 0 1 375400 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[5\] -timestamp 1607460486 +timestamp 1607895242 transform -1 0 708537 0 1 346400 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[4\] -timestamp 1607460486 +timestamp 1607895242 transform -1 0 708537 0 1 301400 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[7\] -timestamp 1607460486 +timestamp 1607895242 transform -1 0 708537 0 1 479800 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[6\] -timestamp 1607460486 +timestamp 1607895242 transform -1 0 708537 0 1 391600 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[32\] -timestamp 1607460486 +timestamp 1607895242 transform 1 0 8567 0 1 418600 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[31\] -timestamp 1607460486 +timestamp 1607895242 transform 1 0 8567 0 1 546200 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[30\] -timestamp 1607460486 +timestamp 1607895242 transform 1 0 8567 0 1 589400 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[29\] -timestamp 1607460486 +timestamp 1607895242 transform 1 0 8567 0 1 632600 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[9\] -timestamp 1607460486 +timestamp 1607895242 transform -1 0 708537 0 1 568800 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[8\] -timestamp 1607460486 +timestamp 1607895242 transform -1 0 708537 0 1 523800 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[10\] -timestamp 1607460486 +timestamp 1607895242 transform -1 0 708537 0 1 614000 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[28\] -timestamp 1607460486 +timestamp 1607895242 transform 1 0 8567 0 1 675800 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[27\] -timestamp 1607460486 +timestamp 1607895242 transform 1 0 8567 0 1 719000 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[26\] -timestamp 1607460486 +timestamp 1607895242 transform 1 0 8567 0 1 762200 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[13\] -timestamp 1607460486 +timestamp 1607895242 transform -1 0 708537 0 1 749200 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[12\] -timestamp 1607460486 +timestamp 1607895242 transform -1 0 708537 0 1 704200 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[11\] -timestamp 1607460486 +timestamp 1607895242 transform -1 0 708537 0 1 659000 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[25\] -timestamp 1607460486 +timestamp 1607895242 transform 1 0 8567 0 1 805400 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[24\] -timestamp 1607460486 +timestamp 1607895242 transform 1 0 8567 0 1 889800 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[23\] -timestamp 1607460486 +timestamp 1607895242 transform 0 1 97200 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[22\] -timestamp 1607460486 +timestamp 1607895242 transform 0 1 148600 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[21\] -timestamp 1607460486 +timestamp 1607895242 transform 0 1 200000 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[20\] -timestamp 1607460486 +timestamp 1607895242 transform 0 1 251400 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[19\] -timestamp 1607460486 +timestamp 1607895242 transform 0 1 303000 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[18\] -timestamp 1607460486 +timestamp 1607895242 transform 0 1 353400 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[17\] -timestamp 1607460486 +timestamp 1607895242 transform 0 1 420800 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[16\] -timestamp 1607460486 +timestamp 1607895242 transform 0 1 497800 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[15\] -timestamp 1607460486 +timestamp 1607895242 transform 0 1 549200 -1 0 1029747 box 0 0 33934 18344 use gpio_control_block gpio_control_in\[14\] -timestamp 1607460486 +timestamp 1607895242 transform -1 0 708537 0 1 927600 box 0 0 33934 18344 use chip_io padframe ../mag -timestamp 1607460486 +timestamp 1607895242 transform 1 0 0 0 1 0 box 0 0 717600 1037600 use user_project_wrapper mprj ../mag -timestamp 1607460486 +timestamp 1607895242 transform 1 0 65277 0 1 276402 box -8436 -7366 592360 711302 << properties >>
diff --git a/gds/caravel.old.gds.gz b/gds/caravel.old.gds.gz new file mode 100644 index 0000000..8869e6f --- /dev/null +++ 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 345cab7..df88577 100644 --- a/gds/user_project_wrapper.gds.gz +++ b/gds/user_project_wrapper.gds.gz Binary files differ
diff --git a/utils/run_lvs_pex.sh b/utils/run_lvs_pex.sh index 1221114..e730290 100755 --- a/utils/run_lvs_pex.sh +++ b/utils/run_lvs_pex.sh
@@ -56,6 +56,15 @@ # include the digital cell definitions sed -i '$s,.end,.include '"$HOME"'\/repositories\/skywater\/sky130A\/libs.ref\/sky130_fd_sc_hd\/spice\/sky130_fd_sc_hd.spice\n.end,g' "$1.spice" +# want to replace with global RF subcircuit include +sed -i '$s,.end,.include '"$HOME"'\/skywater\/skywater-pdk\/libraries\/sky130_fd_pr\/latest\/cells\/rf_nfet_01v8_lvt\/sky130_fd_pr__rf_nfet_01v8_lvt_aF02W3p00L0p15.spice\n.end,g' "$1.spice" +sed -i '$s,.end,.include '"$HOME"'\/skywater\/skywater-pdk\/libraries\/sky130_fd_pr\/latest\/cells\/rf_nfet_01v8_lvt\/sky130_fd_pr__rf_nfet_01v8_lvt_aF02W1p65L0p15.spice\n.end,g' "$1.spice" +sed -i '$s,.end,.include '"$HOME"'\/skywater\/skywater-pdk\/libraries\/sky130_fd_pr\/latest\/cells\/rf_nfet_01v8_lvt\/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15.spice\n.end,g' "$1.spice" +sed -i '$s,.end,.include '"$HOME"'\/skywater\/skywater-pdk\/libraries\/sky130_fd_pr\/latest\/cells\/rf_nfet_01v8_lvt\/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W1p65L0p15.spice\n.end,g' "$1.spice" +sed -i '$s,.end,.include '"$HOME"'\/skywater\/skywater-pdk\/libraries\/sky130_fd_pr\/latest\/cells\/rf_pfet_01v8_lvt\/sky130_fd_pr__rf_pfet_01v8_lvt_aM02W5p00L0p35.spice\n.end,g' "$1.spice" +sed -i '$s,.end,.include '"$HOME"'\/skywater\/skywater-pdk\/libraries\/sky130_fd_pr\/latest\/cells\/rf_pfet_01v8\/sky130_fd_pr__rf_pfet_01v8_aM02W1p65L0p25.spice\n.end,g' "$1.spice" +sed -i '$s,.end,.include '"$HOME"'\/skywater\/skywater-pdk\/libraries\/sky130_fd_pr\/latest\/cells\/res_xhigh_po\/sky130_fd_pr__res_xhigh_po_2p85.model.spice\n.end,g' "$1.spice" + # now compare the xschem schematic netlist and the magic extracted netlist netgen -batch lvs "drc_cell_lvs.spice "$1"" ""$1".spice "$1"" ~/skywater/pdk/skywater130/sky130A/libs.tech/netgen/sky130A_setup.tcl lvs_report.out -json
diff --git a/verilog/gl/user_project_wrapper.v b/verilog/gl/user_project_wrapper.v index cd0c146..1f993d7 100644 --- a/verilog/gl/user_project_wrapper.v +++ b/verilog/gl/user_project_wrapper.v
@@ -1,7 +1,39 @@ module user_project_wrapper( + inout vssd1, + inout vccd1, inout vssd2, inout vccd2, + in la_data_in[0], + in la_data_in[1], + in la_data_in[2], + in la_data_in[3], + in la_data_in[4], + in la_data_in[5], + in la_data_in[6], + in la_data_in[7], + in la_data_in[8], + in la_data_in[9], + in la_data_in[10], + in la_data_in[11], + in la_data_in[12], + in la_data_in[13], + in la_data_in[14], + in la_data_in[15], + in la_data_in[16], + in la_data_in[17], + in la_data_in[18], + in la_data_in[19], + in la_data_in[20], + in la_data_in[21], + in la_data_in[22], + in la_data_in[23], + in la_data_in[24], + in la_data_in[25], + in la_data_in[26], + in la_data_in[27], + in la_data_in[28], + in la_data_in[29], in la_data_in[95], in la_data_in[94], in la_data_in[93], @@ -41,7 +73,19 @@ inout analog_io[18], inout analog_io[19], inout analog_io[20], - inout analog_io[21] + inout analog_io[21], + inout analog_io[24], + inout analog_io[25], + inout analog_io[26], + inout analog_io[27], + inout analog_io[28], + inout analog_io[29], + inout analog_io[30] ); + + fake fake (); + + + endmodule
diff --git a/xschem/divider_cml/divider_cml.sch b/xschem/divider_cml/divider_cml.sch new file mode 100644 index 0000000..3891e56 --- /dev/null +++ b/xschem/divider_cml/divider_cml.sch
@@ -0,0 +1,201 @@ +v {xschem version=2.9.8 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 240 -270 240 -240 {lab=#net1} +N 330 -270 390 -210 {lab=#net1} +N 330 -210 390 -270 {lab=#net2} +N 240 -270 330 -270 {lab=#net1} +N 280 -210 330 -210 {lab=#net2} +N 480 -270 480 -240 {lab=#net2} +N 390 -270 480 -270 {lab=#net2} +N 390 -210 440 -210 {lab=#net1} +N 220 -210 240 -210 {lab=GND} +N 220 -210 220 -70 {lab=GND} +N 240 -180 240 -160 {lab=source_pcross} +N 480 -180 480 -160 {lab=source_pcross} +N 480 -210 500 -210 {lab=GND} +N 500 -210 500 -70 {lab=GND} +N 240 -160 480 -160 {lab=source_pcross} +N 100 -180 100 -130 {lab=source_ntoggle} +N 620 -180 620 -130 {lab=source_ntoggle} +N 480 -130 620 -130 {lab=source_ntoggle} +N 480 -130 480 -100 {lab=source_ntoggle} +N 240 -160 240 -100 {lab=source_pcross} +N 220 -70 240 -70 {lab=GND} +N 220 -70 220 -10 {lab=GND} +N 240 -40 240 -10 {lab=GND} +N 220 -10 240 -10 {lab=GND} +N 500 -70 500 -10 {lab=GND} +N 480 -40 480 -10 {lab=GND} +N 480 -70 500 -70 {lab=GND} +N 600 -210 620 -210 {lab=GND} +N 600 -210 600 -10 {lab=GND} +N 500 -10 600 -10 {lab=GND} +N 480 -10 500 -10 {lab=GND} +N 240 -10 480 -10 {lab=GND} +N 100 -210 120 -210 {lab=GND} +N 120 -210 120 -10 {lab=GND} +N 120 -10 220 -10 {lab=GND} +N 100 -290 100 -240 {lab=#net1} +N 100 -290 240 -290 {lab=#net1} +N 240 -290 240 -270 {lab=#net1} +N 480 -290 480 -270 {lab=#net2} +N 480 -290 620 -290 {lab=#net2} +N 620 -290 620 -240 {lab=#net2} +N 100 -130 480 -130 {lab=source_ntoggle} +N 240 -550 240 -290 {lab=#net1} +N 480 -550 480 -290 {lab=#net2} +N 240 -650 240 -610 {lab=VDD} +N 240 -650 480 -650 {lab=VDD} +N 480 -650 480 -610 {lab=VDD} +N 1040 -270 1040 -240 {lab=OUTn} +N 1130 -270 1190 -210 {lab=OUTn} +N 1130 -210 1190 -270 {lab=OUTp} +N 1040 -270 1130 -270 {lab=OUTn} +N 1080 -210 1130 -210 {lab=OUTp} +N 1280 -270 1280 -240 {lab=OUTp} +N 1190 -270 1280 -270 {lab=OUTp} +N 1190 -210 1240 -210 {lab=OUTn} +N 1020 -210 1040 -210 {lab=GND} +N 1020 -210 1020 -70 {lab=GND} +N 1040 -180 1040 -160 {lab=source_ncross} +N 1280 -180 1280 -160 {lab=source_ncross} +N 1280 -210 1300 -210 {lab=GND} +N 1300 -210 1300 -70 {lab=GND} +N 1040 -160 1280 -160 {lab=source_ncross} +N 900 -180 900 -130 {lab=source_ptoggle} +N 1420 -180 1420 -130 {lab=source_ptoggle} +N 1280 -130 1420 -130 {lab=source_ptoggle} +N 1280 -130 1280 -100 {lab=source_ptoggle} +N 1040 -160 1040 -100 {lab=source_ncross} +N 1020 -70 1040 -70 {lab=GND} +N 1020 -70 1020 -10 {lab=GND} +N 1040 -40 1040 -10 {lab=GND} +N 1020 -10 1040 -10 {lab=GND} +N 1300 -70 1300 -10 {lab=GND} +N 1280 -40 1280 -10 {lab=GND} +N 1280 -70 1300 -70 {lab=GND} +N 1400 -210 1420 -210 {lab=GND} +N 1400 -210 1400 -10 {lab=GND} +N 1300 -10 1400 -10 {lab=GND} +N 1280 -10 1300 -10 {lab=GND} +N 1040 -10 1280 -10 {lab=GND} +N 900 -210 920 -210 {lab=GND} +N 920 -210 920 -10 {lab=GND} +N 920 -10 1020 -10 {lab=GND} +N 900 -290 900 -240 {lab=OUTn} +N 900 -290 1040 -290 {lab=OUTn} +N 1040 -290 1040 -270 {lab=OUTn} +N 1280 -290 1280 -270 {lab=OUTp} +N 1280 -290 1420 -290 {lab=OUTp} +N 1420 -290 1420 -240 {lab=OUTp} +N 900 -130 1280 -130 {lab=source_ptoggle} +N 1040 -550 1040 -290 {lab=OUTn} +N 1280 -550 1280 -290 {lab=OUTp} +N 1040 -650 1040 -610 {lab=VDD} +N 1040 -650 1280 -650 {lab=VDD} +N 1280 -650 1280 -610 {lab=VDD} +N 700 -210 820 -330 {lab=OUTn} +N 700 -330 820 -210 {lab=#net1} +N 820 -210 860 -210 {lab=#net1} +N 660 -210 700 -210 {lab=OUTn} +N 820 -330 1040 -330 {lab=OUTn} +N 240 -330 700 -330 {lab=#net1} +N 20 -210 60 -210 {lab=OUTp} +N 20 -350 20 -210 {lab=OUTp} +N 20 -370 20 -350 {lab=OUTp} +N 20 -370 1280 -370 {lab=OUTp} +N 1460 -210 1500 -210 {lab=#net2} +N 1500 -410 1500 -210 {lab=#net2} +N 600 -10 920 -10 {lab=GND} +N 480 -650 1040 -650 {lab=VDD} +N 400 -70 440 -70 {lab=INn} +N 280 -70 320 -70 {lab=INp} +N 1200 -70 1240 -70 {lab=INp} +N 1080 -70 1120 -70 {lab=INn} +N 20 -10 120 -10 {lab=GND} +N 20 -650 240 -650 {lab=VDD} +N 1040 -470 1500 -470 {lab=OUTn} +N 1280 -510 1500 -510 {lab=OUTp} +N 480 -410 1500 -410 {lab=#net2} +N 170 -580 210 -580 {lab=gnd} +N 510 -580 550 -580 {lab=gnd} +N 970 -580 1020 -580 {lab=gnd} +N 1300 -580 1350 -580 {lab=gnd} +N 210 -580 220 -580 { lab=gnd} +N 500 -580 510 -580 { lab=gnd} +C {ipin.sym} 20 -70 0 0 {name=p1 lab=INn} +C {opin.sym} 1500 -510 0 0 {name=p5 lab=OUTp +} +C {iopin.sym} 20 -650 0 1 {name=p7 lab=VDD} +C {iopin.sym} 20 -10 0 1 {name=p8 lab=GND +} +C {opin.sym} 1500 -470 0 0 {name=p10 lab=OUTn +} +C {ipin.sym} 20 -110 0 0 {name=p11 lab=INp} +C {lab_wire.sym} 280 -70 0 1 {name=l1 sig_type=std_logic lab=INp} +C {lab_wire.sym} 1200 -70 0 1 {name=l2 sig_type=std_logic lab=INp} +C {lab_wire.sym} 400 -70 0 1 {name=l3 sig_type=std_logic lab=INn} +C {lab_wire.sym} 1080 -70 0 1 {name=l4 sig_type=std_logic lab=INn} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 80 -210 0 0 {name=XMdiffp model=sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 460 -210 0 0 {name=XMdiffp1 model=sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15 m=1 + +} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 460 -70 0 0 {name=XMdiffp2 model=sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 880 -210 0 0 {name=XMdiffp3 model=sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 1260 -210 0 0 {name=XMdiffp4 model=sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15 + +} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 1260 -70 0 0 {name=XMdiffp5 model=sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15 + +} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 260 -210 0 1 {name=XMdiffp6 model=sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15 + + +} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 260 -70 0 1 {name=XMdiffp7 model=sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 640 -210 0 1 {name=XMdiffp8 model=sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 1060 -210 0 1 {name=XMdiffp9 model=sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15 + +} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 1060 -70 0 1 {name=XMdiffp10 model=sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15 + +} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 1440 -210 0 1 {name=XMdiffp11 model=sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15 + +} +C {lab_wire.sym} 170 -580 0 1 {name=l5 sig_type=std_logic lab=gnd} +C {lab_wire.sym} 500 -580 0 1 {name=l6 sig_type=std_logic lab=gnd} +C {lab_wire.sym} 970 -580 0 1 {name=l7 sig_type=std_logic lab=gnd} +C {lab_wire.sym} 1300 -580 0 1 {name=l8 sig_type=std_logic lab=gnd} +C {lab_wire.sym} 310 -160 0 1 {name=l9 sig_type=std_logic lab=source_pcross} +C {lab_wire.sym} 1110 -160 0 1 {name=l10 sig_type=std_logic lab=source_ncross} +C {lab_wire.sym} 1110 -130 0 1 {name=l11 sig_type=std_logic lab=source_ptoggle} +C {lab_wire.sym} 310 -130 0 1 {name=l12 sig_type=std_logic lab=source_ntoggle} +C {sky130_fd_pr/res_xhigh_po.sym} 240 -580 0 0 {name=R1 +W=2.85 +L=5 +model=res_xhigh_po +spiceprefix=X +mult=1} +C {sky130_fd_pr/res_xhigh_po.sym} 480 -580 0 1 {name=R2 +W=2.85 +L=5 +model=res_xhigh_po +spiceprefix=X +mult=1} +C {sky130_fd_pr/res_xhigh_po.sym} 1040 -580 0 0 {name=R3 +W=2.85 +L=5 +model=res_xhigh_po +spiceprefix=X +mult=1} +C {sky130_fd_pr/res_xhigh_po.sym} 1280 -580 0 1 {name=R4 +W=2.85 +L=5 +model=res_xhigh_po +spiceprefix=X +mult=1}
diff --git a/xschem/divider_cml/divider_cml.sym b/xschem/divider_cml/divider_cml.sym new file mode 100644 index 0000000..733bae2 --- /dev/null +++ b/xschem/divider_cml/divider_cml.sym
@@ -0,0 +1,36 @@ +v {xschem version=2.9.7 file_version=1.1} +G {type=subcircuit +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 3 -16 0 -5 0 {} +L 3 -11 -3 -10 -3 {} +L 3 -11 3 -10 3 {} +L 4 -80 -40 -80 40 {} +L 4 80 -40 80 40 {} +L 4 80 -10 100 -10 {} +L 4 80 10 100 10 {} +L 4 -100 -10 -80 -10 {} +L 4 -100 10 -80 10 {} +L 4 -80 -40 80 -40 {} +L 4 -80 40 80 40 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -2.5 -62.5 2.5 -57.5 {name=VDD dir=inout } +B 5 97.5 -12.5 102.5 -7.5 {name=OUTp dir=out } +B 5 97.5 7.5 102.5 12.5 {name=OUTn dir=out } +B 5 -102.5 -12.5 -97.5 -7.5 {name=INp dir=in } +B 5 -102.5 7.5 -97.5 12.5 {name=INn dir=in } +B 5 -2.5 57.5 2.5 62.5 {name=GND dir=inout } +T {@symname} 32.5 64 0 0 0.3 0.3 {} +T {@name} 35 48 0 0 0.2 0.2 {} +T {VDD} 12 -35 0 1 0.2 0.2 {} +T {OUTp} 75 -14 0 1 0.2 0.2 {} +T {OUTn} 75 6 0 1 0.2 0.2 {} +T {INp} -75 -14 0 0 0.2 0.2 {} +T {INn} -75 6 0 0 0.2 0.2 {} +T {GND} -12 35 2 1 0.2 0.2 {} +T {2} 0 -12 0 0 0.4 0.4 {}
diff --git a/xschem/divider_cml/test/divider_cml_test.sch b/xschem/divider_cml/test/divider_cml_test.sch new file mode 100644 index 0000000..a191dba --- /dev/null +++ b/xschem/divider_cml/test/divider_cml_test.sch
@@ -0,0 +1,81 @@ +v {xschem version=2.9.7 file_version=1.1} +G {} +V {} +S {} +E {} +N 520 -160 620 -160 {lab=in_n} +N 520 -180 620 -180 {lab=in_p} +N 720 -340 720 -230 {lab=vdd} +N -0 -340 720 -340 {lab=vdd} +N -0 -340 0 -250 {lab=vdd} +N 0 -190 0 -0 {lab=0} +N 460 0 720 0 {lab=0} +N 720 -110 720 0 {lab=0} +N 1030 -320 1030 -230 {lab=vdd_tb} +N 100 -320 100 -250 {lab=vdd_tb} +N 460 -320 1030 -320 {lab=vdd_tb} +N 460 -320 460 -210 {lab=vdd_tb} +N 100 -190 100 0 {lab=0} +N 460 -130 460 0 {lab=0} +N 1030 -110 1030 0 {lab=0} +N 720 0 1030 0 {lab=0} +N 280 -160 280 -100 {lab=src_n} +N 280 -160 390 -160 {lab=src_n} +N 140 -180 140 -100 {lab=src_p} +N 140 -180 390 -180 {lab=src_p} +N 140 -40 140 0 {lab=0} +N 280 -40 280 -0 {lab=0} +N 820 -180 930 -180 {lab=out_p} +N 820 -160 930 -160 {lab=out_n} +N 1340 -320 1340 -230 {lab=vdd_tb} +N 1340 -110 1340 0 {lab=0} +N 1030 -320 1340 -320 {lab=vdd_tb} +N 1130 -180 1240 -180 {lab=out2_p} +N 1130 -160 1240 -160 {lab=out2_n} +N 1030 -0 1340 -0 {lab=0} +N 0 -0 100 0 {lab=0} +N 280 -0 460 0 {lab=0} +N 100 -320 460 -320 {lab=vdd_tb} +N 100 0 140 0 {lab=0} +N 140 0 280 -0 {lab=0} +C {code.sym} 890 -490 0 0 {name=STIMULI +tclcommand="xschem edit_vi_prop" +value=" +.param temp=125 +.temp 125 + +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W1p65L0p15.spice +.lib sky130_fd_pr/models/sky130.lib.spice ss + +.tran 0.01n 10n uic +.param vdd=1.8 +.param rise_fall_time=10e-12 +.param frequency=10e9 + +.options savecurrents +"} +C {vsource.sym} 0 -220 0 0 {name=Vdd value=vdd} +C {lab_wire.sym} 0 0 0 1 {name=l5 sig_type=std_logic lab=0} +C {divider_cml/divider_cml.sym} 720 -170 0 0 {name=x1} +C {rf_bufferdiff/rf_bufferdiff.sym} 460 -170 0 0 {name=x2} +C {divider_cml/divider_cml.sym} 1030 -170 0 0 {name=x3} +C {vsource.sym} 100 -220 0 0 {name=Vdd_tb value=vdd} +C {vsource.sym} 140 -70 0 0 {name=Vin_p value="pulse(0 \{vdd\} 0 rise_fall_time rise_fall_time \{0.5/frequency\} \{1.0/frequency\} 0)"} +C {vsource.sym} 280 -70 0 0 {name=Vin_n value="pulse(\{vdd\} 0 0 rise_fall_time rise_fall_time \{0.5/frequency\} \{1.0/frequency\} 0)"} +C {lab_wire.sym} 0 -340 0 1 {name=l1 sig_type=std_logic lab=vdd} +C {lab_wire.sym} 100 -320 0 1 {name=l2 sig_type=std_logic lab=vdd_tb} +C {lab_wire.sym} 520 -180 0 1 {name=l3 sig_type=std_logic lab=in_p} +C {lab_wire.sym} 520 -160 0 1 {name=l4 sig_type=std_logic lab=in_n} +C {lab_wire.sym} 820 -180 0 1 {name=l6 sig_type=std_logic lab=out_p} +C {lab_wire.sym} 820 -160 0 1 {name=l7 sig_type=std_logic lab=out_n} +C {lab_wire.sym} 280 -180 0 1 {name=l8 sig_type=std_logic lab=src_p} +C {lab_wire.sym} 280 -160 0 1 {name=l9 sig_type=std_logic lab=src_n} +C {lab_wire.sym} 820 -180 0 1 {name=l10 sig_type=std_logic lab=out_p} +C {lab_wire.sym} 820 -160 0 1 {name=l11 sig_type=std_logic lab=out_n} +C {lab_wire.sym} 820 -180 0 1 {name=l12 sig_type=std_logic lab=out_p} +C {lab_wire.sym} 820 -160 0 1 {name=l13 sig_type=std_logic lab=out_n} +C {lab_wire.sym} 1130 -180 0 1 {name=l14 sig_type=std_logic lab=out2_p} +C {lab_wire.sym} 1130 -160 0 1 {name=l15 sig_type=std_logic lab=out2_n} +C {divider_cml/divider_cml.sym} 1340 -170 0 0 {name=x4} +C {lab_wire.sym} 1440 -180 0 1 {name=l22 sig_type=std_logic lab=out4_p} +C {lab_wire.sym} 1440 -160 0 1 {name=l23 sig_type=std_logic lab=out4_n}
diff --git a/xschem/divider_ff/divider_ff.sch b/xschem/divider_ff/divider_ff.sch new file mode 100644 index 0000000..13ccb23 --- /dev/null +++ b/xschem/divider_ff/divider_ff.sch
@@ -0,0 +1,282 @@ +v {xschem version=2.9.8 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 0 0 240 0 {lab=GND} +N 240 -220 240 -190 {lab=#net1} +N 140 -280 200 -280 {lab=INn} +N 140 -160 200 -160 {lab=INp} +N 100 -60 200 -60 {lab=OUTp} +N 100 -220 100 -60 {lab=OUTp} +N 100 -380 200 -380 {lab=OUTp} +N 240 -350 240 -310 {lab=#net2} +N 240 -130 240 -90 {lab=#net3} +N 240 -160 260 -160 {lab=GND} +N 260 -60 260 0 {lab=GND} +N 240 0 260 0 {lab=GND} +N 240 -30 240 0 {lab=GND} +N 240 -60 260 -60 {lab=GND} +N 240 -440 240 -410 {lab=VDD} +N 240 -440 260 -440 {lab=VDD} +N 260 -380 260 -280 {lab=VDD} +N 240 -280 260 -280 {lab=VDD} +N 240 -380 260 -380 {lab=VDD} +N 380 -60 440 -60 {lab=#net1} +N 380 -220 380 -60 {lab=#net1} +N 380 -380 440 -380 {lab=#net1} +N 480 -350 480 -220 {lab=#net4} +N 480 -220 480 -90 {lab=#net4} +N 500 -60 500 0 {lab=GND} +N 480 0 500 0 {lab=GND} +N 480 -30 480 0 {lab=GND} +N 480 -60 500 -60 {lab=GND} +N 480 -440 480 -410 {lab=VDD} +N 480 -440 500 -440 {lab=VDD} +N 480 -380 500 -380 {lab=VDD} +N 260 -160 260 -60 {lab=GND} +N 260 -440 260 -380 {lab=VDD} +N 500 -440 500 -380 {lab=VDD} +N 240 -220 380 -220 {lab=#net1} +N 760 -220 760 -190 {lab=#net5} +N 660 -280 720 -280 {lab=INp} +N 660 -160 720 -160 {lab=INn} +N 620 -60 720 -60 {lab=#net4} +N 620 -220 620 -60 {lab=#net4} +N 620 -380 720 -380 {lab=#net4} +N 760 -350 760 -310 {lab=#net6} +N 760 -130 760 -90 {lab=#net7} +N 760 -160 780 -160 {lab=GND} +N 780 -60 780 0 {lab=GND} +N 760 0 780 0 {lab=GND} +N 760 -30 760 0 {lab=GND} +N 760 -60 780 -60 {lab=GND} +N 760 -440 760 -410 {lab=VDD} +N 760 -440 780 -440 {lab=VDD} +N 780 -380 780 -280 {lab=VDD} +N 760 -280 780 -280 {lab=VDD} +N 760 -380 780 -380 {lab=VDD} +N 780 -160 780 -60 {lab=GND} +N 780 -440 780 -380 {lab=VDD} +N 760 -220 900 -220 {lab=#net5} +N 480 -220 620 -220 {lab=#net4} +N 1140 -180 1320 -180 {lab=OUTn} +N 1240 -260 1320 -260 {lab=OUTp} +N 260 -440 480 -440 {lab=VDD} +N 500 -440 760 -440 {lab=VDD} +N 780 -440 1000 -440 {lab=VDD} +N 260 0 480 0 {lab=GND} +N 500 0 760 0 {lab=GND} +N 780 0 1000 0 {lab=GND} +N 1240 -220 1440 -220 {lab=OUTp} +N 1440 -480 1440 -220 {lab=OUTp} +N 40 -480 1440 -480 {lab=OUTp} +N 40 -480 40 -220 {lab=OUTp} +N 40 -220 100 -220 {lab=OUTp} +N 0 -440 240 -440 {lab=VDD} +N 900 -60 960 -60 {lab=#net5} +N 900 -220 900 -60 {lab=#net5} +N 900 -380 960 -380 {lab=#net5} +N 1000 -350 1000 -220 {lab=OUTn} +N 1000 -220 1000 -90 {lab=OUTn} +N 1020 -60 1020 0 {lab=GND} +N 1000 0 1020 0 {lab=GND} +N 1000 -30 1000 0 {lab=GND} +N 1000 -60 1020 -60 {lab=GND} +N 1000 -440 1000 -410 {lab=VDD} +N 1000 -440 1020 -440 {lab=VDD} +N 1000 -380 1020 -380 {lab=VDD} +N 1020 -440 1020 -380 {lab=VDD} +N 1140 -60 1200 -60 {lab=OUTn} +N 1140 -180 1140 -60 {lab=OUTn} +N 1140 -380 1200 -380 {lab=OUTn} +N 1240 -350 1240 -260 {lab=OUTp} +N 1240 -220 1240 -90 {lab=OUTp} +N 1260 -60 1260 0 {lab=GND} +N 1240 0 1260 0 {lab=GND} +N 1240 -30 1240 0 {lab=GND} +N 1240 -60 1260 -60 {lab=GND} +N 1240 -440 1240 -410 {lab=VDD} +N 1240 -440 1260 -440 {lab=VDD} +N 1240 -380 1260 -380 {lab=VDD} +N 1260 -440 1260 -380 {lab=VDD} +N 1000 -220 1140 -220 {lab=OUTn} +N 1020 -440 1240 -440 {lab=VDD} +N 1020 0 1240 0 {lab=GND} +N 240 -250 240 -220 {lab=#net1} +N 100 -380 100 -220 {lab=OUTp} +N 380 -380 380 -220 {lab=#net1} +N 760 -250 760 -220 {lab=#net5} +N 620 -380 620 -220 {lab=#net4} +N 900 -380 900 -220 {lab=#net5} +N 1140 -380 1140 -220 {lab=OUTn} +N 1140 -220 1140 -180 {lab=OUTn} +N 1240 -260 1240 -220 {lab=OUTp} +C {ipin.sym} 0 -200 0 0 {name=p1 lab=INn} +C {opin.sym} 1320 -260 0 0 {name=p5 lab=OUTp +} +C {iopin.sym} 0 -440 0 1 {name=p7 lab=VDD} +C {iopin.sym} 0 0 0 1 {name=p8 lab=GND +} +C {opin.sym} 1320 -180 0 0 {name=p10 lab=OUTn +} +C {ipin.sym} 0 -240 0 0 {name=p11 lab=INp} +C {lab_wire.sym} 140 -280 0 1 {name=l1 sig_type=std_logic lab=INn} +C {lab_wire.sym} 140 -160 0 1 {name=l2 sig_type=std_logic lab=INp} +C {lab_wire.sym} 660 -280 0 1 {name=l3 sig_type=std_logic lab=INp} +C {lab_wire.sym} 660 -160 0 1 {name=l4 sig_type=std_logic lab=INn} +C {sky130_fd_pr/pfet_01v8.sym} 220 -380 0 0 {name=Mpasspba +L=0.15 +W=1.5 +ad="'W * 0.29'" pd="'W + 2 * 0.29'" +as="'W * 0.29'" ps="'W + 2 * 0.29'" +nrd=0 nrs=0 +sa=0 sb=0 sd=0 +nf=1 mult=2 +model=pfet_01v8 +spiceprefix=X +} +C {sky130_fd_pr/pfet_01v8.sym} 220 -280 0 0 {name=Mpasspca +L=0.15 +W=1.5 +ad="'W * 0.29'" pd="'W + 2 * 0.29'" +as="'W * 0.29'" ps="'W + 2 * 0.29'" +nrd=0 nrs=0 +sa=0 sb=0 sd=0 +nf=1 mult=2 +model=pfet_01v8 +spiceprefix=X +} +C {sky130_fd_pr/pfet_01v8.sym} 460 -380 0 0 {name=Mpasspba1Minvap +L=0.15 +W=1.5 +ad="'W * 0.29'" pd="'W + 2 * 0.29'" +as="'W * 0.29'" ps="'W + 2 * 0.29'" +nrd=0 nrs=0 +sa=0 sb=0 sd=0 +nf=1 mult=2 +model=pfet_01v8 +spiceprefix=X +} +C {sky130_fd_pr/pfet_01v8.sym} 740 -380 0 0 {name=Mpasspba3 +L=0.15 +W=1.5 +ad="'W * 0.29'" pd="'W + 2 * 0.29'" +as="'W * 0.29'" ps="'W + 2 * 0.29'" +nrd=0 nrs=0 +sa=0 sb=0 sd=0 +nf=1 mult=2 +model=pfet_01v8 +spiceprefix=X +} +C {sky130_fd_pr/pfet_01v8.sym} 740 -280 0 0 {name=Mpasspca2 +L=0.15 +W=1.5 +ad="'W * 0.29'" pd="'W + 2 * 0.29'" +as="'W * 0.29'" ps="'W + 2 * 0.29'" +nrd=0 nrs=0 +sa=0 sb=0 sd=0 +nf=1 mult=2 +model=pfet_01v8 +spiceprefix=X +} +C {sky130_fd_pr/pfet_01v8.sym} 980 -380 0 0 {name=Minvap5 +L=0.15 +W=1.5 +ad="'W * 0.29'" pd="'W + 2 * 0.29'" +as="'W * 0.29'" ps="'W + 2 * 0.29'" +nrd=0 nrs=0 +sa=0 sb=0 sd=0 +nf=1 mult=2 +model=pfet_01v8 +spiceprefix=X +} +C {sky130_fd_pr/pfet_01v8.sym} 1220 -380 0 0 {name=Minvap1 +L=0.15 +W=1.5 +ad="'W * 0.29'" pd="'W + 2 * 0.29'" +as="'W * 0.29'" ps="'W + 2 * 0.29'" +nrd=0 nrs=0 +sa=0 sb=0 sd=0 +nf=1 mult=2 +model=pfet_01v8 +spiceprefix=X +} +C {sky130_fd_pr/nfet_01v8.sym} 220 -160 0 0 {name=Mpassnca +L=0.15 +W=1 +ad="'W * 0.29'" pd="'W + 2 * 0.29'" +as="'W * 0.29'" ps="'W + 2 * 0.29'" +nrd=0 nrs=0 +sa=0 sb=0 sd=0 +nf=1 mult=1 +model=nfet_01v8 +spiceprefix=X +} +C {sky130_fd_pr/nfet_01v8.sym} 220 -60 0 0 {name=Mpassnba +L=0.15 +W=1 +ad="'W * 0.29'" pd="'W + 2 * 0.29'" +as="'W * 0.29'" ps="'W + 2 * 0.29'" +nrd=0 nrs=0 +sa=0 sb=0 sd=0 +nf=1 mult=1 +model=nfet_01v8 +spiceprefix=X +} +C {sky130_fd_pr/nfet_01v8.sym} 460 -60 0 0 {name=Minvan +L=0.15 +W=1 +ad="'W * 0.29'" pd="'W + 2 * 0.29'" +as="'W * 0.29'" ps="'W + 2 * 0.29'" +nrd=0 nrs=0 +sa=0 sb=0 sd=0 +nf=1 mult=1 +model=nfet_01v8 +spiceprefix=X +} +C {sky130_fd_pr/nfet_01v8.sym} 740 -160 0 0 {name=Mpassnca1 +L=0.15 +W=1 +ad="'W * 0.29'" pd="'W + 2 * 0.29'" +as="'W * 0.29'" ps="'W + 2 * 0.29'" +nrd=0 nrs=0 +sa=0 sb=0 sd=0 +nf=1 mult=1 +model=nfet_01v8 +spiceprefix=X +} +C {sky130_fd_pr/nfet_01v8.sym} 740 -60 0 0 {name=Mpassnba4 +L=0.15 +W=1 +ad="'W * 0.29'" pd="'W + 2 * 0.29'" +as="'W * 0.29'" ps="'W + 2 * 0.29'" +nrd=0 nrs=0 +sa=0 sb=0 sd=0 +nf=1 mult=1 +model=nfet_01v8 +spiceprefix=X +} +C {sky130_fd_pr/nfet_01v8.sym} 980 -60 0 0 {name=Minvan6 +L=0.15 +W=1 +ad="'W * 0.29'" pd="'W + 2 * 0.29'" +as="'W * 0.29'" ps="'W + 2 * 0.29'" +nrd=0 nrs=0 +sa=0 sb=0 sd=0 +nf=1 mult=1 +model=nfet_01v8 +spiceprefix=X +} +C {sky130_fd_pr/nfet_01v8.sym} 1220 -60 0 0 {name=Minvan2 +L=0.15 +W=1 +ad="'W * 0.29'" pd="'W + 2 * 0.29'" +as="'W * 0.29'" ps="'W + 2 * 0.29'" +nrd=0 nrs=0 +sa=0 sb=0 sd=0 +nf=1 mult=1 +model=nfet_01v8 +spiceprefix=X +}
diff --git a/xschem/divider_ff/divider_ff.sym b/xschem/divider_ff/divider_ff.sym new file mode 100644 index 0000000..733bae2 --- /dev/null +++ b/xschem/divider_ff/divider_ff.sym
@@ -0,0 +1,36 @@ +v {xschem version=2.9.7 file_version=1.1} +G {type=subcircuit +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 3 -16 0 -5 0 {} +L 3 -11 -3 -10 -3 {} +L 3 -11 3 -10 3 {} +L 4 -80 -40 -80 40 {} +L 4 80 -40 80 40 {} +L 4 80 -10 100 -10 {} +L 4 80 10 100 10 {} +L 4 -100 -10 -80 -10 {} +L 4 -100 10 -80 10 {} +L 4 -80 -40 80 -40 {} +L 4 -80 40 80 40 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -2.5 -62.5 2.5 -57.5 {name=VDD dir=inout } +B 5 97.5 -12.5 102.5 -7.5 {name=OUTp dir=out } +B 5 97.5 7.5 102.5 12.5 {name=OUTn dir=out } +B 5 -102.5 -12.5 -97.5 -7.5 {name=INp dir=in } +B 5 -102.5 7.5 -97.5 12.5 {name=INn dir=in } +B 5 -2.5 57.5 2.5 62.5 {name=GND dir=inout } +T {@symname} 32.5 64 0 0 0.3 0.3 {} +T {@name} 35 48 0 0 0.2 0.2 {} +T {VDD} 12 -35 0 1 0.2 0.2 {} +T {OUTp} 75 -14 0 1 0.2 0.2 {} +T {OUTn} 75 6 0 1 0.2 0.2 {} +T {INp} -75 -14 0 0 0.2 0.2 {} +T {INn} -75 6 0 0 0.2 0.2 {} +T {GND} -12 35 2 1 0.2 0.2 {} +T {2} 0 -12 0 0 0.4 0.4 {}
diff --git a/xschem/divider_ff/test/divider_ff_test.sch b/xschem/divider_ff/test/divider_ff_test.sch new file mode 100644 index 0000000..a6240ee --- /dev/null +++ b/xschem/divider_ff/test/divider_ff_test.sch
@@ -0,0 +1,112 @@ +v {xschem version=2.9.8 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 480 -60 540 -60 {lab=in_p} +N 480 -220 480 -60 {lab=in_p} +N 480 -380 540 -380 {lab=in_p} +N 580 -350 580 -220 {lab=in_n} +N 580 -220 580 -90 {lab=in_n} +N 600 -60 600 0 {lab=0} +N 580 0 600 0 {lab=0} +N 580 -30 580 0 {lab=0} +N 580 -60 600 -60 {lab=0} +N 580 -440 580 -410 {lab=#net1} +N 580 -440 600 -440 {lab=#net1} +N 580 -380 600 -380 {lab=#net1} +N 600 -440 600 -380 {lab=#net1} +N 340 -220 480 -220 {lab=in_p} +N 360 -440 580 -440 {lab=#net1} +N 360 0 580 0 {lab=0} +N 480 -240 850 -240 {lab=in_p} +N 580 -220 850 -220 {lab=in_n} +N 950 -400 950 -290 {lab=#net2} +N 600 -440 950 -440 {lab=#net1} +N 950 -170 950 0 {lab=0} +N 600 0 950 0 {lab=0} +N 240 -60 300 -60 {lab=in_vs} +N 240 -220 240 -60 {lab=in_vs} +N 240 -380 300 -380 {lab=in_vs} +N 340 -350 340 -220 {lab=in_p} +N 340 -220 340 -90 {lab=in_p} +N 360 -60 360 0 {lab=0} +N 340 0 360 0 {lab=0} +N 340 -30 340 0 {lab=0} +N 340 -60 360 -60 {lab=0} +N 340 -440 340 -410 {lab=#net1} +N 340 -440 360 -440 {lab=#net1} +N 340 -380 360 -380 {lab=#net1} +N 360 -440 360 -380 {lab=#net1} +N 1420 -60 1480 -60 {lab=out_p} +N 1420 -240 1420 -60 {lab=out_p} +N 1420 -380 1480 -380 {lab=out_p} +N 1520 -350 1520 -90 {lab=#net3} +N 1540 -60 1540 0 {lab=0} +N 1520 0 1540 0 {lab=0} +N 1520 -30 1520 0 {lab=0} +N 1520 -60 1540 -60 {lab=0} +N 1520 -440 1520 -410 {lab=#net1} +N 1520 -440 1540 -440 {lab=#net1} +N 1520 -380 1540 -380 {lab=#net1} +N 1540 -440 1540 -380 {lab=#net1} +N 1300 -440 1520 -440 {lab=#net1} +N 1300 0 1520 0 {lab=0} +N 1180 -60 1240 -60 {lab=out_n} +N 1180 -220 1180 -60 {lab=out_n} +N 1180 -380 1240 -380 {lab=out_n} +N 1280 -350 1280 -90 {lab=#net4} +N 1300 -60 1300 0 {lab=0} +N 1280 0 1300 0 {lab=0} +N 1280 -30 1280 0 {lab=0} +N 1280 -60 1300 -60 {lab=0} +N 1280 -440 1280 -410 {lab=#net1} +N 1280 -440 1300 -440 {lab=#net1} +N 1280 -380 1300 -380 {lab=#net1} +N 1300 -440 1300 -380 {lab=#net1} +N 950 -440 1280 -440 {lab=#net1} +N 950 0 1280 0 {lab=0} +N 1050 -220 1180 -220 {lab=out_n} +N 1050 -240 1420 -240 {lab=out_p} +N 480 -240 480 -220 {lab=in_p} +N 480 -380 480 -240 {lab=in_p} +N 1420 -380 1420 -240 {lab=out_p} +N 1180 -380 1180 -220 {lab=out_n} +N 130 -90 130 0 {lab=0} +N 130 0 340 0 {lab=0} +N 130 -220 130 -150 {lab=in_vs} +N 130 -220 240 -220 {lab=in_vs} +N -0 -440 -0 -260 { lab=#net1} +N -0 -440 340 -440 { lab=#net1} +N -0 -200 -0 0 { lab=0} +N -0 0 130 -0 { lab=0} +N 790 -400 790 -360 { lab=#net2} +N 790 -400 950 -400 { lab=#net2} +N 240 -380 240 -220 {lab=in_vs} +N 790 -300 790 0 { lab=0} +C {pmos4.sym} 560 -380 0 0 {name=XMinvap1 model=sky130_fd_pr__pfet_01v8 w=3 l=0.15 m=1} +C {nmos4.sym} 560 -60 0 0 {name=XMinvan2 model=sky130_fd_pr__nfet_01v8 w=1 l=0.15 m=1} +C {vsource.sym} 130 -120 0 0 {name=Vin value="pulse(0 vdd 0 \{0.001/frequency\} \{0.001/frequency\} \{0.5/frequency\} \{1.0/frequency\} 0)"} +C {pmos4.sym} 320 -380 0 0 {name=XMinvap2 model=sky130_fd_pr__pfet_01v8 w=3 l=0.15 m=1} +C {nmos4.sym} 320 -60 0 0 {name=XMinvan3 model=sky130_fd_pr__nfet_01v8 w=1 l=0.15 m=1} +C {pmos4.sym} 1260 -380 0 0 {name=XMinvap3 model=sky130_fd_pr__pfet_01v8 w=3 l=0.15 m=1} +C {pmos4.sym} 1500 -380 0 0 {name=XMinvap6 model=sky130_fd_pr__pfet_01v8 w=3 l=0.15 m=1} +C {nmos4.sym} 1500 -60 0 0 {name=XMinvan7 model=sky130_fd_pr__nfet_01v8 w=1 l=0.15 m=1} +C {pmos4.sym} 1260 -380 0 0 {name=XMinvap8 model=sky130_fd_pr__pfet_01v8 w=3 l=0.15 m=1} +C {nmos4.sym} 1260 -60 0 0 {name=XMinvan9 model=sky130_fd_pr__nfet_01v8 w=1 l=0.15 m=1} +C {lab_wire.sym} 130 -220 0 1 {name=l1 sig_type=std_logic lab=in_vs} +C {divider_ff/divider_ff.sym} 950 -230 0 0 {name=x1} +C {vsource.sym} 0 -230 0 0 {name=Vddtb value=vdd} +C {lab_wire.sym} 0 0 0 1 {name=l2 sig_type=std_logic lab=0} +C {lab_wire.sym} 670 -240 0 1 {name=l3 sig_type=std_logic lab=in_p} +C {lab_wire.sym} 670 -220 0 1 {name=l4 sig_type=std_logic lab=in_n} +C {lab_wire.sym} 1100 -240 0 1 {name=l5 sig_type=std_logic lab=out_p} +C {lab_wire.sym} 1100 -220 0 1 {name=l6 sig_type=std_logic lab=out_n} +C {code_shown.sym} 0 -570 0 0 {name=SPICE only_toplevel=false value=".lib /usr/local/share/sky130_fd_pr/models/sky130.lib.spice ss +.temp 125 +.tran 0.01n 10n +.param vdd=1.8 +.param frequency=2e9 +.save all"} +C {vsource.sym} 790 -330 0 0 {name=Vdd value=vdd}
diff --git a/xschem/fractional_n_divider/config.tcl b/xschem/fractional_n_divider/config.tcl new file mode 100644 index 0000000..cd7567e --- /dev/null +++ b/xschem/fractional_n_divider/config.tcl
@@ -0,0 +1,25 @@ +# User config +set ::env(DESIGN_NAME) fractional_n_divider + +# Change if needed +set ::env(VERILOG_FILES) [glob $::env(DESIGN_DIR)/src/*.v] + +set ::env(FP_PIN_ORDER_CFG) $::env(DESIGN_DIR)/pin_order.cfg + +# Fill this +set ::env(CLOCK_PERIOD) "10" +set ::env(CLOCK_PORT) "input_frequency" +# set ::env(CLOCK_NET) $::env(CLOCK_PORT) + +set ::env(CELL_PAD) 4 +set ::env(SYNTH_MAX_FANOUT) 5 +set ::env(FP_CORE_UTIL) 49 +set ::env(PL_TARGET_DENSITY) [ expr ($::env(FP_CORE_UTIL)+5) / 100.0 ] + + +set filename $::env(DESIGN_DIR)/$::env(PDK)_$::env(STD_CELL_LIBRARY)_config.tcl +if { [file exists $filename] == 1} { + source $filename +} + +
diff --git a/xschem/fractional_n_divider/doc/mash111.svg b/xschem/fractional_n_divider/doc/mash111.svg new file mode 100644 index 0000000..21d6237 --- /dev/null +++ b/xschem/fractional_n_divider/doc/mash111.svg
@@ -0,0 +1,939 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="100.64648mm" + height="66.633179mm" + viewBox="0 0 100.64648 66.633179" + version="1.1" + id="svg8" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" + sodipodi:docname="mash111.svg"> + <defs + id="defs2"> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker3781" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path3779" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker3613" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path3611" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker2549" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path2547" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2250" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path2248" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker2154" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path2152" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker1896" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path1894" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker1635" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path1633" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker1276" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path1274" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path1009" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2250-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path2248-3" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker2154-1" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2152-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker1896-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path1894-9" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker1635-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path1633-2" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker1276-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path1274-6" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path1009-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker2549-1" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2547-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker1276-2-1" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path1274-6-5" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-4-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path1009-1-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="3.959798" + inkscape:cx="193.94913" + inkscape:cy="163.72649" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="true" + inkscape:window-width="2560" + inkscape:window-height="1052" + inkscape:window-x="1366" + inkscape:window-y="0" + inkscape:window-maximized="1" + fit-margin-top="1" + fit-margin-left="1" + fit-margin-bottom="1" + fit-margin-right="1"> + <inkscape:grid + type="xygrid" + id="grid815" + originx="-48.73605" + originy="-144.25625" /> + </sodipodi:namedview> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-48.736046,-86.110574)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 56.885416,122.375 v 5.29167 l 6.614583,3.96875 -6.614583,3.96875 v 5.29166 l 17.197916,-6.61458 10e-7,-5.29167 z" + id="path817" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccc" /> + <rect + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.5291667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" + id="rect838" + width="7.9375" + height="7.9374948" + x="63.5" + y="143.54167" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="65.142899" + y="149.36787" + id="text842"><tspan + sodipodi:role="line" + id="tspan840" + x="65.142899" + y="149.36787" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">z</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="68.095955" + y="147.22972" + id="text842-4"><tspan + sodipodi:role="line" + id="tspan840-9" + x="68.095955" + y="147.22972" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">-1</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM);paint-order:normal" + d="M 63.499999,147.51042 H 52.916666 V 138.25 H 55.5625" + id="path862" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1276)" + d="m 74.083332,131.63542 h 3.96875 v 15.875 h -5.291665" + id="path1266" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="57.683598" + y="126.2355" + id="text842-9"><tspan + sodipodi:role="line" + id="tspan840-3" + x="57.683598" + y="126.2355" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="57.447365" + y="138.90715" + id="text842-9-6"><tspan + sodipodi:role="line" + id="tspan840-3-0" + x="57.447365" + y="138.90715" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="67.936203" + y="132.53825" + id="text842-9-6-5"><tspan + sodipodi:role="line" + id="tspan840-3-0-0" + x="67.936203" + y="132.53825" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">A+B</tspan></text> + <circle + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:normal" + id="path1382" + cx="66.145836" + cy="110.46876" + r="3.96875" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 63.499999,110.46875 h 5.291667" + id="path1384" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 66.145833,107.82292 v 5.29166" + id="path1384-2" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1635)" + d="M 66.145833,125.81458 V 115.76042" + id="path1625" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <rect + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.52916676;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" + id="rect838-9" + width="7.9375" + height="7.9374948" + x="70.114586" + y="94.59375" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="71.757484" + y="100.41994" + id="text842-43"><tspan + sodipodi:role="line" + id="tspan840-5" + x="71.757484" + y="100.41994" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">z</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="74.710541" + y="98.281799" + id="text842-4-1"><tspan + sodipodi:role="line" + id="tspan840-9-7" + x="74.710541" + y="98.281799" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">-1</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1896)" + d="m 70.114583,98.5625 h -3.968751 v 6.61458" + id="path1886" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2154)" + d="M 82.020832,110.46875 V 98.5625 H 79.375" + id="path2144" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2250)" + d="M 82.020832,110.46875 H 71.4375" + id="path2240" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <circle + style="opacity:1;fill:#000000;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:normal" + id="path2336" + cx="82.020836" + cy="110.46875" + r="0.26458332" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.52916676;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 89.958335,122.375 v 5.29167 l 6.61458,3.96875 -6.61458,3.96875 v 5.29166 l 17.197905,-6.61458 v -5.29167 z" + id="path817-2" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccc" /> + <rect + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.52916676;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" + id="rect838-8" + width="7.9375" + height="7.9374948" + x="96.572914" + y="143.54167" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="98.215813" + y="149.36787" + id="text842-8"><tspan + sodipodi:role="line" + id="tspan840-92" + x="98.215813" + y="149.36787" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">z</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="101.16886" + y="147.22972" + id="text842-4-8"><tspan + sodipodi:role="line" + id="tspan840-9-8" + x="101.16886" + y="147.22972" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">-1</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-4);paint-order:normal" + d="M 96.572915,147.51042 H 85.989585 V 138.25 h 2.64583" + id="path862-8" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1276-2)" + d="m 107.15624,131.63542 h 3.96875 v 15.875 h -5.29166" + id="path1266-6" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="90.756516" + y="126.23549" + id="text842-9-8"><tspan + sodipodi:role="line" + id="tspan840-3-3" + x="90.756516" + y="126.23549" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="90.520271" + y="138.90715" + id="text842-9-6-8"><tspan + sodipodi:role="line" + id="tspan840-3-0-3" + x="90.520271" + y="138.90715" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="101.00911" + y="132.53825" + id="text842-9-6-5-3"><tspan + sodipodi:role="line" + id="tspan840-3-0-0-3" + x="101.00911" + y="132.53825" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">A+B</tspan></text> + <circle + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.52916676;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:normal" + id="path1382-8" + cx="99.218765" + cy="110.46875" + r="3.96875" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 96.572915,110.46875 h 5.291665" + id="path1384-0" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 99.218745,107.82292 v 5.29166" + id="path1384-2-4" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1635-4)" + d="M 99.218745,125.81458 V 115.76042" + id="path1625-7" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <rect + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.52916682;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" + id="rect838-9-6" + width="7.9375" + height="7.9374948" + x="103.18752" + y="94.593735" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="104.83039" + y="100.41993" + id="text842-43-8"><tspan + sodipodi:role="line" + id="tspan840-5-9" + x="104.83039" + y="100.41993" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">z</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="107.78345" + y="98.281792" + id="text842-4-1-0"><tspan + sodipodi:role="line" + id="tspan840-9-7-6" + x="107.78345" + y="98.281792" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">-1</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1896-6)" + d="m 103.18749,98.5625 h -3.968745 v 6.61458" + id="path1886-8" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2154-1)" + d="M 115.09374,110.46875 V 98.5625 h -2.64583" + id="path2144-7" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2250-4)" + d="M 115.09374,110.46875 H 104.51041" + id="path2240-9" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <circle + style="opacity:1;fill:#000000;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:normal" + id="path2336-0" + cx="115.09377" + cy="110.46873" + r="0.26458332" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2549)" + d="m 78.052082,131.63542 v -6.61459 h 10.583335" + id="path2539" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <circle + style="opacity:1;fill:#000000;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:normal" + id="path2336-3" + cx="78.052086" + cy="131.63542" + r="0.26458332" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 95.25,110.46875 H 82.020832" + id="path2698" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="66.648727" + y="125.17243" + id="text842-9-3"><tspan + sodipodi:role="line" + id="tspan840-3-37" + x="66.648727" + y="125.17243" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="68.555138" + y="125.74648" + id="text842-9-3-3"><tspan + sodipodi:role="line" + id="tspan840-3-37-2" + x="68.555138" + y="125.74648" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.41111112px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">OUT</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="99.745262" + y="125.04015" + id="text842-9-3-6"><tspan + sodipodi:role="line" + id="tspan840-3-37-5" + x="99.745262" + y="125.04015" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="101.65167" + y="125.6142" + id="text842-9-3-3-2"><tspan + sodipodi:role="line" + id="tspan840-3-37-2-6" + x="101.65167" + y="125.6142" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.41111112px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">OUT</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.52916682;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 123.03125,122.375 v 5.29167 l 6.61458,3.96875 -6.61458,3.96875 v 5.29166 l 17.19791,-6.61458 v -5.29167 z" + id="path817-2-2" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccc" /> + <rect + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.52916682;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" + id="rect838-8-5" + width="7.9375" + height="7.9374948" + x="129.64584" + y="143.54167" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="131.28876" + y="149.36789" + id="text842-8-7"><tspan + sodipodi:role="line" + id="tspan840-92-4" + x="131.28876" + y="149.36789" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">z</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="134.24179" + y="147.22974" + id="text842-4-8-9"><tspan + sodipodi:role="line" + id="tspan840-9-8-9" + x="134.24179" + y="147.22974" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">-1</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-4-4);paint-order:normal" + d="M 129.64583,147.51042 H 119.0625 V 138.25 h 2.64583" + id="path862-8-4" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1276-2-1)" + d="m 140.22916,131.63542 h 3.96875 v 15.875 h -5.29166" + id="path1266-6-5" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="123.82944" + y="126.23549" + id="text842-9-8-9"><tspan + sodipodi:role="line" + id="tspan840-3-3-3" + x="123.82944" + y="126.23549" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="123.59319" + y="138.90715" + id="text842-9-6-8-5"><tspan + sodipodi:role="line" + id="tspan840-3-0-3-7" + x="123.59319" + y="138.90715" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="134.08205" + y="132.53825" + id="text842-9-6-5-3-0"><tspan + sodipodi:role="line" + id="tspan840-3-0-0-3-8" + x="134.08205" + y="132.53825" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">A+B</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2549-1)" + d="m 111.12499,131.63542 v -6.61459 h 10.58334" + id="path2539-9" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="132.81819" + y="125.04016" + id="text842-9-3-6-9"><tspan + sodipodi:role="line" + id="tspan840-3-37-5-7" + x="132.81819" + y="125.04016" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="134.72461" + y="125.6142" + id="text842-9-3-3-2-8"><tspan + sodipodi:role="line" + id="tspan840-3-37-2-6-2" + x="134.72461" + y="125.6142" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.41111112px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">OUT</tspan></text> + <circle + style="opacity:1;fill:#000000;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:normal" + id="path2336-3-5" + cx="111.12499" + cy="131.63542" + r="0.26458332" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 132.29167,126.07917 V 110.46875 H 115.09374" + id="path3240" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker3613)" + d="M 51.59375,125.02083 H 55.5625" + id="path3603" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker3781)" + d="m 62.177083,110.46875 -9.26042,0 V 87.979169 l 92.604167,-2e-6" + id="path3771" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="49.504536" + y="126.09445" + id="text842-9-3-4"><tspan + sodipodi:role="line" + id="tspan840-3-37-9" + x="49.504536" + y="126.09445" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">F</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="146.85704" + y="88.698441" + id="text842-9-3-4-0"><tspan + sodipodi:role="line" + id="tspan840-3-37-9-2" + x="146.85704" + y="88.698441" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">α</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 128.32291,111.79167 1.32291,-2.64583" + id="path4023" + inkscape:connector-curvature="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="130.17233" + y="109.16515" + id="text842-9-3-6-0"><tspan + sodipodi:role="line" + id="tspan840-3-37-5-1" + x="130.17233" + y="109.16515" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">1</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 89.958329,111.79167 1.32291,-2.64583" + id="path4023-9" + inkscape:connector-curvature="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="91.807762" + y="109.16515" + id="text842-9-3-6-0-6"><tspan + sodipodi:role="line" + id="tspan840-3-37-5-1-2" + x="91.807762" + y="109.16515" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">2</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 56.885413,111.79167 1.32291,-2.64583" + id="path4023-9-1" + inkscape:connector-curvature="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="58.73484" + y="109.16515" + id="text842-9-3-6-0-6-2"><tspan + sodipodi:role="line" + id="tspan840-3-37-5-1-2-0" + x="58.73484" + y="109.16515" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">3</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 67.468746,105.44167 h 1.322917" + id="path958" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 100.54166,105.44167 h 1.32292" + id="path958-3" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + </g> +</svg>
diff --git a/xschem/fractional_n_divider/doc/mash111_pipelined.svg b/xschem/fractional_n_divider/doc/mash111_pipelined.svg new file mode 100644 index 0000000..c03b767 --- /dev/null +++ b/xschem/fractional_n_divider/doc/mash111_pipelined.svg
@@ -0,0 +1,1609 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="178.90163mm" + height="82.927132mm" + viewBox="0 0 178.90162 82.927132" + version="1.1" + id="svg8" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" + sodipodi:docname="mash111_pipelined.svg"> + <defs + id="defs2"> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker3781" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path3779" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker3613" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path3611" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker2549" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path2547" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2250" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path2248" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker1635" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path1633" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path1009" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2250-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM"> + <path + inkscape:connector-curvature="0" + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path2248-3" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path1009-1" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker2549-1" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2547-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker3613-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path3611-6" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker2549-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path2547-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker1635-9" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path1633-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker1635-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path1633-7" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker1635-7-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path1633-7-4" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker3613-5-9-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path3611-6-7-7" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker1635-9-0" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path1633-6-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker2549-7-7" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path2547-4-9" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="TriangleOutM-4-9" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path1009-1-3" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2250-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path2248-2" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker2154-19" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path2152-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker1896-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path1894-8" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2250-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path2248-34" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2250-9-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path2248-34-0" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2250-6-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path2248-2-3" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker2154-19-5" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path2152-6-6" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker1896-4-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path1894-8-9" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker3613-5-9-3-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path3611-6-7-7-0" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2250-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path2248-6" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker3613-5-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="TriangleOutM" + inkscape:collect="always"> + <path + transform="scale(0.4)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path3611-6-3" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker1635-7-4" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path1633-7-43" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0" + refX="0" + id="marker1635-7-4-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path1633-7-43-0" + d="M 5.77,0 -2.88,5 V -5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="scale(0.4)" + inkscape:connector-curvature="0" /> + </marker> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.4" + inkscape:cx="314.88284" + inkscape:cy="122.97093" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="true" + inkscape:window-width="1366" + inkscape:window-height="710" + inkscape:window-x="0" + inkscape:window-y="30" + inkscape:window-maximized="1" + fit-margin-top="1" + fit-margin-left="1" + fit-margin-bottom="1" + fit-margin-right="1"> + <inkscape:grid + type="xygrid" + id="grid815" + originx="-45.759485" + originy="-137.81805" /> + </sodipodi:namedview> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-45.75948,-76.254841)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 56.885413,135.60419 v 5.29167 l 6.614583,3.96875 -6.614583,3.96875 v 5.29166 l 17.197916,-6.61458 10e-7,-5.29167 z" + id="path817" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM);paint-order:normal" + d="M 63.499993,156.77085 H 52.91666 l 3e-6,-5.29166 h 2.645834" + id="path862" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="57.683594" + y="139.46469" + id="text842-9"><tspan + sodipodi:role="line" + id="tspan840-3" + x="57.683594" + y="139.46469" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="57.447361" + y="152.13635" + id="text842-9-6"><tspan + sodipodi:role="line" + id="tspan840-3-0" + x="57.447361" + y="152.13635" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="67.936203" + y="145.76746" + id="text842-9-6-5"><tspan + sodipodi:role="line" + id="tspan840-3-0-0" + x="67.936203" + y="145.76746" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">A+B</tspan></text> + <circle + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:normal" + id="path1382" + cx="66.145828" + cy="101.20834" + r="3.96875" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 63.499995,101.20833 h 5.291667" + id="path1384" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 66.145829,98.562506 v 5.291654" + id="path1384-2" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1635)" + d="m 66.14583,139.04377 -4e-6,-6.08541" + id="path1625" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2250)" + d="M 76.729163,101.20833 H 71.437496" + id="path2240" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.52916676;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 121.70832,135.6042 v 5.29167 l 6.61458,3.96875 -6.61458,3.96875 v 5.29166 l 17.1979,-6.61458 v -5.29167 z" + id="path817-2" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-4);paint-order:normal" + d="m 128.3229,156.77086 h -10.58333 v -5.29166 h 2.64583" + id="path862-8" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="122.50651" + y="139.46469" + id="text842-9-8"><tspan + sodipodi:role="line" + id="tspan840-3-3" + x="122.50651" + y="139.46469" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="122.27027" + y="152.13635" + id="text842-9-6-8"><tspan + sodipodi:role="line" + id="tspan840-3-0-3" + x="122.27027" + y="152.13635" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="132.75911" + y="145.76746" + id="text842-9-6-5-3"><tspan + sodipodi:role="line" + id="tspan840-3-0-0-3" + x="132.75911" + y="145.76746" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">A+B</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2549)" + d="m 78.052079,144.86461 v -6.61459 l 2.645831,1e-5" + id="path2539" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="66.648727" + y="138.40163" + id="text842-9-3"><tspan + sodipodi:role="line" + id="tspan840-3-37" + x="66.648727" + y="138.40163" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="68.555138" + y="138.97568" + id="text842-9-3-3"><tspan + sodipodi:role="line" + id="tspan840-3-37-2" + x="68.555138" + y="138.97568" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.41111112px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">OUT</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="131.49524" + y="138.26936" + id="text842-9-3-6"><tspan + sodipodi:role="line" + id="tspan840-3-37-5" + x="131.49524" + y="138.26936" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="133.40164" + y="138.8434" + id="text842-9-3-3-2"><tspan + sodipodi:role="line" + id="tspan840-3-37-2-6" + x="133.40164" + y="138.8434" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.41111112px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">OUT</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker3613)" + d="m 48.94791,138.25002 h 6.614587" + id="path3603" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker3781)" + d="m 56.885418,101.20832 h -9.26042 V 78.718749 l 164.041662,1e-5" + id="path3771" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="46.527969" + y="139.32365" + id="text842-9-3-4"><tspan + sodipodi:role="line" + id="tspan840-3-37-9" + x="46.527969" + y="139.32365" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">F</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="213.61009" + y="80.24794" + id="text842-9-3-4-0"><tspan + sodipodi:role="line" + id="tspan840-3-37-9-2" + x="213.61009" + y="80.24794" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444447px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">α</tspan></text> + <g + transform="translate(18.520826,-9.2603935)" + id="g4421-7"> + <rect + y="143.54167" + x="63.5" + height="7.9374948" + width="7.9375" + id="rect838-3" + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.5291667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" /> + <text + id="text842-1" + y="149.36787" + x="65.142899" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332" + y="149.36787" + x="65.142899" + id="tspan840-1" + sodipodi:role="line">z</tspan></text> + <text + id="text842-4-9" + y="147.22972" + x="68.095955" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332" + y="147.22972" + x="68.095955" + id="tspan840-9-0" + sodipodi:role="line">-1</tspan></text> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker3613-5)" + d="m 89.95832,138.25003 h 30.42709" + id="path3603-7" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2549-7)" + d="m 142.87499,144.86462 v -6.61459 l 2.64583,1e-5" + id="path2539-4" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <g + transform="translate(83.343729,-9.2603935)" + id="g4421-7-7"> + <rect + y="143.54167" + x="63.5" + height="7.9374948" + width="7.9375" + id="rect838-3-4" + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.5291667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" /> + <text + id="text842-1-8" + y="149.36787" + x="65.142899" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332" + y="149.36787" + x="65.142899" + id="tspan840-1-5" + sodipodi:role="line">z</tspan></text> + <text + id="text842-4-9-8" + y="147.22972" + x="68.095955" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332" + y="147.22972" + x="68.095955" + id="tspan840-9-0-2" + sodipodi:role="line">-1</tspan></text> + </g> + <rect + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.5291667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" + id="rect838-3-6" + width="7.9375" + height="7.9374948" + x="62.177074" + y="123.69794" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="63.819973" + y="129.52415" + id="text842-1-6"><tspan + sodipodi:role="line" + id="tspan840-1-4" + x="63.819973" + y="129.52415" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">z</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="66.773033" + y="127.38599" + id="text842-4-9-6"><tspan + sodipodi:role="line" + id="tspan840-9-0-28" + x="66.773033" + y="127.38599" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">-1</tspan></text> + <path + inkscape:connector-curvature="0" + id="path24833" + d="m 157.42708,95.916691 h 1.32291" + style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + <path + inkscape:connector-curvature="0" + id="path24833-2" + d="m 92.604161,95.916691 h 1.32291" + style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + <rect + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.52916676;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" + id="rect838-3-6-7" + width="7.9375" + height="7.9374948" + x="62.177074" + y="110.46877" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="63.819977" + y="116.29497" + id="text842-1-6-4"><tspan + sodipodi:role="line" + id="tspan840-1-4-2" + x="63.819977" + y="116.29497" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">z</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="66.773033" + y="114.15683" + id="text842-4-9-6-5"><tspan + sodipodi:role="line" + id="tspan840-9-0-28-2" + x="66.773033" + y="114.15683" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">-7</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1635-9)" + d="m 130.96874,139.04377 -1e-5,-6.0854" + id="path1625-0" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <g + transform="translate(63.499985,-19.843723)" + id="g4421-7-0-7"> + <rect + y="143.54167" + x="63.5" + height="7.9374948" + width="7.9375" + id="rect838-3-6-0" + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.5291667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" /> + <text + id="text842-1-6-1" + y="149.36787" + x="65.142899" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332" + y="149.36787" + x="65.142899" + id="tspan840-1-4-0" + sodipodi:role="line">z</tspan></text> + <text + id="text842-4-9-6-1" + y="147.22972" + x="68.095955" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332" + y="147.22972" + x="68.095955" + id="tspan840-9-0-28-3" + sodipodi:role="line">-1</tspan></text> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1635-7)" + d="M 66.145829,110.46875 V 106.5" + id="path1625-2" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1635-7-6)" + d="m 130.96873,110.46876 v -3.96875" + id="path1625-2-5" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <g + transform="translate(128.32293,-19.843723)" + id="g4421-7-0-7-9"> + <rect + y="143.54167" + x="63.5" + height="7.9374948" + width="7.9375" + id="rect838-3-6-0-9" + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.5291667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" /> + <text + id="text842-1-6-1-4" + y="149.36787" + x="65.142899" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332" + y="149.36787" + x="65.142899" + id="tspan840-1-4-0-5" + sodipodi:role="line">z</tspan></text> + <text + id="text842-4-9-6-1-1" + y="147.22972" + x="68.095955" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332" + y="147.22972" + x="68.095955" + id="tspan840-9-0-28-3-0" + sodipodi:role="line">-1</tspan></text> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 195.79166,123.69794 v -22.4896 l -48.94793,10e-6" + id="path9275" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <rect + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.52916682;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" + id="rect838-9-6-9" + width="7.9375" + height="7.9374948" + x="50.270832" + y="97.239586" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="51.913715" + y="103.06577" + id="text842-43-8-3"><tspan + sodipodi:role="line" + id="tspan840-5-9-7" + x="51.913715" + y="103.06577" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">z</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="54.866764" + y="100.92764" + id="text842-4-1-0-8"><tspan + sodipodi:role="line" + id="tspan840-9-7-6-7" + x="54.866764" + y="100.92764" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">-1</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 74.083327,144.8646 h 3.96875" + id="path14905" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 92.60416,138.25002 v 18.52083 l -30.427083,1e-5" + id="path15111" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <circle + style="opacity:1;fill:#000000;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:normal" + id="path2336-3-5-0" + cx="92.604141" + cy="138.25005" + r="0.26458332" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 138.90624,144.86461 h 3.96875" + id="path14905-9" + inkscape:connector-curvature="0" /> + <circle + style="opacity:1;fill:#000000;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:normal" + id="path2336-3-5-0-8" + cx="157.42705" + cy="138.25005" + r="0.26458332" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 157.42707,138.25003 v 18.52083 l -30.42708,1e-5" + id="path15111-4" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker3613-5-9-3)" + d="m 62.177081,101.20833 h -2.64583" + id="path3603-7-8-1" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.52916682;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 186.53125,135.6042 v 5.29167 l 6.61458,3.96875 -6.61458,3.96875 v 5.29166 l 17.1979,-6.61458 v -5.29167 z" + id="path817-2-2" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM-4-9);paint-order:normal" + d="M 193.14583,156.77086 H 182.5625 v -5.29166 h 2.64583" + id="path862-8-4" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="187.32942" + y="139.46469" + id="text842-9-8-3"><tspan + sodipodi:role="line" + id="tspan840-3-3-7" + x="187.32942" + y="139.46469" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="187.09319" + y="152.13635" + id="text842-9-6-8-1"><tspan + sodipodi:role="line" + id="tspan840-3-0-3-2" + x="187.09319" + y="152.13635" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="197.58203" + y="145.76746" + id="text842-9-6-5-3-2"><tspan + sodipodi:role="line" + id="tspan840-3-0-0-3-0" + x="197.58203" + y="145.76746" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">A+B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="196.31816" + y="138.26936" + id="text842-9-3-6-2"><tspan + sodipodi:role="line" + id="tspan840-3-37-5-1" + x="196.31816" + y="138.26936" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="198.22458" + y="138.8434" + id="text842-9-3-3-2-7"><tspan + sodipodi:role="line" + id="tspan840-3-37-2-6-5" + x="198.22458" + y="138.8434" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.41111112px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">OUT</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2549-7-7)" + d="m 207.69792,144.86462 v -6.61459 l 2.64583,1e-5" + id="path2539-4-1" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <g + transform="translate(148.16665,-9.2604005)" + id="g4421-7-7-7"> + <rect + y="143.54167" + x="63.5" + height="7.9374948" + width="7.9375" + id="rect838-3-4-4" + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.5291667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" /> + <text + id="text842-1-8-1" + y="149.36787" + x="65.142899" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332" + y="149.36787" + x="65.142899" + id="tspan840-1-5-7" + sodipodi:role="line">z</tspan></text> + <text + id="text842-4-9-8-1" + y="147.22972" + x="68.095955" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332" + y="147.22972" + x="68.095955" + id="tspan840-9-0-2-1" + sodipodi:role="line">-1</tspan></text> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1635-9-0)" + d="m 195.79167,139.04377 -1e-5,-6.0854" + id="path1625-0-1" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 203.72917,144.86461 h 3.96875" + id="path14905-9-7" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 222.25,138.25003 v 18.52083 l -30.42708,1e-5" + id="path15111-4-0" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <rect + style="opacity:1;fill:none;stroke:#4d4d4d;stroke-width:0.17638889;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.35277778, 0.35277778;stroke-dashoffset:0;paint-order:normal" + id="rect18510" + width="42.333332" + height="35.718746" + x="51.593742" + y="122.37502" /> + <rect + style="opacity:1;fill:none;stroke:#4d4d4d;stroke-width:0.17638889;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.35277778, 0.35277778;stroke-dashoffset:0;paint-order:normal" + id="rect18510-8" + width="42.333332" + height="35.718746" + x="116.41665" + y="122.37503" /> + <rect + style="opacity:1;fill:none;stroke:#4d4d4d;stroke-width:0.17638889;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.35277778, 0.35277778;stroke-dashoffset:0;paint-order:normal" + id="rect18510-5" + width="42.333332" + height="35.718746" + x="181.23958" + y="122.37503" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 219.60416,138.25003 H 222.25" + id="path18923" + inkscape:connector-curvature="0" /> + <circle + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.52916676;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:normal" + id="path1382-0" + cx="95.249992" + cy="101.20836" + r="3.96875" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 92.604152,101.20834 h 5.291667" + id="path1384-8" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 95.249986,98.562522 v 5.291648" + id="path1384-2-1" + inkscape:connector-curvature="0" /> + <rect + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.52916682;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" + id="rect838-9-0" + width="7.9375" + height="7.9374948" + x="99.218742" + y="85.333344" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="100.86164" + y="91.159531" + id="text842-43-2"><tspan + sodipodi:role="line" + id="tspan840-5-2" + x="100.86164" + y="91.159531" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">z</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="103.8147" + y="89.021393" + id="text842-4-1-9"><tspan + sodipodi:role="line" + id="tspan840-9-7-7" + x="103.8147" + y="89.021393" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">-1</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1896-4)" + d="m 99.218736,89.302097 h -3.968751 v 6.614575" + id="path1886-5" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2154-19)" + d="M 111.12498,101.20834 V 89.302097 h -2.64583" + id="path2144-6" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2250-6)" + d="m 116.41665,101.20834 h -15.875" + id="path2240-4" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <circle + style="opacity:1;fill:#000000;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:normal" + id="path2336-6" + cx="111.12501" + cy="101.20836" + r="0.26458332" /> + <rect + style="opacity:1;fill:none;stroke:#4d4d4d;stroke-width:0.17638889;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.35277778, 0.35277778;stroke-dashoffset:0;paint-order:normal" + id="rect18510-0-8" + width="63.500004" + height="23.8125" + x="48.947903" + y="84.010429" /> + <rect + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.52916682;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" + id="rect838-9-0-0" + width="7.9375" + height="7.9374948" + x="76.729156" + y="97.239594" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="78.372055" + y="103.06578" + id="text842-43-2-4"><tspan + sodipodi:role="line" + id="tspan840-5-2-11" + x="78.372055" + y="103.06578" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">z</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="81.325104" + y="100.92764" + id="text842-4-1-9-3"><tspan + sodipodi:role="line" + id="tspan840-9-7-7-5" + x="81.325104" + y="100.92764" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">-1</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2250-9)" + d="M 91.28124,101.20834 H 85.98957" + id="path2240-1" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <circle + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.52916676;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:normal" + id="path1382-3" + cx="130.96873" + cy="101.20835" + r="3.96875" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 128.32291,101.20834 h 5.29166" + id="path1384-7" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 130.96874,98.562512 v 5.291658" + id="path1384-2-6" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2250-7)" + d="m 141.55207,101.20834 h -5.29166" + id="path2240-15" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <rect + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.52916682;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" + id="rect838-9-6-9-0" + width="7.9375" + height="7.9374948" + x="115.09374" + y="97.239594" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="116.73664" + y="103.06578" + id="text842-43-8-3-6"><tspan + sodipodi:role="line" + id="tspan840-5-9-7-5" + x="116.73664" + y="103.06578" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">z</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="119.68967" + y="100.92765" + id="text842-4-1-0-8-0"><tspan + sodipodi:role="line" + id="tspan840-9-7-6-7-8" + x="119.68967" + y="100.92765" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">-1</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker3613-5-9-3-9)" + d="m 126.99999,101.20834 h -2.64583" + id="path3603-7-8-1-1" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <circle + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.52916682;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:normal" + id="path1382-0-2" + cx="160.07289" + cy="101.20837" + r="3.96875" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 157.42706,101.20835 h 5.29167" + id="path1384-8-2" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 160.0729,98.562528 v 5.291652" + id="path1384-2-1-6" + inkscape:connector-curvature="0" /> + <rect + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.52916682;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" + id="rect838-9-0-9" + width="7.9375" + height="7.9374948" + x="164.04164" + y="85.333351" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="165.68454" + y="91.159538" + id="text842-43-2-1"><tspan + sodipodi:role="line" + id="tspan840-5-2-0" + x="165.68454" + y="91.159538" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">z</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="168.6376" + y="89.0214" + id="text842-4-1-9-4"><tspan + sodipodi:role="line" + id="tspan840-9-7-7-2" + x="168.6376" + y="89.0214" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">-1</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1896-4-5)" + d="m 164.04165,89.302103 h -3.96875 v 6.614575" + id="path1886-5-7" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2154-19-5)" + d="M 175.94789,101.20835 V 89.302103 h -2.64583" + id="path2144-6-4" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2250-6-8)" + d="m 181.23956,101.20835 h -15.875" + id="path2240-4-0" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <circle + style="opacity:1;fill:#000000;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:normal" + id="path2336-6-3" + cx="175.94791" + cy="101.20837" + r="0.26458332" /> + <rect + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.52916682;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" + id="rect838-9-0-0-2" + width="7.9375" + height="7.9374948" + x="141.55206" + y="97.239601" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="143.19496" + y="103.06579" + id="text842-43-2-4-8"><tspan + sodipodi:role="line" + id="tspan840-5-2-11-0" + x="143.19496" + y="103.06579" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">z</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="146.14801" + y="100.92765" + id="text842-4-1-9-3-3"><tspan + sodipodi:role="line" + id="tspan840-9-7-7-5-7" + x="146.14801" + y="100.92765" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">-1</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2250-9-5)" + d="m 156.10415,101.20835 h -5.29167" + id="path2240-1-0" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker3613-5-0)" + d="m 154.78124,138.25003 h 30.42709" + id="path3603-7-4" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <rect + style="opacity:1;fill:none;stroke:#4d4d4d;stroke-width:0.17638889;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.35277778, 0.35277778;stroke-dashoffset:0;paint-order:normal" + id="rect18510-0-8-9" + width="63.500004" + height="23.8125" + x="113.77082" + y="84.010429" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1635-7-4)" + d="m 66.145826,123.69794 v -3.96875" + id="path1625-2-8" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <rect + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.52916682;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" + id="rect838-3-6-7-8" + width="7.9375" + height="7.9374948" + x="126.99999" + y="110.46877" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="128.6429" + y="116.29497" + id="text842-1-6-4-9"><tspan + sodipodi:role="line" + id="tspan840-1-4-2-2" + x="128.6429" + y="116.29497" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">z</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + x="131.59596" + y="114.15683" + id="text842-4-9-6-5-2"><tspan + sodipodi:role="line" + id="tspan840-9-0-28-2-3" + x="131.59596" + y="114.15683" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332">-3</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.35277778;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1635-7-4-6)" + d="m 130.96875,123.69794 v -3.96875" + id="path1625-2-8-1" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <g + transform="translate(35.718745,-9.2603978)" + id="g4421-7-3"> + <rect + y="143.54167" + x="63.5" + height="7.9374948" + width="7.9375" + id="rect838-3-67" + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.5291667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" /> + <text + id="text842-1-5" + y="149.36787" + x="65.142899" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332" + y="149.36787" + x="65.142899" + id="tspan840-1-3" + sodipodi:role="line">z</tspan></text> + <text + id="text842-4-9-5" + y="147.22972" + x="68.095955" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332" + y="147.22972" + x="68.095955" + id="tspan840-9-0-6" + sodipodi:role="line">-1</tspan></text> + </g> + <g + transform="translate(100.54166,-9.2603978)" + id="g4421-7-3-2"> + <rect + y="143.54167" + x="63.5" + height="7.9374948" + width="7.9375" + id="rect838-3-67-9" + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.5291667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" /> + <text + id="text842-1-5-1" + y="149.36787" + x="65.142899" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332" + y="149.36787" + x="65.142899" + id="tspan840-1-3-2" + sodipodi:role="line">z</tspan></text> + <text + id="text842-4-9-5-7" + y="147.22972" + x="68.095955" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.26458332" + y="147.22972" + x="68.095955" + id="tspan840-9-0-6-0" + sodipodi:role="line">-1</tspan></text> + </g> + </g> +</svg>
diff --git a/xschem/fractional_n_divider/fractional_n_divider.sym b/xschem/fractional_n_divider/fractional_n_divider.sym new file mode 100644 index 0000000..fe78b34 --- /dev/null +++ b/xschem/fractional_n_divider/fractional_n_divider.sym
@@ -0,0 +1,40 @@ +v {xschem version=2.9.8 file_version=1.2} +G {} +K {type=subcircuit +format="@name @pinlist @symname" +template="name=x1" +verilog_primitive=true +} +V {} +S {} +E {} +L 4 -130 -40 130 -40 {} +L 4 -130 40 130 40 {} +L 4 -130 -40 -130 40 {} +L 4 130 -40 130 40 {} +L 4 -150 -30 -130 -30 {} +L 4 130 -10 150 -10 {} +L 4 -150 -10 -130 -10 {} +L 4 -150 10 -130 10 {} +L 4 130 10 150 10 {} +L 4 -150 30 -130 30 {} +L 4 0 -60 0 -40 {} +L 4 0 40 0 60 {} +B 5 -152.5 -32.5 -147.5 -27.5 {name=rst dir=in } +B 5 147.5 -12.5 152.5 -7.5 {name=output_frequency dir=out } +B 5 -152.5 -12.5 -147.5 -7.5 {name=input_frequency dir=in } +B 5 -152.5 7.5 -147.5 12.5 {name=data_in[25:0] dir=in } +B 5 147.5 7.5 152.5 12.5 {name=dither_output dir=out } +B 5 -152.5 27.5 -147.5 32.5 {name=dither_select[1:0] dir=in } +B 5 -2.5 -62.5 2.5 -57.5 {name=VPWR dir=in } +B 5 -2.5 57.5 2.5 62.5 {name=VGND dir=in } +T {@symname} 32 44 0 0 0.3 0.3 {} +T {@name} 35 68 0 0 0.2 0.2 {} +T {rst} -125 -34 0 0 0.2 0.2 {} +T {output_frequency} 125 -14 0 1 0.2 0.2 {} +T {input_frequency} -125 -14 0 0 0.2 0.2 {} +T {data_in[25:0]} -125 6 0 0 0.2 0.2 {} +T {dither_select[1:0]} -125 26 0 0 0.2 0.2 {} +T {dither_output} 125 6 0 1 0.2 0.2 {} +T {VPWR} 14 -25 2 0 0.2 0.2 {} +T {VGND} -14 25 0 0 0.2 0.2 {}
diff --git a/xschem/fractional_n_divider/pin_order.cfg b/xschem/fractional_n_divider/pin_order.cfg new file mode 100644 index 0000000..7bc9d3d --- /dev/null +++ b/xschem/fractional_n_divider/pin_order.cfg
@@ -0,0 +1,13 @@ +#N + +#S + +#E +rst +divide_value.* +dither_select.* + +#W +dither_output +input_frequency +output_frequency
diff --git a/xschem/fractional_n_divider/spr.sh b/xschem/fractional_n_divider/spr.sh new file mode 100755 index 0000000..bbea987 --- /dev/null +++ b/xschem/fractional_n_divider/spr.sh
@@ -0,0 +1,3 @@ +#!/bin/bash +cd ../../../openlane/openlane +./run.sh /caravel_amsat_txrx_ic/xschem/fractional_n_divider
diff --git a/xschem/fractional_n_divider/src/fractional_n_divider.v b/xschem/fractional_n_divider/src/fractional_n_divider.v new file mode 100644 index 0000000..20990de --- /dev/null +++ b/xschem/fractional_n_divider/src/fractional_n_divider.v
@@ -0,0 +1,145 @@ +// Copyright 2020 Thomas Parry +// +// SOME LICENSE +// +// Fractional N Divider +// A fractional N divider using MASH modulation. +// +// The 'data_in' value divided by the modulus will be created +// in a quantisesd number stream with high passed noise shaping +// characteristic. +// + +module fractional_n_divider + # ( + parameter WIDTH_INTEGER = 10, + parameter WIDTH_MODULUS = 16, + parameter ORDER = 3, + parameter DATA_WIDTH = WIDTH_INTEGER+WIDTH_MODULUS + ) ( + input rst, + + // input and output frequencies + input input_frequency, + output output_frequency, + + // a manual interface for data + input [DATA_WIDTH-1:0] divide_value, + input [1:0] dither_select, + + // test outputs + output dither_output + ); + + // internal signals + wire [WIDTH_INTEGER-1:0] integer_value; + wire [WIDTH_MODULUS-1:0] fractional_value; + wire signed [ORDER-1:0] mash_output; + wire [WIDTH_INTEGER-1:0] count_target; + reg [WIDTH_INTEGER-1:0] count; + reg output_state; + reg dither; + reg dither_en_lfsr; + reg dither_in_lfsr; + reg dither_en_trng; + wire dither_out_lfsr; + wire dither_out_trng; + + + // split the divider values + assign integer_value = divide_value[DATA_WIDTH-1:WIDTH_MODULUS]; + assign fractional_value = divide_value[WIDTH_MODULUS-1:0] + dither; + + // instantiate the MASH modulator + mash_mod # ( + .WIDTH_MODULUS(WIDTH_MODULUS), + .ORDER(ORDER) + ) mash_mod_inst ( + .clk(output_frequency), + .rst(rst), + .data_in(fractional_value), + .data_out(mash_output) + ); + + // combine the integer and fractional components + assign count_target = $unsigned($signed(integer_value) + {{(WIDTH_INTEGER-ORDER){mash_output[ORDER-1]}}, mash_output}); + + // count until the target is met and then output a pulse + always @(posedge rst, posedge input_frequency) begin + if (rst) begin + count = 0; + output_state = 0; + end + else begin + if (count == count_target) begin + count = 0; + output_state = 1; + end + else begin + count = count + 1; + output_state = 0; + end + end + end + assign output_frequency = output_state; + + // LFSR based dither + lfsr_fib lfsr_fib_inst ( + .i_clk(output_frequency), + .i_reset(rst), + .i_ce(dither_en_lfsr), + .i_in(dither_in_lfsr), + .o_bit(dither_out_lfsr) + ); + + // TRNG based dither + trng trng_inst ( + .clk(output_frequency), + .rst(rst), + .stop(!dither_en_trng), + .random(dither_out_trng) + ); + + // select the dither source + always @(posedge output_frequency) begin + case(dither_select) + 2'b00 :begin + dither <= 0; + dither_en_lfsr <= 0; + dither_in_lfsr <= 0; + dither_en_trng <= 0; + end + + 2'b01 : begin + dither <= dither_out_trng; + dither_en_lfsr <= 0; + dither_in_lfsr <= 0; + dither_en_trng <= 1; + end + + 2'b10 : begin + dither <= dither_out_lfsr; + dither_en_lfsr <= 1; + dither_in_lfsr <= 0; + dither_en_trng <= 0; + end + + 2'b11 : begin + dither <= dither_out_lfsr; + dither_en_lfsr <= 1; + dither_in_lfsr <= 1; + dither_en_trng <= 0; + end + + default : begin + dither <= 0; + dither_en_lfsr <= 0; + dither_in_lfsr <= 0; + dither_en_trng <= 0; + end + endcase + end + + assign dither_output = dither; + +endmodule \ No newline at end of file
diff --git a/xschem/fractional_n_divider/src/lfsr_fib.v b/xschem/fractional_n_divider/src/lfsr_fib.v new file mode 100644 index 0000000..445a423 --- /dev/null +++ b/xschem/fractional_n_divider/src/lfsr_fib.v
@@ -0,0 +1,64 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Filename: lfsr_fib.v +// +// Project: DSP Filtering Example Project +// +// Purpose: +// +// Creator: Dan Gisselquist, Ph.D. +// Gisselquist Technology, LLC +// +//////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2017-2020, Gisselquist Technology, LLC +// +// This file is part of the DSP filtering set of designs. +// +// The DSP filtering designs are free RTL designs: you can redistribute them +// and/or modify any of them under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// The DSP filtering designs are distributed in the hope that they will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser +// General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with these designs. (It's in the $(ROOT)/doc directory. Run make +// with no target there if the PDF file isn't present.) If not, see +// <http://www.gnu.org/licenses/> for a copy. +// +// License: LGPL, v3, as defined and found on www.gnu.org, +// http://www.gnu.org/licenses/lgpl.html +// +//////////////////////////////////////////////////////////////////////////////// +// +// +`default_nettype none +// +module lfsr_fib(i_clk, i_reset, i_ce, i_in, o_bit); + parameter LN=8; // LFSR Register length/polynomial deg + parameter [(LN-1):0] TAPS = 8'h2d, + INITIAL_FILL = { { (LN-1){1'b0}}, 1'b1 }; + // + input wire i_clk, i_reset, i_ce, i_in; + output wire o_bit; + + reg [(LN-1):0] sreg; + + initial sreg = INITIAL_FILL; + always @(posedge i_clk) + if (i_reset) + begin + sreg <= INITIAL_FILL; + end else if (i_ce) + begin + sreg[(LN-2):0] <= sreg[(LN-1):1]; + sreg[(LN-1)] <= (^(sreg & TAPS)) ^ i_in; + end + + assign o_bit = sreg[0]; + +endmodule \ No newline at end of file
diff --git a/xschem/fractional_n_divider/src/mash_mod.v b/xschem/fractional_n_divider/src/mash_mod.v new file mode 100644 index 0000000..012e7d0 --- /dev/null +++ b/xschem/fractional_n_divider/src/mash_mod.v
@@ -0,0 +1,110 @@ +// Copyright 2020 Thomas Parry +// +// SOME LICENSE +// +// MASH Modulator +// A MASH (Multi-Stage Noise Shaping) delta sigma modulator. +// +// The 'data_in' value divided by the modulus will be created +// in a quantisesd number stream with high passed noise shaping +// characteristic. +// + +module mash_mod + # ( + parameter WIDTH_MODULUS = 16, + parameter ORDER = 3 + ) ( + input clk, + input rst, + input [WIDTH_MODULUS-1:0] data_in, + output [ORDER-1:0] data_out + ); + + // internal registers + reg [WIDTH_MODULUS-1:0] accumulator_output[ORDER-1:0]; + reg [WIDTH_MODULUS-1:0] accumulator_delay[ORDER-1:0]; + reg [4*(ORDER-1)-1:0] accumulator_carry[ORDER-1:0]; + reg signed [ORDER-1:0] sum_output[ORDER-2:0]; + reg signed [ORDER-1:0] sum_minus[ORDER-2:0]; + reg signed [ORDER-1:0] sum_delay[ORDER-2:0]; + + + genvar i; + generate + for (i = 0; i < ORDER; i = i + 1) begin + + // form the accumulators + if (i == 0) begin + always @(posedge rst, posedge clk) begin + if (rst) begin + accumulator_carry[i][0] <= 0; + accumulator_output[i] <= 0; + accumulator_delay[i] <= 0; + end + else begin + {accumulator_carry[i][0], accumulator_output[i]} <= data_in + accumulator_output[i]; + accumulator_delay[i] <= accumulator_output[i]; + end + end + end + else begin + always @(posedge rst, posedge clk) begin + if (rst) begin + accumulator_carry[i][0] <= 0; + accumulator_output[i] <= 0; + accumulator_delay[i] <= 0; + end + else begin + {accumulator_carry[i][0], accumulator_output[i]} <= accumulator_delay[i-1] + accumulator_output[i]; + accumulator_delay[i] <= accumulator_output[i]; + end + end + end + + // pipeline the carrys + always @(posedge rst, posedge clk) begin + if (rst) begin + accumulator_carry[i][4*(ORDER-1)-1:1] <= 0; + end + else begin + accumulator_carry[i][4*(ORDER-1)-1:1] <= accumulator_carry[i][4*(ORDER-1)-2:0]; + end + end + + // form the summers + if (i < ORDER-2) begin + always @(posedge rst, posedge clk) begin + if (rst) begin + sum_delay[i] <= 0; + sum_minus[i] <= 0; + sum_output[i] <= 0; + end + else begin + sum_delay[i] <= sum_output[i+1]; + sum_minus[i] <= sum_output[i+1] - sum_delay[i]; + sum_output[i] <= sum_minus[i] + {2'b00, accumulator_carry[i][4*(ORDER-1-i)-1]}; + end + end + end + else if (i == ORDER-2) begin + always @(posedge rst, posedge clk) begin + if (rst) begin + sum_delay[i] <= 0; + sum_minus[i] <= 0; + sum_output[i] <= 0; + end + else begin + sum_delay[i] <= {2'b00, accumulator_carry[ORDER-1][0]}; + sum_minus[i] <= {2'b00, accumulator_carry[ORDER-1][0]} - sum_delay[i]; + sum_output[i] <= sum_minus[i] + {2'b00, accumulator_carry[i][4*(ORDER-1-i)-1]}; + end + end + end + end + endgenerate + + // pass the output + assign data_out = sum_output[0]; + +endmodule \ No newline at end of file
diff --git a/xschem/fractional_n_divider/src/trng.v b/xschem/fractional_n_divider/src/trng.v new file mode 100644 index 0000000..770a46d --- /dev/null +++ b/xschem/fractional_n_divider/src/trng.v
@@ -0,0 +1,67 @@ +// +// Written by StanOverflow +// https://stackoverflow.com/questions/14497877/how-to-implement-a-pseudo-hardware-random-number-generator +// +// TRNG +// A true random number generator. +// +// A Galois Ring Oscillators(GARO) which is similar to an LFSR but +// completely asynchronous and will oscillate chaotically. +// The output bit will be sampled randomly. +// + + +module trng ( + input clk, + input rst, + input stop, + output random + ); + + (* keep *) wire [31:1] stage; + reg meta1, meta2; + + assign random = meta2; + + always@(posedge clk or posedge rst) + if (rst) begin + meta1 <= 1'b0; + meta2 <= 1'b0; + end else begin + meta1 <= stage[1]; + meta2 <= meta1; + end + + assign stage[1] = ~&{stage[2] ^ stage[1],stop}; + assign stage[2] = !stage[3]; + assign stage[3] = !stage[4] ^ stage[1]; + assign stage[4] = !stage[5] ^ stage[1]; + assign stage[5] = !stage[6] ^ stage[1]; + assign stage[6] = !stage[7] ^ stage[1]; + assign stage[7] = !stage[8]; + assign stage[8] = !stage[9] ^ stage[1]; + assign stage[9] = !stage[10] ^ stage[1]; + assign stage[10] = !stage[11]; + assign stage[11] = !stage[12]; + assign stage[12] = !stage[13] ^ stage[1]; + assign stage[13] = !stage[14]; + assign stage[14] = !stage[15] ^ stage[1]; + assign stage[15] = !stage[16] ^ stage[1]; + assign stage[16] = !stage[17] ^ stage[1]; + assign stage[17] = !stage[18]; + assign stage[18] = !stage[19]; + assign stage[19] = !stage[20] ^ stage[1]; + assign stage[20] = !stage[21] ^ stage[1]; + assign stage[21] = !stage[22]; + assign stage[22] = !stage[23]; + assign stage[23] = !stage[24]; + assign stage[24] = !stage[25]; + assign stage[25] = !stage[26]; + assign stage[26] = !stage[27] ^ stage[1]; + assign stage[27] = !stage[28]; + assign stage[28] = !stage[29]; + assign stage[29] = !stage[30]; + assign stage[30] = !stage[31]; + assign stage[31] = !stage[1]; + +endmodule \ No newline at end of file
diff --git a/xschem/fractional_n_divider/tests/.gitignore b/xschem/fractional_n_divider/tests/.gitignore new file mode 100644 index 0000000..4feb603 --- /dev/null +++ b/xschem/fractional_n_divider/tests/.gitignore
@@ -0,0 +1,9 @@ +__pycache__/ +sim_build/ +coverage/ +*.dat +coverage*.yml +coverage*.xml +*.vcd +results.xml +*.pyc
diff --git a/xschem/fractional_n_divider/tests/fractional_n_divider/Makefile b/xschem/fractional_n_divider/tests/fractional_n_divider/Makefile new file mode 100644 index 0000000..a7ff03a --- /dev/null +++ b/xschem/fractional_n_divider/tests/fractional_n_divider/Makefile
@@ -0,0 +1,27 @@ +TOPLEVEL_LANG ?= verilog + +PWD=$(shell pwd) + +# add the models to path +export PYTHONPATH := $(PWD)/../../models:$(PYTHONPATH) + +ifeq ($(TOPLEVEL_LANG),verilog) + VERILOG_SOURCES = $(PWD)/../../src/fractional_n_divider.v + VERILOG_SOURCES += $(PWD)/../../src/mash_mod.v + VERILOG_SOURCES += $(PWD)/../../src/lfsr_fib.v + VERILOG_SOURCES += $(PWD)/../../src/trng.v +else + $(error "A valid value (verilog) was not provided for TOPLEVEL_LANG=$(TOPLEVEL_LANG)") +endif + +EXTRA_ARGS := --trace --trace-structs --coverage +SIM := verilator + +TOPLEVEL := fractional_n_divider +MODULE := test_fractional_n_divider + +include $(shell cocotb-config --makefiles)/Makefile.sim + +# ( \ +# . $(PWD)/../../../../env/venv/bin/activate \ +# )
diff --git a/xschem/fractional_n_divider/tests/fractional_n_divider/dump.vcd.gz b/xschem/fractional_n_divider/tests/fractional_n_divider/dump.vcd.gz new file mode 100644 index 0000000..a36fe94 --- /dev/null +++ b/xschem/fractional_n_divider/tests/fractional_n_divider/dump.vcd.gz Binary files differ
diff --git a/xschem/fractional_n_divider/tests/fractional_n_divider/test_fractional_n_divider.py b/xschem/fractional_n_divider/tests/fractional_n_divider/test_fractional_n_divider.py new file mode 100644 index 0000000..34c4738 --- /dev/null +++ b/xschem/fractional_n_divider/tests/fractional_n_divider/test_fractional_n_divider.py
@@ -0,0 +1,74 @@ +import cocotb +from cocotb.triggers import Timer, RisingEdge, ClockCycles +from cocotb.clock import Clock +import cocotb_coverage +import random +import fractional_n_divider_model +from test_fractional_n_divider_coverage import * + + +# hardware constants +WIDTH_INTEGER = 10 +WIDTH_MODULUS = 16 +ORDER = 3 + + +# test constants +NUMBER_TESTS = 64 +NUMBER_SAMPLES = 2**16 + + +@cocotb.test() +async def coverage(dut): + """ + Test the output against the model with random input values + """ + + # create the model + model = fractional_n_divider_model.fractional_n_divider_model(integer_width=WIDTH_INTEGER, modulus_width=WIDTH_MODULUS, order=ORDER) + + # create an object that views the DUT state + status = FractionalNStatus(dut) + + # start clock + clock = Clock(dut.input_frequency, 2) + cocotb.fork(clock.start()) + + # loop through the tests + for test in range(NUMBER_TESTS): + + # reset the DUT + dut.rst = 1 + dut.divide_value = 0 + await ClockCycles(dut.input_frequency, 8) + dut.rst = 0 + model.reset() + + # create some random data + divide_value = random.random() * (2**WIDTH_INTEGER - 0.5*2**ORDER - 1) + divide_value_fp = int(divide_value * 2**WIDTH_MODULUS) + dut._log.info("Test number %d, input value = %f" % (test+1, divide_value)) + + # change the divide value + model.set_divide_value(divide_value) + + # update the divider value into the DUT + status.update() + output_data = await new_divider_value(dut, status, divide_value_fp) + await RisingEdge(dut.input_frequency) + + # loop through some clock cycles calculating samples + for sample in range(NUMBER_SAMPLES): + + # check the output matches the model + model_data = model.update() + output_data = int(dut.output_frequency) + assert(output_data == model_data), 'Model = %x, Simulation = %x' % (model_data, output_data) + + await RisingEdge(dut.input_frequency) + + + # print and export coverage report + coverage_db.report_coverage(dut._log.info, bins=True) + coverage_db.export_to_xml(filename="coverage_fractional_n_divider.xml") + coverage_db.export_to_yaml(filename="coverage_fractional_n_divider.yml") \ No newline at end of file
diff --git a/xschem/fractional_n_divider/tests/fractional_n_divider/test_fractional_n_divider_coverage.py b/xschem/fractional_n_divider/tests/fractional_n_divider/test_fractional_n_divider_coverage.py new file mode 100644 index 0000000..55ffb9d --- /dev/null +++ b/xschem/fractional_n_divider/tests/fractional_n_divider/test_fractional_n_divider_coverage.py
@@ -0,0 +1,39 @@ +import cocotb +from cocotb.triggers import RisingEdge, ReadOnly +from cocotb_coverage.coverage import * + +# auxiliary relation function to define bins matching within a range +range_relation = lambda val_, bin_ : bin_[0] <= val_ <= bin_[1] + +class FractionalNStatus(): + """ + Object representing modulator status + """ + def __init__(self, dut): + self.dut = dut + + # @cocotb.coroutine + def update(self): + self.divide_value = int(self.dut.divide_value) + + +#functional coverage - check that the DUT is getting suitably interacted with +FractionalNCoverage = coverage_section ( + CoverPoint( + name = "top.divide_value", + xf = lambda dut, status, divide_value : status.divide_value, + rel = range_relation, + bins = [(0,int(2**10*1/3)-1), (int(2**10*1/3),int(2**10*2/3)-1), (int(2**10*2/3),int(2**10-1))], + bins_labels = ["low", "med", "high"] + ) +) + + +# procedure of processing data +# coverage sampled here - at each function call +@FractionalNCoverage +async def new_divider_value(dut, status, divide_value): + + # provide new data and read old + dut.divide_value <= divide_value + await RisingEdge(dut.input_frequency) \ No newline at end of file
diff --git a/xschem/fractional_n_divider/tests/fractional_n_divider_tb.sch b/xschem/fractional_n_divider/tests/fractional_n_divider_tb.sch new file mode 100644 index 0000000..4bd9615 --- /dev/null +++ b/xschem/fractional_n_divider/tests/fractional_n_divider_tb.sch
@@ -0,0 +1,225 @@ +v {xschem version=2.9.7 file_version=1.1} +G {} +V {} +S {} +E {} +N -2340 -90 -2340 60 {lab=input_frequency} +N -2340 -90 -150 -90 {lab=input_frequency} +N -2250 -70 -150 -70 {lab=data_in[25:0]} +N -580 -60 -580 170 {lab=data_in[1]} +N -510 -60 -510 170 {lab=data_in[0]} +N -440 -40 -440 170 {lab=dither_select[1]} +N -370 -40 -370 170 {lab=dither_select[0]} +N 470 -90 470 90 {lab=output_frequency} +N 150 -90 470 -90 {lab=output_frequency} +N -2340 120 -2340 280 {lab=0} +N 360 280 470 280 {lab=0} +N 470 150 470 280 {lab=0} +N -580 230 -580 280 {lab=0} +N -510 230 -510 280 {lab=0} +N -440 230 -440 280 {lab=0} +N -370 230 -370 280 {lab=0} +N 150 -70 360 -70 {lab=dither_output} +N 360 -70 360 90 {lab=dither_output} +N 360 150 360 280 {lab=0} +N -430 -50 -150 -50 {lab=dither_select[1:0]} +N -720 -60 -720 170 {lab=data_in[3]} +N -650 -60 -650 170 {lab=data_in[2]} +N -720 230 -720 280 {lab=0} +N -650 230 -650 280 {lab=0} +N -860 -60 -860 170 {lab=data_in[5]} +N -790 -60 -790 170 {lab=data_in[4]} +N -860 230 -860 280 {lab=0} +N -790 230 -790 280 {lab=0} +N -1000 -60 -1000 170 {lab=data_in[7]} +N -930 -60 -930 170 {lab=data_in[6]} +N -1000 230 -1000 280 {lab=0} +N -930 230 -930 280 {lab=0} +N -1140 -60 -1140 170 {lab=data_in[9]} +N -1070 -60 -1070 170 {lab=data_in[8]} +N -1140 230 -1140 280 {lab=0} +N -1070 230 -1070 280 {lab=0} +N -1280 -60 -1280 170 {lab=data_in[11]} +N -1210 -60 -1210 170 {lab=data_in[10]} +N -1280 230 -1280 280 {lab=0} +N -1210 230 -1210 280 {lab=0} +N -1420 -60 -1420 170 {lab=data_in[13]} +N -1350 -60 -1350 170 {lab=data_in[12]} +N -1420 230 -1420 280 {lab=0} +N -1350 230 -1350 280 {lab=0} +N -1560 -60 -1560 170 {lab=data_in[15]} +N -1490 -60 -1490 170 {lab=data_in[14]} +N -1560 230 -1560 280 {lab=0} +N -1490 230 -1490 280 {lab=0} +N -1700 -60 -1700 170 {lab=data_in[17]} +N -1630 -60 -1630 170 {lab=data_in[16]} +N -1700 230 -1700 280 {lab=0} +N -1630 230 -1630 280 {lab=0} +N -1840 -60 -1840 170 {lab=data_in[19]} +N -1770 -60 -1770 170 {lab=data_in[18]} +N -1840 230 -1840 280 {lab=0} +N -1770 230 -1770 280 {lab=0} +N -1980 -60 -1980 170 {lab=data_in[21]} +N -1910 -60 -1910 170 {lab=data_in[20]} +N -1980 230 -1980 280 {lab=0} +N -1910 230 -1910 280 {lab=0} +N -2120 -60 -2120 170 {lab=data_in[23]} +N -2050 -60 -2050 170 {lab=data_in[22]} +N -2120 230 -2120 280 {lab=0} +N -2050 230 -2050 280 {lab=0} +N -2260 -60 -2260 170 {lab=data_in[25]} +N -2190 -60 -2190 170 {lab=data_in[24]} +N -2260 230 -2260 280 {lab=0} +N -2190 230 -2190 280 {lab=0} +N -650 280 -580 280 {lab=0} +N -580 280 -510 280 {lab=0} +N -510 280 -440 280 {lab=0} +N -440 280 -370 280 {lab=0} +N -370 280 360 280 {lab=0} +N -790 280 -720 280 {lab=0} +N -720 280 -650 280 {lab=0} +N -930 280 -860 280 {lab=0} +N -860 280 -790 280 {lab=0} +N -1070 280 -1000 280 {lab=0} +N -1000 280 -930 280 {lab=0} +N -1210 280 -1140 280 {lab=0} +N -1140 280 -1070 280 {lab=0} +N -1350 280 -1280 280 {lab=0} +N -1280 280 -1210 280 {lab=0} +N -1490 280 -1420 280 {lab=0} +N -1420 280 -1350 280 {lab=0} +N -1630 280 -1560 280 {lab=0} +N -1560 280 -1490 280 {lab=0} +N -1770 280 -1700 280 {lab=0} +N -1700 280 -1630 280 {lab=0} +N -1910 280 -1840 280 {lab=0} +N -1840 280 -1770 280 {lab=0} +N -2050 280 -1980 280 {lab=0} +N -1980 280 -1910 280 {lab=0} +N -2190 280 -2120 280 {lab=0} +N -2120 280 -2050 280 {lab=0} +N -2340 280 -2260 280 {lab=0} +N -2260 280 -2190 280 {lab=0} +N -190 -110 -150 -110 {lab=0} +N -190 -110 -190 280 {lab=0} +C {fractional_n_divider/fractional_n_divider.sym} 0 -80 0 0 {name=x1} +C {vsource.sym} -2340 90 0 0 {name=V1 value=3} +C {bus_connect_nolab.sym} -580 -60 0 0 {name=r1} +C {lab_wire.sym} -430 -70 0 1 {name=l1 sig_type=std_logic lab=data_in[25:0]} +C {vsource.sym} -370 200 0 0 {name=V2 value=dither_select_0} +C {vsource.sym} -440 200 0 0 {name=V3 value=1.8} +C {vsource.sym} -510 200 0 0 {name=V4 value=1.8} +C {vsource.sym} -580 200 0 0 {name=V5 value=1.8} +C {lab_wire.sym} -580 150 3 1 {name=l2 sig_type=std_logic lab=data_in[1]} +C {bus_connect_nolab.sym} -510 -60 0 0 {name=r2} +C {lab_wire.sym} -510 150 3 1 {name=l3 sig_type=std_logic lab=data_in[0]} +C {bus_connect_nolab.sym} -440 -40 0 0 {name=r3} +C {lab_wire.sym} -440 150 3 1 {name=l4 sig_type=std_logic lab=dither_select[1]} +C {bus_connect_nolab.sym} -370 -40 0 0 {name=r4} +C {lab_wire.sym} -370 150 3 1 {name=l5 sig_type=std_logic lab=dither_select[0]} +C {bus_connect_nolab.sym} -370 -40 0 0 {name=r5} +C {res.sym} 470 120 0 0 {name=R1 +value=1k +footprint=1206 +device=resistor +m=1} +C {lab_wire.sym} 150 -90 0 1 {name=l6 sig_type=std_logic lab=output_frequency} +C {lab_wire.sym} -430 -90 0 1 {name=l7 sig_type=std_logic lab=input_frequency} +C {gnd.sym} -2340 280 0 0 {name=l8 lab=0} +C {code.sym} 350 -310 0 0 {name=STIMULI +tclcommand="xschem edit_vi_prop" +value=" +*.option PARHIER=LOCAL RUNLVL=6 post MODMONTE=1 warn maxwarns=400 +*.option ITL4=20000 ITL5=0 +* .option sampling_method = SRS +* .option method=gear + +* simple transistor model +.MODEL cmosn NMOS LEVEL=1 VT0=0.7 KP=110U GAMMA=0.4 LAMBDA=0.04 PHI=0.7 +.MODEL cmosp PMOS LEVEL=1 VT0=-0.7 KP=50U GAMMA=0.57 LAMBDA=0.05 PHI=0.8 + +* load design and library +.include /home/tom/repositories/amsat_txrx_ic/design/fractional_n_divider/yosys/prim_cells_cmos.mod + +.temp 30 +.tran 1e-9 1e-6 uic +"} +C {res.sym} 360 120 0 0 {name=R2 +value=1k +footprint=1206 +device=resistor +m=1} +C {lab_wire.sym} -430 -50 0 1 {name=l9 sig_type=std_logic lab=dither_select[1:0]} +C {lab_wire.sym} 150 -70 0 1 {name=l10 sig_type=std_logic lab=dither_output} +C {bus_connect_nolab.sym} -720 -60 0 0 {name=r6} +C {vsource.sym} -650 200 0 0 {name=V6 value=1.8} +C {vsource.sym} -720 200 0 0 {name=V7 value=1.8} +C {lab_wire.sym} -720 150 3 1 {name=l12 sig_type=std_logic lab=data_in[3]} +C {bus_connect_nolab.sym} -650 -60 0 0 {name=r7} +C {lab_wire.sym} -650 150 3 1 {name=l13 sig_type=std_logic lab=data_in[2]} +C {bus_connect_nolab.sym} -860 -60 0 0 {name=r8} +C {vsource.sym} -790 200 0 0 {name=V8 value=1.8} +C {vsource.sym} -860 200 0 0 {name=V9 value=1.8} +C {lab_wire.sym} -860 150 3 1 {name=l15 sig_type=std_logic lab=data_in[5]} +C {bus_connect_nolab.sym} -790 -60 0 0 {name=r9} +C {lab_wire.sym} -790 150 3 1 {name=l16 sig_type=std_logic lab=data_in[4]} +C {bus_connect_nolab.sym} -1000 -60 0 0 {name=r10} +C {vsource.sym} -930 200 0 0 {name=V10 value=1.8} +C {vsource.sym} -1000 200 0 0 {name=V11 value=1.8} +C {lab_wire.sym} -1000 150 3 1 {name=l18 sig_type=std_logic lab=data_in[7]} +C {bus_connect_nolab.sym} -930 -60 0 0 {name=r11} +C {lab_wire.sym} -930 150 3 1 {name=l19 sig_type=std_logic lab=data_in[6]} +C {bus_connect_nolab.sym} -1140 -60 0 0 {name=r12} +C {vsource.sym} -1070 200 0 0 {name=V12 value=1.8} +C {vsource.sym} -1140 200 0 0 {name=V13 value=1.8} +C {lab_wire.sym} -1140 150 3 1 {name=l11 sig_type=std_logic lab=data_in[9]} +C {bus_connect_nolab.sym} -1070 -60 0 0 {name=r13} +C {lab_wire.sym} -1070 150 3 1 {name=l14 sig_type=std_logic lab=data_in[8]} +C {bus_connect_nolab.sym} -1280 -60 0 0 {name=r14} +C {vsource.sym} -1210 200 0 0 {name=V14 value=1.8} +C {vsource.sym} -1280 200 0 0 {name=V15 value=1.8} +C {lab_wire.sym} -1280 150 3 1 {name=l17 sig_type=std_logic lab=data_in[11]} +C {bus_connect_nolab.sym} -1210 -60 0 0 {name=r15} +C {lab_wire.sym} -1210 150 3 1 {name=l20 sig_type=std_logic lab=data_in[10]} +C {bus_connect_nolab.sym} -1420 -60 0 0 {name=r16} +C {vsource.sym} -1350 200 0 0 {name=V16 value=1.8} +C {vsource.sym} -1420 200 0 0 {name=V17 value=1.8} +C {lab_wire.sym} -1420 150 3 1 {name=l21 sig_type=std_logic lab=data_in[13]} +C {bus_connect_nolab.sym} -1350 -60 0 0 {name=r17} +C {lab_wire.sym} -1350 150 3 1 {name=l22 sig_type=std_logic lab=data_in[12]} +C {bus_connect_nolab.sym} -1560 -60 0 0 {name=r18} +C {vsource.sym} -1490 200 0 0 {name=V18 value=1.8} +C {vsource.sym} -1560 200 0 0 {name=V19 value=1.8} +C {lab_wire.sym} -1560 150 3 1 {name=l23 sig_type=std_logic lab=data_in[15]} +C {bus_connect_nolab.sym} -1490 -60 0 0 {name=r19} +C {lab_wire.sym} -1490 150 3 1 {name=l24 sig_type=std_logic lab=data_in[14]} +C {bus_connect_nolab.sym} -1700 -60 0 0 {name=r20} +C {vsource.sym} -1630 200 0 0 {name=V20 value=1.8} +C {vsource.sym} -1700 200 0 0 {name=V21 value=1.8} +C {lab_wire.sym} -1700 150 3 1 {name=l25 sig_type=std_logic lab=data_in[17]} +C {bus_connect_nolab.sym} -1630 -60 0 0 {name=r21} +C {lab_wire.sym} -1630 150 3 1 {name=l26 sig_type=std_logic lab=data_in[16]} +C {bus_connect_nolab.sym} -1840 -60 0 0 {name=r22} +C {vsource.sym} -1770 200 0 0 {name=V22 value=1.8} +C {vsource.sym} -1840 200 0 0 {name=V23 value=1.8} +C {lab_wire.sym} -1840 150 3 1 {name=l27 sig_type=std_logic lab=data_in[19]} +C {bus_connect_nolab.sym} -1770 -60 0 0 {name=r23} +C {lab_wire.sym} -1770 150 3 1 {name=l28 sig_type=std_logic lab=data_in[18]} +C {bus_connect_nolab.sym} -1980 -60 0 0 {name=r24} +C {vsource.sym} -1910 200 0 0 {name=V24 value=1.8} +C {vsource.sym} -1980 200 0 0 {name=V25 value=1.8} +C {lab_wire.sym} -1980 150 3 1 {name=l29 sig_type=std_logic lab=data_in[21]} +C {bus_connect_nolab.sym} -1910 -60 0 0 {name=r25} +C {lab_wire.sym} -1910 150 3 1 {name=l30 sig_type=std_logic lab=data_in[20]} +C {bus_connect_nolab.sym} -2120 -60 0 0 {name=r26} +C {vsource.sym} -2050 200 0 0 {name=V26 value=1.8} +C {vsource.sym} -2120 200 0 0 {name=V27 value=1.8} +C {lab_wire.sym} -2120 150 3 1 {name=l31 sig_type=std_logic lab=data_in[23]} +C {bus_connect_nolab.sym} -2050 -60 0 0 {name=r27} +C {lab_wire.sym} -2050 150 3 1 {name=l32 sig_type=std_logic lab=data_in[22]} +C {bus_connect_nolab.sym} -2260 -60 0 0 {name=r28} +C {vsource.sym} -2190 200 0 0 {name=V28 value=1.8} +C {vsource.sym} -2260 200 0 0 {name=V29 value=1.8} +C {lab_wire.sym} -2260 150 3 1 {name=l33 sig_type=std_logic lab=data_in[25]} +C {bus_connect_nolab.sym} -2190 -60 0 0 {name=r29} +C {lab_wire.sym} -2190 150 3 1 {name=l34 sig_type=std_logic lab=data_in[24]}
diff --git a/xschem/fractional_n_divider/tests/lfsr_fib/Makefile b/xschem/fractional_n_divider/tests/lfsr_fib/Makefile new file mode 100644 index 0000000..2607c24 --- /dev/null +++ b/xschem/fractional_n_divider/tests/lfsr_fib/Makefile
@@ -0,0 +1,21 @@ +TOPLEVEL_LANG ?= verilog + +PWD=$(shell pwd) + +# add the models to path +export PYTHONPATH := $(PWD)/../../models:$(PYTHONPATH) + +ifeq ($(TOPLEVEL_LANG),verilog) + VERILOG_SOURCES = $(PWD)/../../lfsr_fib.v +else + $(error "A valid value (verilog) was not provided for TOPLEVEL_LANG=$(TOPLEVEL_LANG)") +endif + +EXTRA_ARGS := --trace --trace-structs --coverage +SIM := verilator + +TOPLEVEL := lfsr_fib +MODULE := test_lfsr_fib + + +include $(shell cocotb-config --makefiles)/Makefile.sim
diff --git a/xschem/fractional_n_divider/tests/lfsr_fib/test_lfsr_fib.py b/xschem/fractional_n_divider/tests/lfsr_fib/test_lfsr_fib.py new file mode 100644 index 0000000..9f7e6e6 --- /dev/null +++ b/xschem/fractional_n_divider/tests/lfsr_fib/test_lfsr_fib.py
@@ -0,0 +1,61 @@ +import cocotb +from cocotb.triggers import Timer, RisingEdge, ClockCycles +from cocotb.clock import Clock +import cocotb_coverage +import random +import lfsr_fib_model +from test_lfsr_fib_coverage import * + + + +# test constants +NUMBER_TESTS = 4096 + + +@cocotb.test() +async def coverage(dut): + """ + Test the output against the model with random input values + """ + + # create the model + model = lfsr_fib_model.lfsr_fib_model() + + # create an object that views the DUT state + status = LFSRFibStatus(dut) + + # start clock + clock = Clock(dut.i_clk, 2) + cocotb.fork(clock.start()) + + # reset the DUT + dut.i_reset = 1 + dut.i_in = 0 + dut.i_ce = 0 + await ClockCycles(dut.i_clk, 8) + dut.i_reset = 0 + model.reset() + await ClockCycles(dut.i_clk, 1) + + # loop through the tests + for test in range(NUMBER_TESTS): + + # create some random data + input_data = { "in" : random.randint(0,1), + "ce" : random.randint(0,1)} + + dut._log.info("Test number %d, input value = %d, clock enable = %d" % (test+1, input_data["in"], input_data["ce"])) + + # update the data in the DUT + status.update() + output_data = await process_data(dut, status, input_data) + + # check the output matches the model + model_data = model.update(input_data) + assert(output_data == model_data), 'Model = %x, Simulation = %x' % (model_data, output_data) + + + # print and export coverage report + coverage_db.report_coverage(dut._log.info, bins=True) + coverage_db.export_to_xml(filename="coverage_lfsr_fib.xml") + coverage_db.export_to_yaml(filename="coverage_lfsr_fib.yml") \ No newline at end of file
diff --git a/xschem/fractional_n_divider/tests/lfsr_fib/test_lfsr_fib_coverage.py b/xschem/fractional_n_divider/tests/lfsr_fib/test_lfsr_fib_coverage.py new file mode 100644 index 0000000..96ba06e --- /dev/null +++ b/xschem/fractional_n_divider/tests/lfsr_fib/test_lfsr_fib_coverage.py
@@ -0,0 +1,57 @@ +import cocotb +from cocotb.triggers import RisingEdge, ReadOnly +from cocotb_coverage.coverage import * + +# auxiliary relation function to define bins matching within a range +range_relation = lambda val_, bin_ : bin_[0] <= val_ <= bin_[1] + +class LFSRFibStatus(): + """ + Object representing modulator status + """ + def __init__(self, dut): + self.dut = dut + + # @cocotb.coroutine + def update(self): + self.i_in = int(self.dut.i_in.value) + self.i_ce = int(self.dut.i_ce.value) + self.o_bit = int(self.dut.o_bit) + + +#functional coverage - check if all FIFO states have been reached +#and check if read or write operation performed in every FIFO state +LFSRFibCoverage = coverage_section ( + CoverPoint( + name = "top.i_in", + xf = lambda dut, status, input_data : status.i_in, + bins = [0, 1], + bins_labels = ["low", "high"] + ), + CoverPoint( + name = "top.i_ce", + xf = lambda dut, status, input_data : status.i_ce, + bins = [0, 1], + bins_labels = ["low", "high"] + ), + CoverPoint( + name = "top.o_bit", + xf = lambda dut, status, input_data : status.o_bit, + bins = [0, 1], + bins_labels = ["low", "high"] + ) +) + + +# procedure of processing data +# coverage sampled here - at each function call +@LFSRFibCoverage +async def process_data(dut, status, input_data): + + # provide new data and read old + dut.i_in <= input_data["in"] + dut.i_ce <= input_data["ce"] + await RisingEdge(dut.i_clk) + output_data = int(dut.o_bit) + + return output_data \ No newline at end of file
diff --git a/xschem/fractional_n_divider/tests/mash_mod/Makefile b/xschem/fractional_n_divider/tests/mash_mod/Makefile new file mode 100644 index 0000000..3ef6cf3 --- /dev/null +++ b/xschem/fractional_n_divider/tests/mash_mod/Makefile
@@ -0,0 +1,21 @@ +TOPLEVEL_LANG ?= verilog + +PWD=$(shell pwd) + +# add the models to path +export PYTHONPATH := $(PWD)/../../models:$(PYTHONPATH) + +ifeq ($(TOPLEVEL_LANG),verilog) + VERILOG_SOURCES = $(PWD)/../../mash_mod.v +else + $(error "A valid value (verilog) was not provided for TOPLEVEL_LANG=$(TOPLEVEL_LANG)") +endif + +EXTRA_ARGS := --trace --trace-structs --coverage +SIM := verilator + +TOPLEVEL := mash_mod +MODULE := test_mash_mod + + +include $(shell cocotb-config --makefiles)/Makefile.sim
diff --git a/xschem/fractional_n_divider/tests/mash_mod/test_mash_mod.py b/xschem/fractional_n_divider/tests/mash_mod/test_mash_mod.py new file mode 100644 index 0000000..fcbc6d2 --- /dev/null +++ b/xschem/fractional_n_divider/tests/mash_mod/test_mash_mod.py
@@ -0,0 +1,73 @@ +import cocotb +from cocotb.triggers import Timer, RisingEdge, ClockCycles +from cocotb.clock import Clock +import cocotb_coverage +import random +import mash_mod_model +from test_mash_mod_coverage import * + + +# hardware constants +WIDTH_MODULUS = 16 +ORDER = 3 + + +# test constants +NUMBER_TESTS = 256 +NUMBER_SAMPLES = 1024 +DELAY = 4*(ORDER-1)+1 + + + +@cocotb.test() +async def coverage(dut): + """ + Test the output against the model with random input values + """ + + # create the model + model = mash_mod_model.mash_mod_model(modulus_width=WIDTH_MODULUS, order=ORDER) + + # create an object that views the DUT state + status = MASHModStatus(dut) + + # start clock + clock = Clock(dut.clk, 2) + cocotb.fork(clock.start()) + + # loop through the tests + for test in range(NUMBER_TESTS): + + # create some random data + input_data = random.randint(0,2**WIDTH_MODULUS-1) + input_data_frac = input_data / 2**WIDTH_MODULUS + dut._log.info("Test number %d, input value = %f" % (test+1, input_data_frac)) + + # reset the DUT + dut.rst = 1 + dut.data_in = 0 + await ClockCycles(dut.clk, 8) + dut.rst = 0 + model.reset() + + # update the data in the DUT + status.update() + output_data = await process_data(dut, status, input_data) + + + # loop through some clock cycles calculating samples + for sample in range(NUMBER_SAMPLES): + + # update the data in the DUT + status.update() + output_data = await process_data(dut, status, input_data) + + # check the output matches the model + model_data = model.update(input_data_frac) + assert(output_data == model_data), 'Model = %x, Simulation = %x' % (int(model_data), output_data) + + + # print and export coverage report + coverage_db.report_coverage(dut._log.info, bins=True) + coverage_db.export_to_xml(filename="coverage_mash_mod.xml") + coverage_db.export_to_yaml(filename="coverage_mash_mod.yml") \ No newline at end of file
diff --git a/xschem/fractional_n_divider/tests/mash_mod/test_mash_mod_coverage.py b/xschem/fractional_n_divider/tests/mash_mod/test_mash_mod_coverage.py new file mode 100644 index 0000000..a8be862 --- /dev/null +++ b/xschem/fractional_n_divider/tests/mash_mod/test_mash_mod_coverage.py
@@ -0,0 +1,55 @@ +import cocotb +from cocotb.triggers import RisingEdge, ReadOnly +from cocotb_coverage.coverage import * + +# auxiliary relation function to define bins matching within a range +range_relation = lambda val_, bin_ : bin_[0] <= val_ <= bin_[1] + +class MASHModStatus(): + """ + Object representing modulator status + """ + def __init__(self, dut): + self.dut = dut + + # @cocotb.coroutine + def update(self): + self.data_in = int(self.dut.data_in.value) + self.data_out = int(self.dut.data_out) + + +#functional coverage - check if all FIFO states have been reached +#and check if read or write operation performed in every FIFO state +MASHModCoverage = coverage_section ( + CoverPoint( + name = "top.data_in", + xf = lambda dut, status, input_data : status.data_in, + rel = range_relation, + bins = [(0,int(2**16*1/3)-1), (int(2**16*1/3),int(2**16*2/3)-1), (int(2**16*2/3),int(2**16-1))], + bins_labels = ["low", "med", "high"] + ), + CoverPoint( + name = "top.data_out", + xf = lambda dut, status, input_data : status.data_out, + rel = range_relation, + bins = [(0,int(2**3*1/3)-1), (int(2**3*1/3),int(2**3*2/3)-1), (int(2**3*2/3),int(2**3-1))], + bins_labels = ["low", "med", "high"] + ) +) + + +# procedure of processing data +# coverage sampled here - at each function call +@MASHModCoverage +async def process_data(dut, status, input_data): + + # provide new data and read old + dut.data_in <= input_data + await RisingEdge(dut.clk) + output_data = int(dut.data_out) + + # convert to signed + if output_data > 2**2: + output_data -= 2**3 + + return output_data \ No newline at end of file
diff --git a/xschem/pll_collection/pll_collection.sch b/xschem/pll_collection/pll_collection.sch new file mode 100644 index 0000000..6b69bb0 --- /dev/null +++ b/xschem/pll_collection/pll_collection.sch
@@ -0,0 +1,120 @@ +v { version=2.9.8 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 640 -210 700 -210 { lab=#net1} +N 640 -190 700 -190 { lab=#net2} +N 900 -210 960 -210 { lab=#net3} +N 900 -190 960 -190 { lab=#net4} +N 1160 -210 1220 -210 { lab=#net5} +N 1160 -190 1220 -190 { lab=#net6} +N 1420 -210 1480 -210 { lab=#net7} +N 1420 -190 1480 -190 { lab=#net8} +N 1680 -210 1740 -210 { lab=#net9} +N 1680 -190 1740 -190 { lab=#net10} +N 1840 -550 1840 -260 { lab=vdd} +N 1580 -550 1840 -550 { lab=vdd} +N 210 -100 210 0 { lab=vss} +N 1580 0 1840 0 { lab=vss} +N 1840 -140 1840 0 { lab=vss} +N 210 -430 210 -350 { lab=#net11} +N 210 -550 210 -490 { lab=vdd} +N 540 -550 540 -430 { lab=vdd} +N 540 -320 540 -260 { lab=#net12} +N 540 -320 800 -320 { lab=#net12} +N 800 -320 800 -260 { lab=#net12} +N 540 -400 560 -400 { lab=vdd} +N 560 -550 560 -400 { lab=vdd} +N 210 -460 230 -460 { lab=vdd} +N 230 -550 230 -460 { lab=vdd} +N 100 -400 500 -400 { lab=en_n} +N 100 -460 100 -400 { lab=en_n} +N 100 -460 170 -460 { lab=en_n} +N 1060 -550 1060 -260 { lab=vdd} +N 1320 -550 1320 -260 { lab=vdd} +N 1580 -550 1580 -260 { lab=vdd} +N 1580 -140 1580 0 { lab=vss} +N 1320 -140 1320 0 { lab=vss} +N 1060 -140 1060 0 { lab=vss} +N 800 -140 800 0 { lab=vss} +N 540 -140 540 0 { lab=vss} +N 0 -550 210 -550 { lab=vdd} +N 0 0 210 0 { lab=vss} +N 0 -220 80 -220 { lab=ctl} +N 1940 -210 2100 -210 { lab=#net13} +N 0 -460 100 -460 { lab=en_n} +N 2080 -190 2100 -190 { lab=#net14} +N 2080 -190 2080 -140 { lab=#net14} +N 2080 -140 2300 -140 { lab=#net14} +N 2300 -190 2300 -140 { lab=#net14} +N 2280 -190 2300 -190 { lab=#net14} +N 2280 -210 2360 -210 { lab=#net15} +N 2340 -190 2360 -190 { lab=#net16} +N 2340 -190 2340 -140 { lab=#net16} +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 540 -370 540 -320 { lab=#net12} +N 540 -550 560 -550 { lab=vdd} +N 210 -550 230 -550 { lab=vdd} +N 560 -550 1060 -550 { lab=vdd} +N 1060 -550 1320 -550 { lab=vdd} +N 1320 -550 1580 -550 { lab=vdd} +N 1320 0 1580 0 { lab=vss} +N 1060 0 1320 0 { lab=vss} +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} +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} +C {divider_ff/divider_ff.sym} 1060 -200 0 0 {name=x3} +C {divider_ff/divider_ff.sym} 1320 -200 0 0 {name=x4} +C {divider_ff/divider_ff.sym} 1580 -200 0 0 {name=x5} +C {divider_ff/divider_ff.sym} 1840 -200 0 0 {name=x6} +C {sky130_fd_pr/pfet_01v8_lvt.sym} 190 -460 0 0 {name=M1 +L=0.35 +W=7 +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=128 +model=pfet_01v8_lvt +spiceprefix=X +} +C {sky130_fd_pr/pfet_01v8_lvt.sym} 520 -400 0 0 {name=M2 +L=0.35 +W=7 +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=128 +model=pfet_01v8_lvt +spiceprefix=X +} +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 {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 {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 {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}
diff --git a/xschem/pll_collection/pll_collection.sym b/xschem/pll_collection/pll_collection.sym new file mode 100644 index 0000000..85b3d95 --- /dev/null +++ b/xschem/pll_collection/pll_collection.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 -40 130 -40 {} +L 4 -130 40 130 40 {} +L 4 -130 -40 -130 40 {} +L 4 130 -40 130 40 {} +L 4 -150 -10 -130 -10 {} +L 4 -150 10 -130 10 {} +L 4 130 -10 150 -10 {} +L 7 0 -60 0 -40 {} +L 7 0 40 0 60 {} +B 5 -2.5 -62.5 2.5 -57.5 {name=vdd dir=inout name=p1 } +B 5 -152.5 -12.5 -147.5 -7.5 {name=en_n dir=in name=p6 } +B 5 -152.5 7.5 -147.5 12.5 {name=ctl dir=in name=p3 } +B 5 147.5 -12.5 152.5 -7.5 {name=out dir=out name=p4 } +B 5 -2.5 57.5 2.5 62.5 {name=vss dir=inout name=p2 } +T {@symname} 29 54 0 0 0.3 0.3 {} +T {@name} 45 78 0 0 0.2 0.2 {} +T {vdd} 16 -35 0 1 0.2 0.2 {} +T {en_n} -125 -14 0 0 0.2 0.2 {} +T {ctl} -125 6 0 0 0.2 0.2 {} +T {out} 125 -14 0 1 0.2 0.2 {} +T {vss} -6 35 2 1 0.2 0.2 {}
diff --git a/xschem/pll_collection/test/pll_collection_tb.sch b/xschem/pll_collection/test/pll_collection_tb.sch new file mode 100644 index 0000000..f33bef0 --- /dev/null +++ b/xschem/pll_collection/test/pll_collection_tb.sch
@@ -0,0 +1,86 @@ +v {xschem version=2.9.8 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 0 -90 -0 -0 { lab=GND} +N -0 -0 380 0 { lab=GND} +N 400 -110 400 -0 { lab=GND} +N 380 -0 400 -0 { lab=GND} +N 400 -280 400 -230 { lab=#net1} +N -0 -280 400 -280 { lab=#net1} +N -0 -280 -0 -150 { lab=#net1} +N 100 -60 100 -0 { lab=GND} +N 180 -60 180 -0 { lab=GND} +N 180 -160 180 -120 { lab=ctl} +N 180 -160 250 -160 { lab=ctl} +N 100 -180 250 -180 { lab=en_n} +N 100 -180 100 -120 { lab=en_n} +N 400 0 740 0 { lab=GND} +N 740 -30 740 0 { lab=GND} +N 740 -40 740 -30 { lab=GND} +N 550 -180 740 -180 { lab=outp} +N 740 -180 740 -100 { lab=outp} +C {pll_collection/pll_collection.sym} 400 -170 0 0 {name=x1} +C {vsource.sym} 0 -120 0 0 {name=Vvdd value=1.8} +C {vsource.sym} 100 -90 0 0 {name=V2 value=0.0} +C {vsource.sym} 180 -90 0 0 {name=V3 value=0.2} +C {capa.sym} 740 -70 0 0 {name=C2 +m=1 +value=1p +footprint=1206 +device="ceramic capacitor"} +C {lab_wire.sym} 550 -180 0 1 {name=l1 sig_type=std_logic lab=outp} +C {gnd.sym} 0 0 0 0 {name=l3 lab=GND} +C {code.sym} 630 -390 0 0 {name=STIMULI +tclcommand="xschem edit_vi_prop" +value=" +.param temp=27 +.temp 27 + +*.save v(ip) v(in) v(vctl) i(vdd) + +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W5p00L0p15.spice +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W3p00L0p15.spice +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15.spice + +.include sky130_fd_pr/cells/rf_pfet_01v8_lvt/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p35.spice +.include sky130_fd_pr/cells/rf_pfet_01v8_lvt/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W3p00L0p35.spice +.include sky130_fd_pr/cells/rf_pfet_01v8_lvt/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p35.spice +.include sky130_fd_pr/cells/rf_pfet_01v8_lvt/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p50.spice +.include sky130_fd_pr/cells/rf_pfet_01v8_lvt/sky130_fd_pr__rf_pfet_01v8_lvt_aM02W3p00L0p35.spice +.include sky130_fd_pr/cells/rf_pfet_01v8_lvt/sky130_fd_pr__rf_pfet_01v8_lvt_aM02W5p00L0p35.spice + +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aM02W1p65L0p15.spice +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aM02W3p00L0p15.spice +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aM02W5p00L0p15.spice +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aM02W3p00L0p25.spice +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aM02W5p00L0p25.spice +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aF04W2p00L0p15.spice +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aF04W3p00L0p15.spice +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aM02W1p65L0p25.spice + +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aF06W3p00L0p15.spice +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aF06W1p65L0p15.spice +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aF04W1p65L0p15.spice +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aF02W1p65L0p15.spice +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aF02W0p84L0p15.spice + + +.lib sky130_fd_pr/models/sky130.lib.spice tt +*.include sky130_fd_pr/models/corners/tt.spice + + +.tran 0.01n 1000n uic +.param vdd=1.8 +.param vctl=0.2 +"} +C {lab_wire.sym} 100 -180 0 1 {name=l4 sig_type=std_logic lab=en_n} +C {lab_wire.sym} 180 -160 0 1 {name=l5 sig_type=std_logic lab=ctl} +C {code.sym} 460 -390 0 0 {name=STDCELL_MODELS +only_toplevel=true +place=end +format=tcleval(@value\\) +value="[sky130_models]" +}
diff --git a/xschem/pll_collection/test/sky130_fd_pr b/xschem/pll_collection/test/sky130_fd_pr new file mode 120000 index 0000000..e705079 --- /dev/null +++ b/xschem/pll_collection/test/sky130_fd_pr
@@ -0,0 +1 @@ +/home/tom/skywater/skywater-pdk/libraries/sky130_fd_pr/latest \ No newline at end of file
diff --git a/xschem/rf_bufferdiff/rf_bufferdiff.sch b/xschem/rf_bufferdiff/rf_bufferdiff.sch new file mode 100644 index 0000000..d760603 --- /dev/null +++ b/xschem/rf_bufferdiff/rf_bufferdiff.sch
@@ -0,0 +1,50 @@ +v {xschem version=2.9.8 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 70 -30 70 0 {lab=vss} +N 70 0 220 0 {lab=vss} +N 220 -30 220 0 {lab=vss} +N 70 -60 220 -60 {lab=vss} +N 70 -140 70 -90 {lab=out_p} +N 220 -270 220 -200 {lab=vdd} +N 0 -270 220 -270 {lab=vdd} +N 70 -270 70 -200 {lab=vdd} +N 0 -120 70 -120 {lab=out_p} +N 220 -140 220 -90 {lab=out_n} +N 220 -120 290 -120 {lab=out_n} +N 0 -170 40 -170 {lab=vss} +N 240 -170 280 -170 {lab=vss} +N 0 0 70 0 {lab=vss} +N 150 -60 150 0 {lab=vss} +N 20 -60 30 -60 { lab=in_p} +N 260 -60 290 -60 { lab=in_n} +N 0 -60 20 -60 { lab=in_p} +N 40 -170 50 -170 { lab=vss} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 50 -60 0 0 {name=XMdiffp model=sky130_fd_pr__rf_nfet_01v8_lvt_aF02W1p65L0p15 + +} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 240 -60 0 1 {name=XMdiffn model=sky130_fd_pr__rf_nfet_01v8_lvt_aF02W1p65L0p15 +} +C {iopin.sym} 0 -270 0 1 {name=p1 lab=vdd} +C {iopin.sym} 0 0 0 1 {name=p2 lab=vss} +C {ipin.sym} 0 -60 0 0 {name=p3 lab=in_p} +C {ipin.sym} 290 -60 0 1 {name=p4 lab=in_n} +C {opin.sym} 0 -120 0 1 {name=p5 lab=out_p} +C {opin.sym} 290 -120 0 0 {name=p6 lab=out_n} +C {lab_wire.sym} 0 -170 0 1 {name=l1 sig_type=std_logic lab=vss} +C {lab_wire.sym} 240 -170 0 1 {name=l2 sig_type=std_logic lab=vss} +C {sky130_fd_pr/res_xhigh_po.sym} 70 -170 0 0 {name=Rp +W=2.85 +L=5.00 +model=res_xhigh_po +spiceprefix=X +mult=1} +C {sky130_fd_pr/res_xhigh_po.sym} 220 -170 0 1 {name=Rn +W=2.85 +L=5.00 +model=res_xhigh_po +spiceprefix=X +mult=1}
diff --git a/xschem/rf_bufferdiff/rf_bufferdiff.sym b/xschem/rf_bufferdiff/rf_bufferdiff.sym new file mode 100644 index 0000000..0232662 --- /dev/null +++ b/xschem/rf_bufferdiff/rf_bufferdiff.sym
@@ -0,0 +1,31 @@ +v {xschem version=2.9.7 file_version=1.1} +G {type=subcircuit +format="@name @pinlist @symname" +template="name=x1" +} +V {} +S {} +E {} +L 4 -50 -40 -50 40 {} +L 4 18 -10 60 -10 {} +L 4 18 10 60 10 {} +L 4 -70 -10 -50 -10 {} +L 4 -70 10 -50 10 {} +L 4 -50 -40 40 0 {} +L 4 -50 40 40 0 {} +L 7 0 -40 0 -18 {} +L 7 0 18 0 40 {} +B 5 -2.5 -42.5 2.5 -37.5 {name=vdd dir=inout } +B 5 57.5 -12.5 62.5 -7.5 {name=out_n dir=out } +B 5 57.5 7.5 62.5 12.5 {name=out_p dir=out } +B 5 -72.5 -12.5 -67.5 -7.5 {name=in_p dir=in } +B 5 -72.5 7.5 -67.5 12.5 {name=in_n dir=in } +B 5 -2.5 37.5 2.5 42.5 {name=vss dir=inout } +T {@symname} 13.5 34 0 0 0.3 0.3 {} +T {@name} 15 58 0 0 0.2 0.2 {} +T {vdd} -4 -45 0 1 0.2 0.2 {} +T {out_n} 45 -24 0 1 0.2 0.2 {} +T {out_p} 45 16 0 1 0.2 0.2 {} +T {in_p} -45 -14 0 0 0.2 0.2 {} +T {in_n} -45 6 0 0 0.2 0.2 {} +T {vss} -26 45 2 1 0.2 0.2 {}
diff --git a/xschem/rf_bufferdiff/test/rf_bufferdiff_tb.sch b/xschem/rf_bufferdiff/test/rf_bufferdiff_tb.sch new file mode 100644 index 0000000..e792ddc --- /dev/null +++ b/xschem/rf_bufferdiff/test/rf_bufferdiff_tb.sch
@@ -0,0 +1,63 @@ +v {xschem version=2.9.7 file_version=1.1} +G {} +V {} +S {} +E {} +N -90 10 -90 90 {lab=in_n} +N -90 10 -10 10 {lab=in_n} +N -150 -10 -150 90 {lab=in_p} +N -150 -10 -10 -10 {lab=in_p} +N -260 30 -10 30 {lab=#net1} +N -300 -30 -300 0 {lab=#net1} +N -300 -30 -230 -30 {lab=#net1} +N -230 -30 -230 30 {lab=#net1} +N -300 60 -300 180 {lab=0} +N -300 180 60 180 {lab=0} +N 60 40 60 180 {lab=0} +N -90 150 -90 180 {lab=0} +N -150 150 -150 180 {lab=0} +N -320 30 -300 30 {lab=0} +N -320 30 -320 180 {lab=0} +N -320 180 -300 180 {lab=0} +N -300 -80 -300 -30 {lab=#net1} +N -440 -10 -440 180 {lab=0} +N -440 180 -320 180 {lab=0} +N -440 -190 -440 -70 {lab=#net2} +N -440 -190 60 -190 {lab=#net2} +N 60 -190 60 -40 {lab=#net2} +N -300 -190 -300 -140 {lab=#net2} +N 60 -190 460 -190 {lab=#net2} +N 460 -190 460 -80 {lab=#net2} +N 360 -190 360 20 {lab=#net2} +N 460 -20 460 180 {lab=0} +N 60 180 460 180 {lab=0} +N 360 80 360 180 {lab=0} +N 360 50 380 50 {lab=0} +N 380 50 380 180 {lab=0} +N 460 -50 480 -50 {lab=0} +N 480 -50 480 180 {lab=0} +N 460 180 480 180 {lab=0} +N 120 -10 280 -10 {lab=out_n} +N 280 -50 280 -10 {lab=out_n} +N 280 -50 420 -50 {lab=out_n} +N 120 10 280 10 {lab=out_p} +N 280 10 280 50 {lab=out_p} +N 280 50 320 50 {lab=out_p} +C {rf_bufferdiff/rf_bufferdiff.sym} 60 0 0 0 {name=x1} +C {nmos4.sym} -280 30 0 1 {name=XM1 model=sky130_fd_pr__nfet_01v8 w=1 l=0.5 m=1} +C {vsource.sym} -90 120 0 0 {name=Vin_n value="pulse(1.8 0 0 41.67p 41.67p 166.68p 416.7p 0)"} +C {vsource.sym} -150 120 0 0 {name=Vin_p value="pulse(0 1.8 0 41.67p 41.67p 166.68p 416.7p 0)"} +C {isource.sym} -300 -110 0 0 {name=I0 value=1u} +C {vsource.sym} -440 -40 0 0 {name=V1 value=1.8} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 340 50 0 0 {name=XM2 model=sky130_fd_pr__rf_nfet_01v8_bM02W1p65L0p15 m=1} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 440 -50 0 0 {name=XM3 model=sky130_fd_pr__rf_nfet_01v8_bM02W1p65L0p15 m=1} +C {lab_wire.sym} -440 180 0 1 {name=l1 sig_type=std_logic lab=0} +C {lab_wire.sym} -90 -10 0 1 {name=l2 sig_type=std_logic lab=in_p} +C {lab_wire.sym} -90 10 0 1 {name=l3 sig_type=std_logic lab=in_n} +C {lab_wire.sym} 120 -10 0 1 {name=l4 sig_type=std_logic lab=out_n} +C {lab_wire.sym} 120 10 0 1 {name=l5 sig_type=std_logic lab=out_p} +C {code_shown.sym} -440 240 0 0 {name=CONTROL value=" +.param temp=27 +.lib sky130_fd_pr/models/sky130.lib.spice tt +.tran 0.001n 10n uic +"}
diff --git a/xschem/vco_2-4GHz/doc/.ipynb_checkpoints/Transfer Function-checkpoint.ipynb b/xschem/vco_2-4GHz/doc/.ipynb_checkpoints/Transfer Function-checkpoint.ipynb new file mode 100644 index 0000000..7d0618a --- /dev/null +++ b/xschem/vco_2-4GHz/doc/.ipynb_checkpoints/Transfer Function-checkpoint.ipynb
@@ -0,0 +1,138 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2.4 GHz VCO Transfer Function\n", + "Plot the transfer function of the VCO over different corners and temperatures" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from IPython.display import display, Markdown\n", + "import SpiceInterface\n", + "import h5py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Read in the results file" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[5.88235294e+09 5.88235294e+09 5.88235294e+09 5.26315789e+09\n", + " 5.26315789e+09 5.00000000e+09 5.00000000e+09 4.98449179e+09\n", + " 4.57174073e+09 5.25427244e+09 4.31128989e+09 4.04942136e+09\n", + " 4.11495216e+09 3.57142857e+09 2.92397661e+09 2.90729831e+09\n", + " 2.30414747e+09 1.85185185e+09 1.61290323e+09 1.44927536e+09\n", + " 1.31578947e+09 1.19047619e+09 1.09890110e+09 1.05263158e+09\n", + " 1.03092784e+09 1.02040816e+09 1.03092784e+09 1.02040816e+09\n", + " 1.02040816e+09 1.03092784e+09 1.02040816e+09 1.02040816e+09]\n" + ] + } + ], + "source": [ + "filename = '../tests/vco_2-4GHz_corners.hdf5'\n", + "with h5py.File(filename, 'r') as file:\n", + "\n", + " # grab the data keys\n", + " group_list = list(file.keys())\n", + " \n", + " # get the indexing data\n", + " indexing = {}\n", + " for key in list(file['indexing']):\n", + " indexing[key] = list(file['indexing'][key])\n", + " \n", + " \n", + " \n", + " # get the simulation data\n", + " data = list(file['data']) \n", + " print(data[0][0][0])\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plot the transfer function" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'vdd' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-14-32a5b334c682>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mvctl\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlinspace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvdd\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvctl_num\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mj\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'vdd' is not defined" + ] + } + ], + "source": [ + "vctl = np.linspace(0, 1.8, 32)\n", + "\n", + "for i in range(len(data)):\n", + " for j in range(len(data[0])):\n", + " for k in range(len(data[0][0])):\n", + " \n", + " plt.plot(vctl, data[i][j][k], 'b', alpha=0.5)\n", + "\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}
diff --git a/xschem/vco_2-4GHz/doc/Transfer Function.ipynb b/xschem/vco_2-4GHz/doc/Transfer Function.ipynb new file mode 100644 index 0000000..0da7e1f --- /dev/null +++ b/xschem/vco_2-4GHz/doc/Transfer Function.ipynb
@@ -0,0 +1,149 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2.4 GHz VCO Transfer Function\n", + "Plot the transfer function of the VCO over different corners and temperatures" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from IPython.display import display, Markdown\n", + "import SpiceInterface\n", + "import h5py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Read in the results file" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[5.88235294e+09 5.88235294e+09 5.88235294e+09 5.26315789e+09\n", + " 5.26315789e+09 5.00000000e+09 5.00000000e+09 4.54545455e+09\n", + " 4.34782609e+09 4.16666667e+09 3.84615385e+09 3.57142857e+09\n", + " 3.33333333e+09 2.94117647e+09 2.63157895e+09 2.32558140e+09\n", + " 2.08333333e+09 1.85185185e+09 1.61290323e+09 1.44927536e+09\n", + " 1.31578947e+09 1.19047619e+09 1.09890110e+09 1.05263158e+09\n", + " 1.03092784e+09 1.02040816e+09 1.03092784e+09 1.02040816e+09\n", + " 1.02040816e+09 1.03092784e+09 1.02040816e+09 1.02040816e+09]\n" + ] + } + ], + "source": [ + "filename = '../tests/vco_2-4GHz_corners.hdf5'\n", + "with h5py.File(filename, 'r') as file:\n", + "\n", + " # grab the data keys\n", + " group_list = list(file.keys())\n", + " \n", + " # get the indexing data\n", + " indexing = {}\n", + " for key in list(file['indexing']):\n", + " indexing[key] = list(file['indexing'][key])\n", + " \n", + " \n", + " \n", + " # get the simulation data\n", + " data = list(file['data']) \n", + " print(data[0][0][0])\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plot the transfer function" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "vctl = np.linspace(0, 1.8, 32)\n", + "\n", + "for i in range(len(data)):\n", + " for j in range(len(data[0])):\n", + " for k in range(len(data[0][0])):\n", + " \n", + " plt.plot(vctl, [_/1e9 for _ in data[i][j][k]], 'b', alpha=0.4)\n", + "\n", + "plt.ylabel('Frequency (GHz)')\n", + "plt.xlabel('Control Voltage (V)')\n", + "plt.title('VCO Transfer Function')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}
diff --git a/xschem/vco_2-4GHz/tests/.ipynb_checkpoints/Corner Transfer Function-checkpoint.ipynb b/xschem/vco_2-4GHz/tests/.ipynb_checkpoints/Corner Transfer Function-checkpoint.ipynb new file mode 100644 index 0000000..7fec515 --- /dev/null +++ b/xschem/vco_2-4GHz/tests/.ipynb_checkpoints/Corner Transfer Function-checkpoint.ipynb
@@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 4 +}
diff --git a/xschem/vco_2-4GHz/tests/Corner Transfer Function.ipynb b/xschem/vco_2-4GHz/tests/Corner Transfer Function.ipynb new file mode 100644 index 0000000..888c372 --- /dev/null +++ b/xschem/vco_2-4GHz/tests/Corner Transfer Function.ipynb
@@ -0,0 +1,32 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}
diff --git a/xschem/vco_2-4GHz/tests/b3v32check.log b/xschem/vco_2-4GHz/tests/b3v32check.log new file mode 100644 index 0000000..569f6a3 --- /dev/null +++ b/xschem/vco_2-4GHz/tests/b3v32check.log
@@ -0,0 +1,4 @@ +BSIM3 Model (Supports: v3.2, v3.2.2, v3.2.3, v3.2.4) +Parameter Checking. +Model = xvco.x1.xmprimpos:nemod.3 +W = 3e-05, L = 1.8e-07, M = 1
diff --git a/xschem/vco_2-4GHz/tests/bsim4v5.out b/xschem/vco_2-4GHz/tests/bsim4v5.out new file mode 100644 index 0000000..fd29aae --- /dev/null +++ b/xschem/vco_2-4GHz/tests/bsim4v5.out
@@ -0,0 +1,5 @@ +BSIM4v5: Berkeley Short Channel IGFET Model-4 +Developed by Xuemei (Jane) Xi, Mohan Dunga, Prof. Ali Niknejad and Prof. Chenming Hu in 2003. + +++++++++++ BSIM4v5 PARAMETER CHECKING BELOW ++++++++++ +Model = xvco.x1.xxmprimpos.xsky130_fd_pr__rf_nfet_01v8_bm04w5p00l0p15:sky130_fd_pr__rf_nfet_01v8_bm04__model.6
diff --git a/xschem/vco_2-4GHz/tests/plot_transfer.py b/xschem/vco_2-4GHz/tests/plot_transfer.py new file mode 100644 index 0000000..2829915 --- /dev/null +++ b/xschem/vco_2-4GHz/tests/plot_transfer.py
@@ -0,0 +1,91 @@ +import matplotlib.pyplot as plt +from pathlib import Path +import numpy as np +import os +import re +import h5py +import subprocess +from spyci import spyci + +import SpiceInterface + + + +# read the generated netlist. +netlist_path = os.environ.get('HOME') + '/.xschem/simulations/vco_2-4GHz_tb.spice' + +# create the object +spice_interface_obj = SpiceInterface.SpiceInterface(netlist_path=netlist_path) + +# only save the Ip node to avoid using lots of memory +# spice_interface_obj.simulation['netlist'] = re.sub(r'\*\*\*\* end user architecture code', r'.save v(ip)\n**** end user architecture code', spice_interface_obj.simulation['netlist']) + + + +# define the sweeps +vctl_num = 32 +vdd = [1.8] + +corners = ['tt', 'sf', 'ff', 'ss', 'fs', 'll', 'hh', 'hl', 'lh'] +temp = [-40, 27, 125] + +# corners = ['tt'] +# temp = [25] + + +vctl = np.linspace(0, vdd, vctl_num) +freq = [] + + + +hdf_file = h5py.File('vco_2-4GHz_corners.hdf5', 'w') + +# prepopulate the data +values = np.zeros((len(vdd), len(corners), len(temp), vctl_num)) + +for vdd_i, current_vdd in enumerate(vdd): + for corner_i, current_corner in enumerate(corners): + + # set corner + spice_interface_obj.set_corner(current_corner) + + for temp_i, current_temp in enumerate(temp): + + # set temperature + spice_interface_obj.set_temp(current_temp) + + for vctl_i, current_vctl in enumerate(vctl): + + # set the parameters for this simulation run + parameters = [['vctl', current_vctl], ['vdd', current_vdd]] + spice_interface_obj.set_parameters(parameters) + + try: + + # run the simulation + spice_interface_obj.run_simulation() + + # add the calculated frequency to the array + values[vdd_i][corner_i][temp_i][vctl_i] = spice_interface_obj.measure_frequency(node='ip', measure_after_factor=0.5) + + print('Frequency = %0.3f MHz' % (values[vdd_i][corner_i][temp_i][vctl_i]/1e6)) + + except: + + # enter a None data for failed simulation step + values[vdd_i][corner_i][temp_i][vctl_i] = None + +# save the data to file +hdf_file.create_dataset('data', data=values) + +# save the indexing information +indexing_group = hdf_file.create_group('indexing') +indexing = [['vdd', vdd], ['corner', corners], ['temp', temp], ['vctl', vctl]] + +# save each of the index information +for index in indexing: + if type(index[1][0]) == str: + ascii_list = [_.encode("ascii", "ignore") for _ in index[1]] + indexing_group.create_dataset(index[0], (len(ascii_list),1),'S10', ascii_list) + else: + indexing_group.create_dataset(index[0], data=index[1]) \ No newline at end of file
diff --git a/xschem/vco_2-4GHz/tests/plot_transfer_pyspice.py b/xschem/vco_2-4GHz/tests/plot_transfer_pyspice.py new file mode 100644 index 0000000..eebb3d3 --- /dev/null +++ b/xschem/vco_2-4GHz/tests/plot_transfer_pyspice.py
@@ -0,0 +1,133 @@ +import matplotlib.pyplot as plt +from pathlib import Path +import numpy as np +import os +import re +import h5py + +import PySpice.Logging.Logging as Logging +logger = Logging.setup_logging() + +from PySpice.Spice.NgSpice.Shared import NgSpiceShared +from PySpice.Probe.Plot import plot +from PySpice.Unit import * + + + + +# read the generated netlist. +netlist_path = os.environ.get('HOME') + '/.xschem/simulations/vco_2-4GHz_tb.spice' +with open(netlist_path) as f: + netlist = f.read() + +# only saver the Ip node to avoid using lots of memory +# netlist += '.save v(ip)' + + + +number_points = 32 +vdd = [1.8] + + +corners = ['tt', 'sf', 'ff', 'ss', 'fs', 'll', 'hh', 'hl', 'lh'] +temp = [-40, 27, 125] + +# corners = ['ff', 'ss'] +# temp = [-40, 125] + + +vctl = np.linspace(0, vdd, number_points) +freq = [] + + +def set_parameters(netlist, vctl, corner, temp, vdd): + + print("NEW PARAMETER SET: vctl = %f, corner = %s, temp = %f, vdd = %f" % (vctl, corner, temp, vdd)) + + # VCO control voltage + sub_string = ".param vctl=%f" % vctl + netlist = re.sub(r'\.param vctl=.*', sub_string, netlist) + + # corner + sub_string = ".lib sky130_fd_pr/models/sky130.lib.spice %s" % corner + netlist = re.sub(r'\.lib sky130_fd_pr/models/sky130.lib.spice .*', sub_string, netlist) + + # temperature + sub_string = ".param temp=%f" % temp + netlist = re.sub(r'\.param temp=.*', sub_string, netlist) + sub_string = ".temp %f" % temp + netlist = re.sub(r'\.temp .*', sub_string, netlist) + + # supply voltage + sub_string = ".param vdd=%f" % vdd + netlist = re.sub(r'\.param vdd=.*', sub_string, netlist) + + return netlist + + +hdf_file = h5py.File('vco_2-4GHz_corners.hdf5', 'w') + +# prepopulate the data +values = np.zeros((len(vdd), len(corners), len(temp), number_points)) + +for vdd_i, current_vdd in enumerate(vdd): + for corner_i, current_corner in enumerate(corners): + for temp_i, current_temp in enumerate(temp): + for vctl_i, current_vctl in enumerate(vctl): + + # set the parameters for this simulation run + netlist = set_parameters(netlist, current_vctl, current_corner, current_temp, current_vdd) + + # run the simulation + try: + ngspice = NgSpiceShared.new_instance() + ngspice.load_circuit(netlist) + ngspice.run() + + # get the results + plot = ngspice.plot(simulation=None, plot_name=ngspice.last_plot) + analysis = plot.to_analysis() + + # trim to steady state + analysis_time = analysis._time[int(len(analysis._nodes['ip'])*0.5):] + analysis_data = analysis._nodes['ip'][int(len(analysis._nodes['ip'])*0.5):] + + # find first rising edge + for i in range(2,len(analysis_data)): + if (float(analysis_data[i]) > 0.9) and (float(analysis_data[i-1]) > 0.9) and (float(analysis_data[i-2]) < 0.9): + first_index = i + first_time = analysis_time[i] + break + + # find second rising edge + for i in range(first_index+3, len(analysis_data)): + if (float(analysis_data[i]) > 0.9) and (float(analysis_data[i-1]) > 0.9) and (float(analysis_data[i-2]) < 0.9): + second_index = i + second_time = analysis_time[i] + break + + # find third rising edge + for i in range(second_index+3, len(analysis_data)): + if (float(analysis_data[i]) > 0.9) and (float(analysis_data[i-1]) > 0.9) and (float(analysis_data[i-2]) < 0.9): + third_index = i + third_time = analysis_time[i] + break + + # add the calculated frequency to the array + values[vdd_i][corner_i][temp_i][vctl_i] = 1.0/(third_time-second_time) + ngspice.destroy() + + except: + + # enter a None data for failed simulation step + values[vdd_i][corner_i][temp_i][vctl_i] = None + + +# save the data to file +hdf_file.create_dataset('data', data=values) + +# save the indexing information +indexing_group = hdf_file.create_group('indexing') +indexing = [['vdd', vdd], ['corner', corners], ['temp', temp], ['vctl', vctl]] +for index in indexing: + indexing_group.create_dataset(index[0], data=index[1]) \ No newline at end of file
diff --git a/xschem/vco_2-4GHz/tests/sky130_fd_pr b/xschem/vco_2-4GHz/tests/sky130_fd_pr new file mode 120000 index 0000000..68eb173 --- /dev/null +++ b/xschem/vco_2-4GHz/tests/sky130_fd_pr
@@ -0,0 +1 @@ +../../../../skywater/sky130_fd_pr \ No newline at end of file
diff --git a/xschem/vco_2-4GHz/tests/spiceinterface_temp.out b/xschem/vco_2-4GHz/tests/spiceinterface_temp.out new file mode 100644 index 0000000..46b4868 --- /dev/null +++ b/xschem/vco_2-4GHz/tests/spiceinterface_temp.out
@@ -0,0 +1,116 @@ +codemodel: no such command available in ngspice +codemodel: no such command available in ngspice +codemodel: no such command available in ngspice +codemodel: no such command available in ngspice +codemodel: no such command available in ngspice +codemodel: no such command available in ngspice + +Circuit: **.subckt vco_2-4ghz_tb + +Scale set +Doing analysis at TEMP = 125.000000 and TNOM = 27.000000 + +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: Source conductance reset to 1.0e3 mho. +Warning: include: has no value, DC 0 assumed +Warning: i.xvco.i0: no DC value, transient time 0 value used +No. of Data Columns : 5 + +Initial Transient Solution +-------------------------- + +Node Voltage +---- ------- +vctl 0 +net1 0 +xvco.net1 0 +xvco.net8 0 +xvco.net2 0 +xvco.net7 0 +xvco.x1.net2 0 +xvco.x1.net1 0 +xvco.net3 0 +xvco.net4 0 +xvco.x2.net2 0 +xvco.x2.net1 0 +xvco.net5 0 +xvco.net6 0 +xvco.x3.net2 0 +xvco.x3.net1 0 +xvco.x4.net2 0 +xvco.x4.net1 0 +ip 0 +in 0 +xvco.x5.xrn.xsky130_fd_pr__res_xhigh_po_2p85.ra 0 +xvco.x5.xrp.xsky130_fd_pr__res_xhigh_po_2p85.ra 0 +qp 0 +qn 0 +xvco.x6.xrn.xsky130_fd_pr__res_xhigh_po_2p85.ra 0 +xvco.x6.xrp.xsky130_fd_pr__res_xhigh_po_2p85.ra 0 +ncp 0 +ncn 0 +xvco.x7.xrn.xsky130_fd_pr__res_xhigh_po_2p85.ra 0 +xvco.x7.xrp.xsky130_fd_pr__res_xhigh_po_2p85.ra 0 +fbp 0 +fbn 0 +xvco.x8.xrn.xsky130_fd_pr__res_xhigh_po_2p85.ra 0 +xvco.x8.xrp.xsky130_fd_pr__res_xhigh_po_2p85.ra 0 +sky130_fd_pr__esd_nfet_05v0_nvt.pm3 0 + 0 +vdd#branch 0 +v1#branch 0 + + +No. of Data Rows : 1026 + +Total analysis time (seconds) = 1.71965 + +Total CPU time (seconds) = 51.261 + +Total DRAM available = 7908.293 MB. +DRAM currently available = 153.211 MB. +Total ngspice program size = 243.086 MB. +Resident set size = 223.559 MB. +Shared ngspice pages = 6.891 MB. +Text (code) pages = 5.105 MB. +Stack = 0 bytes. +Library pages = 217.039 MB. +
diff --git a/xschem/vco_2-4GHz/tests/spiceinterface_temp.raw b/xschem/vco_2-4GHz/tests/spiceinterface_temp.raw new file mode 100644 index 0000000..db480ba --- /dev/null +++ b/xschem/vco_2-4GHz/tests/spiceinterface_temp.raw
@@ -0,0 +1,5143 @@ +Title: **.subckt vco_2-4ghz_tb +Date: Sun Oct 4 03:13:25 2020 +Plotname: Transient Analysis +Flags: real +No. Variables: 5 +No. Points: 1026 +Variables: + 0 time time + 1 v(ip) voltage + 2 v(in) voltage + 3 v(vctl) voltage + 4 i(vdd) current +Values: +0 0.000000000000000e+00 + 0.000000000000000e+00 + 0.000000000000000e+00 + 0.000000000000000e+00 + 0.000000000000000e+00 +1 1.000000000000000e-13 + 5.584778341732823e-02 + 5.584778341732826e-02 + 1.800000000000000e+00 + -6.451056818629723e-01 +2 1.057671010611960e-13 + 5.884416864335116e-02 + 5.884416864335120e-02 + 1.800000000000000e+00 + -2.605134718933804e-01 +3 1.173013031835881e-13 + 6.446821341785063e-02 + 6.446821341785068e-02 + 1.800000000000000e+00 + -2.465820749374185e-01 +4 1.403697074283722e-13 + 7.388857491146857e-02 + 7.388857491146855e-02 + 1.800000000000000e+00 + -2.124530929253619e-01 +5 1.865065159179404e-13 + 8.782874388990564e-02 + 8.782874388990543e-02 + 1.800000000000000e+00 + -1.623169384310600e-01 +6 2.787801328970768e-13 + 1.063823933001555e-01 + 1.063823933001552e-01 + 1.800000000000000e+00 + -1.009686008290037e-01 +7 4.633273668553496e-13 + 1.329742262909329e-01 + 1.329742262909323e-01 + 1.800000000000000e+00 + -5.902972848061155e-02 +8 8.262155630200710e-13 + 1.766594443967695e-01 + 1.766594443967684e-01 + 1.800000000000000e+00 + -3.888834967401125e-02 +9 1.505769605101951e-12 + 2.464451157385203e-01 + 2.464451157385192e-01 + 1.800000000000000e+00 + -2.932818544446008e-02 +10 2.864877689265712e-12 + 3.677666539116059e-01 + 3.677666539116047e-01 + 1.800000000000000e+00 + -2.172523358760791e-02 +11 4.094483999179020e-12 + 4.681414198912776e-01 + 4.681414198912766e-01 + 1.800000000000000e+00 + -1.603922918228803e-02 +12 6.553696619005637e-12 + 6.525344052532037e-01 + 6.525344052532028e-01 + 1.800000000000000e+00 + -6.902597535707562e-03 +13 9.999999999999999e-12 + 8.730019008733907e-01 + 8.730019008733899e-01 + 1.800000000000000e+00 + -5.810818746850069e-03 +14 1.036053834580368e-11 + 8.932100184569198e-01 + 8.932100184569189e-01 + 1.800000000000000e+00 + -4.926860975357070e-03 +15 1.108161503741103e-11 + 9.327888961207250e-01 + 9.327888961207240e-01 + 1.800000000000000e+00 + -4.661135957876450e-03 +16 1.252376842062574e-11 + 1.007017334635486e+00 + 1.007017334635485e+00 + 1.800000000000000e+00 + -4.433643085670656e-03 +17 1.540807518705516e-11 + 1.137569917815776e+00 + 1.137569917815775e+00 + 1.800000000000000e+00 + -4.019420362225548e-03 +18 2.117668871991399e-11 + 1.338375549270802e+00 + 1.338375549270801e+00 + 1.800000000000000e+00 + -3.634473046744243e-03 +19 3.117668871991399e-11 + 1.542843206302183e+00 + 1.542843206302184e+00 + 1.800000000000000e+00 + -3.312065496515267e-03 +20 4.117668871991398e-11 + 1.625721242548734e+00 + 1.625721242548737e+00 + 1.800000000000000e+00 + -3.318004704400327e-03 +21 5.117668871991398e-11 + 1.649992498282766e+00 + 1.649992498282772e+00 + 1.800000000000000e+00 + -3.323113319858280e-03 +22 6.117668871991398e-11 + 1.653662530769758e+00 + 1.653662530769763e+00 + 1.800000000000000e+00 + -3.384956546671526e-03 +23 7.117668871991398e-11 + 1.652024318572552e+00 + 1.652024318572555e+00 + 1.800000000000000e+00 + -3.373476203950413e-03 +24 8.117668871991399e-11 + 1.649879998422803e+00 + 1.649879998422805e+00 + 1.800000000000000e+00 + -3.413848334065914e-03 +25 9.117668871991399e-11 + 1.648236511608842e+00 + 1.648236511608844e+00 + 1.800000000000000e+00 + -3.391029985749361e-03 +26 1.011766887199140e-10 + 1.647202367069704e+00 + 1.647202367069704e+00 + 1.800000000000000e+00 + -3.422371838930267e-03 +27 1.111766887199140e-10 + 1.646566490223847e+00 + 1.646566490223846e+00 + 1.800000000000000e+00 + -3.396843053175545e-03 +28 1.211766887199140e-10 + 1.646216945191087e+00 + 1.646216945191087e+00 + 1.800000000000000e+00 + -3.424399781880003e-03 +29 1.311766887199140e-10 + 1.646007743942169e+00 + 1.646007743942169e+00 + 1.800000000000000e+00 + -3.399021682409598e-03 +30 1.411766887199140e-10 + 1.645904149464842e+00 + 1.645904149464844e+00 + 1.800000000000000e+00 + -3.424518355710320e-03 +31 1.511766887199140e-10 + 1.645837311013686e+00 + 1.645837311013693e+00 + 1.800000000000000e+00 + -3.400101784494815e-03 +32 1.611766887199140e-10 + 1.645810287121931e+00 + 1.645810287121946e+00 + 1.800000000000000e+00 + -3.424112231134112e-03 +33 1.711766887199139e-10 + 1.645787553681785e+00 + 1.645787553681807e+00 + 1.800000000000000e+00 + -3.400835061135993e-03 +34 1.811766887199139e-10 + 1.645782694601946e+00 + 1.645782694601974e+00 + 1.800000000000000e+00 + -3.423585390376990e-03 +35 1.911766887199139e-10 + 1.645773476312995e+00 + 1.645773476313021e+00 + 1.800000000000000e+00 + -3.401440055315912e-03 +36 2.011766887199139e-10 + 1.645774555465724e+00 + 1.645774555465741e+00 + 1.800000000000000e+00 + -3.423052716408174e-03 +37 2.111766887199139e-10 + 1.645769668702163e+00 + 1.645769668702163e+00 + 1.800000000000000e+00 + -3.401980843867095e-03 +38 2.211766887199139e-10 + 1.645772066633549e+00 + 1.645772066633520e+00 + 1.800000000000000e+00 + -3.422545353227601e-03 +39 2.311766887199139e-10 + 1.645768753418792e+00 + 1.645768753418719e+00 + 1.800000000000000e+00 + -3.402477370598412e-03 +40 2.411766887199139e-10 + 1.645771228384768e+00 + 1.645771228384625e+00 + 1.800000000000000e+00 + -3.422070415272143e-03 +41 2.511766887199139e-10 + 1.645768625866064e+00 + 1.645768625865818e+00 + 1.800000000000000e+00 + -3.402937017964174e-03 +42 2.611766887199139e-10 + 1.645770886985162e+00 + 1.645770886984777e+00 + 1.800000000000000e+00 + -3.421628190538152e-03 +43 2.711766887199139e-10 + 1.645768695495528e+00 + 1.645768695494971e+00 + 1.800000000000000e+00 + -3.403363564899504e-03 +44 2.811766887199140e-10 + 1.645770706988365e+00 + 1.645770706987616e+00 + 1.800000000000000e+00 + -3.421217113917505e-03 +45 2.911766887199140e-10 + 1.645768801225862e+00 + 1.645768801224923e+00 + 1.800000000000000e+00 + -3.403759690042822e-03 +46 3.011766887199140e-10 + 1.645770588050754e+00 + 1.645770588049665e+00 + 1.800000000000000e+00 + -3.420835146551027e-03 +47 3.111766887199140e-10 + 1.645768902126431e+00 + 1.645768902125309e+00 + 1.800000000000000e+00 + -3.404127667675826e-03 +48 3.211766887199140e-10 + 1.645770498027595e+00 + 1.645770498026657e+00 + 1.800000000000000e+00 + -3.420480278639072e-03 +49 3.311766887199140e-10 + 1.645768990037167e+00 + 1.645768990036768e+00 + 1.800000000000000e+00 + -3.404469577097304e-03 +50 3.411766887199141e-10 + 1.645770425159490e+00 + 1.645770425160178e+00 + 1.800000000000000e+00 + -3.420150504657771e-03 +51 3.511766887199141e-10 + 1.645769065142631e+00 + 1.645769065145174e+00 + 1.800000000000000e+00 + -3.404787334032401e-03 +52 3.611766887199141e-10 + 1.645770364165175e+00 + 1.645770364170572e+00 + 1.800000000000000e+00 + -3.419844008490513e-03 +53 3.711766887199141e-10 + 1.645769129360351e+00 + 1.645769129369804e+00 + 1.800000000000000e+00 + -3.405082711769581e-03 +54 3.811766887199141e-10 + 1.645770312112671e+00 + 1.645770312127519e+00 + 1.800000000000000e+00 + -3.419559074598343e-03 +55 3.911766887199141e-10 + 1.645769184618519e+00 + 1.645769184640048e+00 + 1.800000000000000e+00 + -3.405357358567411e-03 +56 4.000000000000000e-10 + 1.645770263963463e+00 + 1.645770263991664e+00 + 1.800000000000000e+00 + -3.419277064959597e-03 +57 4.010000000000000e-10 + 1.645769786215185e+00 + 1.645769786244157e+00 + 1.800000000000000e+00 + -3.412681904899839e-03 +58 4.030000000000000e-10 + 1.645769703217130e+00 + 1.645769703247631e+00 + 1.800000000000000e+00 + -3.412146034177485e-03 +59 4.070000000000000e-10 + 1.645769769711828e+00 + 1.645769769745625e+00 + 1.800000000000000e+00 + -3.412614618528416e-03 +60 4.150000000000000e-10 + 1.645769713922942e+00 + 1.645769713962483e+00 + 1.800000000000000e+00 + -3.412175863181285e-03 +61 4.250000000000000e-10 + 1.645769775873863e+00 + 1.645769775917424e+00 + 1.800000000000000e+00 + -3.412597862765284e-03 +62 4.350000000000000e-10 + 1.645769726267815e+00 + 1.645769726310216e+00 + 1.800000000000000e+00 + -3.412190084140200e-03 +63 4.450000000000001e-10 + 1.645769778881689e+00 + 1.645769778912397e+00 + 1.800000000000000e+00 + -3.412584143288763e-03 +64 4.550000000000001e-10 + 1.645769731543004e+00 + 1.645769731545552e+00 + 1.800000000000000e+00 + -3.412203284884343e-03 +65 4.650000000000001e-10 + 1.645769778057495e+00 + 1.645769778007575e+00 + 1.800000000000000e+00 + -3.412571413893622e-03 +66 4.750000000000001e-10 + 1.645769734403114e+00 + 1.645769734267790e+00 + 1.800000000000000e+00 + -3.412215529668833e-03 +67 4.850000000000001e-10 + 1.645769776500564e+00 + 1.645769776238001e+00 + 1.800000000000000e+00 + -3.412559631111513e-03 +68 4.950000000000000e-10 + 1.645769736569261e+00 + 1.645769736129988e+00 + 1.800000000000000e+00 + -3.412226869743001e-03 +69 5.000000000000000e-10 + 1.645769774140345e+00 + 1.645769773593714e+00 + 1.800000000000000e+00 + -3.412543557051255e-03 +70 5.010000000000000e-10 + 1.645769757903154e+00 + 1.645769757333307e+00 + 1.800000000000000e+00 + -3.412402029544245e-03 +71 5.030000000000000e-10 + 1.645769754986987e+00 + 1.645769754368764e+00 + 1.800000000000000e+00 + -3.412380875356557e-03 +72 5.070000000000000e-10 + 1.645769757398990e+00 + 1.645769756676266e+00 + 1.800000000000000e+00 + -3.412399220718120e-03 +73 5.150000000000000e-10 + 1.645769755388969e+00 + 1.645769754439343e+00 + 1.800000000000000e+00 + -3.412382117012231e-03 +74 5.249999999999999e-10 + 1.645769757522087e+00 + 1.645769756269283e+00 + 1.800000000000000e+00 + -3.412398527624574e-03 +75 5.349999999999999e-10 + 1.645769755731549e+00 + 1.645769754194663e+00 + 1.800000000000000e+00 + -3.412382702627997e-03 +76 5.449999999999999e-10 + 1.645769757568187e+00 + 1.645769755848005e+00 + 1.800000000000000e+00 + -3.412397961647659e-03 +77 5.549999999999998e-10 + 1.645769755762341e+00 + 1.645769754080515e+00 + 1.800000000000000e+00 + -3.412383246026797e-03 +78 5.649999999999998e-10 + 1.645769757069409e+00 + 1.645769755826707e+00 + 1.800000000000000e+00 + -3.412397435038106e-03 +79 5.749999999999998e-10 + 1.645769754848160e+00 + 1.645769754685880e+00 + 1.800000000000000e+00 + -3.412383754244431e-03 +80 5.849999999999997e-10 + 1.645769755144665e+00 + 1.645769757009238e+00 + 1.800000000000000e+00 + -3.412396948585417e-03 +81 5.949999999999997e-10 + 1.645769751853544e+00 + 1.645769757041004e+00 + 1.800000000000000e+00 + -3.412384222521331e-03 +82 6.000000000000000e-10 + 1.645769751906942e+00 + 1.645769759345289e+00 + 1.800000000000000e+00 + -3.412396287230421e-03 +83 6.010000000000000e-10 + 1.645769751057155e+00 + 1.645769759009323e+00 + 1.800000000000000e+00 + -3.412390946943565e-03 +84 6.030000000000000e-10 + 1.645769750356255e+00 + 1.645769759373837e+00 + 1.800000000000000e+00 + -3.412390076194287e-03 +85 6.070000000000000e-10 + 1.645769749128784e+00 + 1.645769760510819e+00 + 1.800000000000000e+00 + -3.412390825978869e-03 +86 6.149999999999999e-10 + 1.645769745878351e+00 + 1.645769762989862e+00 + 1.800000000000000e+00 + -3.412390135280352e-03 +87 6.249999999999999e-10 + 1.645769740926613e+00 + 1.645769767108621e+00 + 1.800000000000000e+00 + -3.412390801414576e-03 +88 6.349999999999999e-10 + 1.645769734747776e+00 + 1.645769771877236e+00 + 1.800000000000000e+00 + -3.412390149629211e-03 +89 6.449999999999998e-10 + 1.645769727985504e+00 + 1.645769777117008e+00 + 1.800000000000000e+00 + -3.412390775950886e-03 +90 6.549999999999998e-10 + 1.645769721195957e+00 + 1.645769781633797e+00 + 1.800000000000000e+00 + -3.412390175158414e-03 +91 6.649999999999998e-10 + 1.645769716085418e+00 + 1.645769784063408e+00 + 1.800000000000000e+00 + -3.412390753904454e-03 +92 6.749999999999997e-10 + 1.645769714728622e+00 + 1.645769781666051e+00 + 1.800000000000000e+00 + -3.412390195024647e-03 +93 6.849999999999997e-10 + 1.645769720728648e+00 + 1.645769771037602e+00 + 1.800000000000000e+00 + -3.412390734769867e-03 +94 6.949999999999997e-10 + 1.645769738449904e+00 + 1.645769747068161e+00 + 1.800000000000000e+00 + -3.412390213002614e-03 +95 7.049999999999996e-10 + 1.645769773835019e+00 + 1.645769703779931e+00 + 1.800000000000000e+00 + -3.412390716069096e-03 +96 7.149999999999996e-10 + 1.645769833332412e+00 + 1.645769633790655e+00 + 1.800000000000000e+00 + -3.412390233817975e-03 +97 7.249999999999996e-10 + 1.645769923918329e+00 + 1.645769529762267e+00 + 1.800000000000000e+00 + -3.412390698212339e-03 +98 7.349999999999995e-10 + 1.645770050977075e+00 + 1.645769385023086e+00 + 1.800000000000000e+00 + -3.412390249870850e-03 +99 7.449999999999995e-10 + 1.645770216687549e+00 + 1.645769196506746e+00 + 1.800000000000000e+00 + -3.412390683496804e-03 +100 7.549999999999995e-10 + 1.645770415873207e+00 + 1.645768967489226e+00 + 1.800000000000000e+00 + -3.412390265767092e-03 +101 7.649999999999994e-10 + 1.645770631724675e+00 + 1.645768713000917e+00 + 1.800000000000000e+00 + -3.412390668072689e-03 +102 7.749999999999994e-10 + 1.645770828818379e+00 + 1.645768465499569e+00 + 1.800000000000000e+00 + -3.412390279808801e-03 +103 7.849999999999994e-10 + 1.645770945868592e+00 + 1.645768283051033e+00 + 1.800000000000000e+00 + -3.412390654307510e-03 +104 7.949999999999993e-10 + 1.645770886508393e+00 + 1.645768257208878e+00 + 1.800000000000000e+00 + -3.412390295190778e-03 +105 8.049999999999993e-10 + 1.645770511458362e+00 + 1.645768521599044e+00 + 1.800000000000000e+00 + -3.412390640285142e-03 +106 8.149999999999993e-10 + 1.645769632019884e+00 + 1.645769256989647e+00 + 1.800000000000000e+00 + -3.412390306275412e-03 +107 8.249999999999992e-10 + 1.645768010250598e+00 + 1.645770691536980e+00 + 1.800000000000000e+00 + -3.412390630369842e-03 +108 8.349999999999992e-10 + 1.645765368703513e+00 + 1.645773089437946e+00 + 1.800000000000000e+00 + -3.412390316547973e-03 +109 8.449999999999991e-10 + 1.645761418114466e+00 + 1.645776723189720e+00 + 1.800000000000000e+00 + -3.412390617590119e-03 +110 8.549999999999991e-10 + 1.645755909635030e+00 + 1.645781819331971e+00 + 1.800000000000000e+00 + -3.412390329647624e-03 +111 8.649999999999991e-10 + 1.645748723058871e+00 + 1.645788469526483e+00 + 1.800000000000000e+00 + -3.412390609807662e-03 +112 8.749999999999990e-10 + 1.645739999632309e+00 + 1.645796495011507e+00 + 1.800000000000000e+00 + -3.412390339920647e-03 +113 8.849999999999990e-10 + 1.645730329882056e+00 + 1.645805257111369e+00 + 1.800000000000000e+00 + -3.412390605405011e-03 +114 8.949999999999990e-10 + 1.645720999252088e+00 + 1.645813407763322e+00 + 1.800000000000000e+00 + -3.412390360296374e-03 +115 9.049999999999989e-10 + 1.645714288041608e+00 + 1.645818586155631e+00 + 1.800000000000000e+00 + -3.412390613033772e-03 +116 9.149999999999989e-10 + 1.645713803110740e+00 + 1.645817080559725e+00 + 1.800000000000000e+00 + -3.412390401710274e-03 +117 9.249999999999989e-10 + 1.645724796572757e+00 + 1.645803501559427e+00 + 1.800000000000000e+00 + -3.412390666863720e-03 +118 9.349999999999989e-10 + 1.645754387894936e+00 + 1.645770545578866e+00 + 1.800000000000000e+00 + -3.412390516801396e-03 +119 9.449999999999989e-10 + 1.645811560201366e+00 + 1.645708977546636e+00 + 1.800000000000000e+00 + -3.412390858053039e-03 +120 9.549999999999989e-10 + 1.645906739581242e+00 + 1.645608018809347e+00 + 1.800000000000000e+00 + -3.412390893710904e-03 +121 9.649999999999988e-10 + 1.646050699545307e+00 + 1.645456396882429e+00 + 1.800000000000000e+00 + -3.412391546650548e-03 +122 9.749999999999988e-10 + 1.646252475587845e+00 + 1.645244396253043e+00 + 1.800000000000000e+00 + -3.412392175715520e-03 +123 9.849999999999988e-10 + 1.646515906218514e+00 + 1.644967292041994e+00 + 1.800000000000000e+00 + -3.412393867340418e-03 +124 9.949999999999987e-10 + 1.646834421443471e+00 + 1.644630593689531e+00 + 1.800000000000000e+00 + -3.412396466970547e-03 +125 1.004999999999999e-09 + 1.647183767037581e+00 + 1.644257489708885e+00 + 1.800000000000000e+00 + -3.412401757910922e-03 +126 1.014999999999999e-09 + 1.647512478472903e+00 + 1.643898663395590e+00 + 1.800000000000000e+00 + -3.412411020508532e-03 +127 1.024999999999999e-09 + 1.647730213207117e+00 + 1.643644233317147e+00 + 1.800000000000000e+00 + -3.412428536120306e-03 +128 1.034999999999999e-09 + 1.647694459387378e+00 + 1.643636738711182e+00 + 1.800000000000000e+00 + -3.412460338874487e-03 +129 1.044999999999999e-09 + 1.647196755425063e+00 + 1.644082725084535e+00 + 1.800000000000000e+00 + -3.412519327189738e-03 +130 1.054999999999999e-09 + 1.645950518576782e+00 + 1.645258457909790e+00 + 1.800000000000000e+00 + -3.412627501408162e-03 +131 1.064999999999998e-09 + 1.643584293181759e+00 + 1.647502698858462e+00 + 1.800000000000000e+00 + -3.412827002152088e-03 +132 1.074999999999998e-09 + 1.639647422564102e+00 + 1.651186961922688e+00 + 1.800000000000000e+00 + -3.413193606963189e-03 +133 1.084999999999998e-09 + 1.633640704435639e+00 + 1.656653037105680e+00 + 1.800000000000000e+00 + -3.413867835103876e-03 +134 1.094999999999998e-09 + 1.625092593898819e+00 + 1.664112375679860e+00 + 1.800000000000000e+00 + -3.415104783005529e-03 +135 1.104999999999998e-09 + 1.613709659928160e+00 + 1.673516591788181e+00 + 1.800000000000000e+00 + -3.417368375377107e-03 +136 1.114999999999998e-09 + 1.599632958103093e+00 + 1.684432223484812e+00 + 1.800000000000000e+00 + -3.421486658577500e-03 +137 1.124999999999998e-09 + 1.583823583492193e+00 + 1.695966626438729e+00 + 1.800000000000000e+00 + -3.428903050634808e-03 +138 1.134999999999998e-09 + 1.568567959802440e+00 + 1.706748984326536e+00 + 1.800000000000000e+00 + -3.442010955794601e-03 +139 1.144999999999998e-09 + 1.557968792995711e+00 + 1.714843161724434e+00 + 1.800000000000000e+00 + -3.464416820767577e-03 +140 1.154999999999998e-09 + 1.557902981730064e+00 + 1.717405571600383e+00 + 1.800000000000000e+00 + -3.500410998310757e-03 +141 1.164999999999998e-09 + 1.574314647210608e+00 + 1.710376921260141e+00 + 1.800000000000000e+00 + -3.550937223110985e-03 +142 1.174999999999998e-09 + 1.608898737839601e+00 + 1.689400687520199e+00 + 1.800000000000000e+00 + -3.606428647701678e-03 +143 1.184999999999998e-09 + 1.654470962498233e+00 + 1.652352362732034e+00 + 1.800000000000000e+00 + -3.644688458968343e-03 +144 1.194999999999998e-09 + 1.697444388553363e+00 + 1.600660369416316e+00 + 1.800000000000000e+00 + -3.654899377844497e-03 +145 1.204999999999998e-09 + 1.727807172452028e+00 + 1.536842915196602e+00 + 1.800000000000000e+00 + -3.646880748324554e-03 +146 1.214999999999998e-09 + 1.747691225188001e+00 + 1.463676938192330e+00 + 1.800000000000000e+00 + -3.631967042182684e-03 +147 1.224999999999998e-09 + 1.763753478247061e+00 + 1.385247316921451e+00 + 1.800000000000000e+00 + -3.629773661089952e-03 +148 1.234999999999998e-09 + 1.777023748083172e+00 + 1.305453737193166e+00 + 1.800000000000000e+00 + -3.667603571130156e-03 +149 1.244999999999998e-09 + 1.786288190275880e+00 + 1.228130470009061e+00 + 1.800000000000000e+00 + -3.707569017136458e-03 +150 1.254999999999998e-09 + 1.791975461634411e+00 + 1.155956152805193e+00 + 1.800000000000000e+00 + -3.709025882742927e-03 +151 1.264999999999998e-09 + 1.795294849870552e+00 + 1.085251102749292e+00 + 1.800000000000000e+00 + -3.696425539060335e-03 +152 1.274999999999998e-09 + 1.797143137741592e+00 + 1.009542414272639e+00 + 1.800000000000000e+00 + -3.685665818338856e-03 +153 1.284999999999998e-09 + 1.798169527484772e+00 + 9.286219685391855e-01 + 1.800000000000000e+00 + -3.679070275616913e-03 +154 1.294999999999998e-09 + 1.798734967649053e+00 + 8.465271517904525e-01 + 1.800000000000000e+00 + -3.691378913546377e-03 +155 1.304999999999998e-09 + 1.799041225129610e+00 + 7.672705777625173e-01 + 1.800000000000000e+00 + -3.700637073338298e-03 +156 1.314999999999998e-09 + 1.799232690350611e+00 + 6.945901405024852e-01 + 1.800000000000000e+00 + -3.676367357621563e-03 +157 1.324999999999998e-09 + 1.799380381998742e+00 + 6.306895953017236e-01 + 1.800000000000000e+00 + -3.683460787369411e-03 +158 1.334999999999998e-09 + 1.799463589433472e+00 + 5.762083746681728e-01 + 1.800000000000000e+00 + -3.721624900179214e-03 +159 1.344999999999998e-09 + 1.799568534079229e+00 + 5.310468291097590e-01 + 1.800000000000000e+00 + -3.780455693470798e-03 +160 1.354999999999997e-09 + 1.799743751129328e+00 + 4.945593845782534e-01 + 1.800000000000000e+00 + -3.823603003066378e-03 +161 1.364999999999997e-09 + 1.800030202878532e+00 + 4.655236063291083e-01 + 1.800000000000000e+00 + -3.845593566285085e-03 +162 1.374999999999997e-09 + 1.800514864587455e+00 + 4.423337155946572e-01 + 1.800000000000000e+00 + -3.826746187530861e-03 +163 1.384999999999997e-09 + 1.801409010706521e+00 + 4.233859702507306e-01 + 1.800000000000000e+00 + -3.785930662668891e-03 +164 1.394999999999997e-09 + 1.803008063789563e+00 + 4.076644654816430e-01 + 1.800000000000000e+00 + -3.747076432631337e-03 +165 1.404999999999997e-09 + 1.804563623662371e+00 + 3.951239900706501e-01 + 1.800000000000000e+00 + -3.717569698091807e-03 +166 1.414999999999997e-09 + 1.805042953040107e+00 + 3.864729650185484e-01 + 1.800000000000000e+00 + -3.642523792248647e-03 +167 1.424999999999997e-09 + 1.804913977394702e+00 + 3.831928129414082e-01 + 1.800000000000000e+00 + -3.617897236957566e-03 +168 1.434999999999997e-09 + 1.804367093140099e+00 + 3.882263277970697e-01 + 1.800000000000000e+00 + -3.638261182522786e-03 +169 1.444999999999997e-09 + 1.803591606000393e+00 + 4.068370452815714e-01 + 1.800000000000000e+00 + -3.700567595328451e-03 +170 1.454999999999997e-09 + 1.803143834742076e+00 + 4.480609421303721e-01 + 1.800000000000000e+00 + -3.765360589321083e-03 +171 1.464999999999997e-09 + 1.803222057506055e+00 + 5.281650110910601e-01 + 1.800000000000000e+00 + -3.828065885623301e-03 +172 1.474999999999997e-09 + 1.804095722534061e+00 + 6.695506510835194e-01 + 1.800000000000000e+00 + -3.858882978243597e-03 +173 1.484999999999997e-09 + 1.806084388858442e+00 + 8.743792319826806e-01 + 1.800000000000000e+00 + -3.854167893329529e-03 +174 1.494999999999997e-09 + 1.809495537491819e+00 + 1.119797026226788e+00 + 1.800000000000000e+00 + -3.807858953665617e-03 +175 1.504999999999997e-09 + 1.813001720852507e+00 + 1.356244661323528e+00 + 1.800000000000000e+00 + -3.753635394233745e-03 +176 1.514999999999997e-09 + 1.814395653509394e+00 + 1.530259823454982e+00 + 1.800000000000000e+00 + -3.716130986568787e-03 +177 1.524999999999997e-09 + 1.812006454975446e+00 + 1.638072092626055e+00 + 1.800000000000000e+00 + -3.637903108533009e-03 +178 1.534999999999997e-09 + 1.801624499878758e+00 + 1.705308023017956e+00 + 1.800000000000000e+00 + -3.577027833231812e-03 +179 1.544999999999997e-09 + 1.776079192374136e+00 + 1.746739944600872e+00 + 1.800000000000000e+00 + -3.576902494015518e-03 +180 1.554999999999997e-09 + 1.730392170447836e+00 + 1.770594979972779e+00 + 1.800000000000000e+00 + -3.623781057656841e-03 +181 1.564999999999997e-09 + 1.665192045107327e+00 + 1.783826608286581e+00 + 1.800000000000000e+00 + -3.692998572236113e-03 +182 1.574999999999997e-09 + 1.585427095542136e+00 + 1.790986592543466e+00 + 1.800000000000000e+00 + -3.767769424216518e-03 +183 1.584999999999997e-09 + 1.497431249749211e+00 + 1.794946097595233e+00 + 1.800000000000000e+00 + -3.830810547483502e-03 +184 1.594999999999997e-09 + 1.406875782831311e+00 + 1.797075982824461e+00 + 1.800000000000000e+00 + -3.864082327804067e-03 +185 1.604999999999997e-09 + 1.318042607871056e+00 + 1.798330957567963e+00 + 1.800000000000000e+00 + -3.854951520711972e-03 +186 1.614999999999997e-09 + 1.233784099794929e+00 + 1.799022195461774e+00 + 1.800000000000000e+00 + -3.805682068026451e-03 +187 1.624999999999997e-09 + 1.155724191541589e+00 + 1.799426590617220e+00 + 1.800000000000000e+00 + -3.747996574781330e-03 +188 1.634999999999997e-09 + 1.085644208378427e+00 + 1.799551088797352e+00 + 1.800000000000000e+00 + -3.707172166783868e-03 +189 1.644999999999996e-09 + 1.025549438756512e+00 + 1.799662016204799e+00 + 1.800000000000000e+00 + -3.621282260291042e-03 +190 1.654999999999996e-09 + 9.705856475644180e-01 + 1.799727467587934e+00 + 1.800000000000000e+00 + -3.561843664913556e-03 +191 1.664999999999996e-09 + 9.099479268404868e-01 + 1.799766246008048e+00 + 1.800000000000000e+00 + -3.563356935315235e-03 +192 1.674999999999996e-09 + 8.417500115820025e-01 + 1.799751665336193e+00 + 1.800000000000000e+00 + -3.611226630621845e-03 +193 1.684999999999996e-09 + 7.715925722983346e-01 + 1.799780016670134e+00 + 1.800000000000000e+00 + -3.681823133302376e-03 +194 1.694999999999996e-09 + 7.042373039344787e-01 + 1.799785862642656e+00 + 1.800000000000000e+00 + -3.757902345811216e-03 +195 1.704999999999996e-09 + 6.430910929300432e-01 + 1.799818335477736e+00 + 1.800000000000000e+00 + -3.824635866096860e-03 +196 1.714999999999996e-09 + 5.895768261323753e-01 + 1.799829252038904e+00 + 1.800000000000000e+00 + -3.861329195991072e-03 +197 1.724999999999996e-09 + 5.441077684117186e-01 + 1.799858069229605e+00 + 1.800000000000000e+00 + -3.857714181637103e-03 +198 1.734999999999996e-09 + 5.064360574259608e-01 + 1.799871065244617e+00 + 1.800000000000000e+00 + -3.809771970841655e-03 +199 1.744999999999996e-09 + 4.759583987640476e-01 + 1.799889394811856e+00 + 1.800000000000000e+00 + -3.751601130446970e-03 +200 1.754999999999996e-09 + 4.515607700137300e-01 + 1.799869549225747e+00 + 1.800000000000000e+00 + -3.708872342487653e-03 +201 1.764999999999996e-09 + 4.320587352951883e-01 + 1.799855635086959e+00 + 1.800000000000000e+00 + -3.627714566518307e-03 +202 1.774999999999996e-09 + 4.166716014831224e-01 + 1.799869237499411e+00 + 1.800000000000000e+00 + -3.559492801725597e-03 +203 1.784999999999996e-09 + 4.045317459293228e-01 + 1.799833295601061e+00 + 1.800000000000000e+00 + -3.557244443083291e-03 +204 1.794999999999996e-09 + 3.948396633131850e-01 + 1.799738851246522e+00 + 1.800000000000000e+00 + -3.599807263262475e-03 +205 1.804999999999996e-09 + 3.870633532976486e-01 + 1.799708157143791e+00 + 1.800000000000000e+00 + -3.670653033406284e-03 +206 1.814999999999996e-09 + 3.805986358676119e-01 + 1.799728529164367e+00 + 1.800000000000000e+00 + -3.746010625908041e-03 +207 1.824999999999996e-09 + 3.750819826947491e-01 + 1.799824072652163e+00 + 1.800000000000000e+00 + -3.816891890151444e-03 +208 1.834999999999996e-09 + 3.702248534253251e-01 + 1.799981064660390e+00 + 1.800000000000000e+00 + -3.857679146300621e-03 +209 1.844999999999996e-09 + 3.658032231375440e-01 + 1.800258731862448e+00 + 1.800000000000000e+00 + -3.861593224552976e-03 +210 1.854999999999996e-09 + 3.615917947753563e-01 + 1.800769568344042e+00 + 1.800000000000000e+00 + -3.817353988379736e-03 +211 1.864999999999996e-09 + 3.573655087050323e-01 + 1.801763445373537e+00 + 1.800000000000000e+00 + -3.759042002838693e-03 +212 1.874999999999996e-09 + 3.532087664979774e-01 + 1.803584733431063e+00 + 1.800000000000000e+00 + -3.714223374251192e-03 +213 1.884999999999996e-09 + 3.496028861605813e-01 + 1.804804789329926e+00 + 1.800000000000000e+00 + -3.640950951007271e-03 +214 1.894999999999996e-09 + 3.473593530415920e-01 + 1.805069634442827e+00 + 1.800000000000000e+00 + -3.562948659118380e-03 +215 1.904999999999997e-09 + 3.477945332433399e-01 + 1.804744012313110e+00 + 1.800000000000000e+00 + -3.553646035400723e-03 +216 1.914999999999997e-09 + 3.535426623109633e-01 + 1.803880590160033e+00 + 1.800000000000000e+00 + -3.590025872988833e-03 +217 1.924999999999997e-09 + 3.688953059211268e-01 + 1.803050340008641e+00 + 1.800000000000000e+00 + -3.658969784057056e-03 +218 1.934999999999997e-09 + 4.007376588694223e-01 + 1.802544707962028e+00 + 1.800000000000000e+00 + -3.734144917868089e-03 +219 1.944999999999997e-09 + 4.625105945997072e-01 + 1.802588868373130e+00 + 1.800000000000000e+00 + -3.807411381138440e-03 +220 1.954999999999997e-09 + 5.779226421749667e-01 + 1.803274262442760e+00 + 1.800000000000000e+00 + -3.853659013194162e-03 +221 1.964999999999998e-09 + 7.658421352123812e-01 + 1.804901489583684e+00 + 1.800000000000000e+00 + -3.864097204235574e-03 +222 1.974999999999998e-09 + 1.009273589030513e+00 + 1.807870155058694e+00 + 1.800000000000000e+00 + -3.826164298155932e-03 +223 1.984999999999998e-09 + 1.264749550706853e+00 + 1.811741317793797e+00 + 1.800000000000000e+00 + -3.767387795751761e-03 +224 1.994999999999998e-09 + 1.470704872228084e+00 + 1.814278593086843e+00 + 1.800000000000000e+00 + -3.720348552538989e-03 +225 2.004999999999998e-09 + 1.602358649564670e+00 + 1.813996154324191e+00 + 1.800000000000000e+00 + -3.655606525031143e-03 +226 2.014999999999999e-09 + 1.683611710463650e+00 + 1.808318626572190e+00 + 1.800000000000000e+00 + -3.569833932152198e-03 +227 2.024999999999999e-09 + 1.733978518513311e+00 + 1.791007588062191e+00 + 1.800000000000000e+00 + -3.551332919243221e-03 +228 2.034999999999999e-09 + 1.763567793221770e+00 + 1.755365255439353e+00 + 1.800000000000000e+00 + -3.581635974934812e-03 +229 2.044999999999999e-09 + 1.779945438073202e+00 + 1.699319454126422e+00 + 1.800000000000000e+00 + -3.646948234137536e-03 +230 2.054999999999999e-09 + 1.788956056534928e+00 + 1.626044139009411e+00 + 1.800000000000000e+00 + -3.722599671559499e-03 +231 2.064999999999999e-09 + 1.793769020972407e+00 + 1.541485059767175e+00 + 1.800000000000000e+00 + -3.796615543605858e-03 +232 2.075000000000000e-09 + 1.796492463272452e+00 + 1.451757250096729e+00 + 1.800000000000000e+00 + -3.849207409328231e-03 +233 2.085000000000000e-09 + 1.797924018256884e+00 + 1.361781343814500e+00 + 1.800000000000000e+00 + -3.864891827804242e-03 +234 2.095000000000000e-09 + 1.798840326120118e+00 + 1.275115105613617e+00 + 1.800000000000000e+00 + -3.835188894404355e-03 +235 2.105000000000000e-09 + 1.799293298325168e+00 + 1.193906180708203e+00 + 1.800000000000000e+00 + -3.775790817603551e-03 +236 2.115000000000000e-09 + 1.799567643308364e+00 + 1.119572688610015e+00 + 1.800000000000000e+00 + -3.726876813452418e-03 +237 2.125000000000000e-09 + 1.799606873124310e+00 + 1.054354332043395e+00 + 1.800000000000000e+00 + -3.669465997083802e-03 +238 2.135000000000001e-09 + 1.799736602193673e+00 + 9.982512429180426e-01 + 1.800000000000000e+00 + -3.579545061013800e-03 +239 2.145000000000001e-09 + 1.799747894851857e+00 + 9.419882416322469e-01 + 1.800000000000000e+00 + -3.549915461189327e-03 +240 2.155000000000001e-09 + 1.799783536677803e+00 + 8.774988890116910e-01 + 1.800000000000000e+00 + -3.574614861627995e-03 +241 2.165000000000001e-09 + 1.799754857512355e+00 + 8.078383248991541e-01 + 1.800000000000000e+00 + -3.634779413806660e-03 +242 2.175000000000001e-09 + 1.799802247959309e+00 + 7.385932086732652e-01 + 1.800000000000000e+00 + -3.711388269590877e-03 +243 2.185000000000001e-09 + 1.799790895141965e+00 + 6.739641861444167e-01 + 1.800000000000000e+00 + -3.784914747921757e-03 +244 2.195000000000002e-09 + 1.799840167319322e+00 + 6.164171117633818e-01 + 1.800000000000000e+00 + -3.844163668071192e-03 +245 2.205000000000002e-09 + 1.799832896848256e+00 + 5.667736678671570e-01 + 1.800000000000000e+00 + -3.864219300745753e-03 +246 2.215000000000002e-09 + 1.799877894631505e+00 + 5.251224501726764e-01 + 1.800000000000000e+00 + -3.843799547501412e-03 +247 2.225000000000002e-09 + 1.799873087537759e+00 + 4.910307440890760e-01 + 1.800000000000000e+00 + -3.784242508211931e-03 +248 2.235000000000002e-09 + 1.799897866657635e+00 + 4.636575539969609e-01 + 1.800000000000000e+00 + -3.733870034075288e-03 +249 2.245000000000002e-09 + 1.799853187978455e+00 + 4.417664494070856e-01 + 1.800000000000000e+00 + -3.681773224254092e-03 +250 2.255000000000003e-09 + 1.799871598435808e+00 + 4.243175259241212e-01 + 1.800000000000000e+00 + -3.591618119066817e-03 +251 2.265000000000003e-09 + 1.799861741132416e+00 + 4.105553391893110e-01 + 1.800000000000000e+00 + -3.549550095490695e-03 +252 2.275000000000003e-09 + 1.799803498878691e+00 + 3.996523372358733e-01 + 1.800000000000000e+00 + -3.568767320561730e-03 +253 2.285000000000003e-09 + 1.799713583862241e+00 + 3.909147587922474e-01 + 1.800000000000000e+00 + -3.622791174430473e-03 +254 2.295000000000003e-09 + 1.799715810819716e+00 + 3.838293145977891e-01 + 1.800000000000000e+00 + -3.700283654396510e-03 +255 2.305000000000004e-09 + 1.799751757065595e+00 + 3.778555764887175e-01 + 1.800000000000000e+00 + -3.772710980933749e-03 +256 2.315000000000004e-09 + 1.799881098769823e+00 + 3.727016938636483e-01 + 1.800000000000000e+00 + -3.838260738508853e-03 +257 2.325000000000004e-09 + 1.800063042020033e+00 + 3.681000320420837e-01 + 1.800000000000000e+00 + -3.862408352585261e-03 +258 2.335000000000004e-09 + 1.800419086626309e+00 + 3.638439897548066e-01 + 1.800000000000000e+00 + -3.851488723476496e-03 +259 2.345000000000004e-09 + 1.801069648222284e+00 + 3.596965339883988e-01 + 1.800000000000000e+00 + -3.792854614556864e-03 +260 2.355000000000004e-09 + 1.802360090135028e+00 + 3.554991994693710e-01 + 1.800000000000000e+00 + -3.741442044685525e-03 +261 2.365000000000005e-09 + 1.804205008358852e+00 + 3.515198474823001e-01 + 1.800000000000000e+00 + -3.692224214626133e-03 +262 2.375000000000005e-09 + 1.805017442628461e+00 + 3.483410527726844e-01 + 1.800000000000000e+00 + -3.605638614890913e-03 +263 2.385000000000005e-09 + 1.804991404470706e+00 + 3.469151251979113e-01 + 1.800000000000000e+00 + -3.550437454177738e-03 +264 2.395000000000005e-09 + 1.804474660223437e+00 + 3.489668573953599e-01 + 1.800000000000000e+00 + -3.563968598228962e-03 +265 2.405000000000005e-09 + 1.803517969231711e+00 + 3.577201812091775e-01 + 1.800000000000000e+00 + -3.611251273864774e-03 +266 2.415000000000005e-09 + 1.802817611146555e+00 + 3.782098220650703e-01 + 1.800000000000000e+00 + -3.689097726622460e-03 +267 2.425000000000006e-09 + 1.802476955929732e+00 + 4.191416812565483e-01 + 1.800000000000000e+00 + -3.760331095288815e-03 +268 2.435000000000006e-09 + 1.802763611161319e+00 + 4.976647062780772e-01 + 1.800000000000000e+00 + -3.831283960697443e-03 +269 2.445000000000006e-09 + 1.803744794210340e+00 + 6.398470431412240e-01 + 1.800000000000000e+00 + -3.859773459016488e-03 +270 2.455000000000006e-09 + 1.805834706640753e+00 + 8.518512827576764e-01 + 1.800000000000000e+00 + -3.857846083547781e-03 +271 2.465000000000006e-09 + 1.809320396607378e+00 + 1.106736305721309e+00 + 1.800000000000000e+00 + -3.801770391927059e-03 +272 2.475000000000006e-09 + 1.812954360082271e+00 + 1.350228017144985e+00 + 1.800000000000000e+00 + -3.749469863484303e-03 +273 2.485000000000007e-09 + 1.814564351604476e+00 + 1.527757736880083e+00 + 1.800000000000000e+00 + -3.701077098790267e-03 +274 2.495000000000007e-09 + 1.812769072086495e+00 + 1.637184575270979e+00 + 1.800000000000000e+00 + -3.620832508115536e-03 +275 2.505000000000007e-09 + 1.803631845037293e+00 + 1.705419844712379e+00 + 1.800000000000000e+00 + -3.553056357549753e-03 +276 2.515000000000007e-09 + 1.780090379684973e+00 + 1.747020416969682e+00 + 1.800000000000000e+00 + -3.559906024171066e-03 +277 2.525000000000007e-09 + 1.736763127604693e+00 + 1.770860323785203e+00 + 1.800000000000000e+00 + -3.600603880397759e-03 +278 2.535000000000007e-09 + 1.673698220794244e+00 + 1.783970852662444e+00 + 1.800000000000000e+00 + -3.677510754027002e-03 +279 2.545000000000008e-09 + 1.595465565375503e+00 + 1.791094777738560e+00 + 1.800000000000000e+00 + -3.748205693188274e-03 +280 2.555000000000008e-09 + 1.508313787379415e+00 + 1.794989528316707e+00 + 1.800000000000000e+00 + -3.822941228408904e-03 +281 2.565000000000008e-09 + 1.417991231340888e+00 + 1.797113817783294e+00 + 1.800000000000000e+00 + -3.856690478529024e-03 +282 2.575000000000008e-09 + 1.328915260165164e+00 + 1.798333855352723e+00 + 1.800000000000000e+00 + -3.862464623708918e-03 +283 2.585000000000008e-09 + 1.244097993773831e+00 + 1.799032045215505e+00 + 1.800000000000000e+00 + -3.811114647815109e-03 +284 2.595000000000009e-09 + 1.165274885569932e+00 + 1.799436130405530e+00 + 1.800000000000000e+00 + -3.757678907610696e-03 +285 2.605000000000009e-09 + 1.094028287448738e+00 + 1.799576970905124e+00 + 1.800000000000000e+00 + -3.708840343146408e-03 +286 2.615000000000009e-09 + 1.032630362914763e+00 + 1.799664798183377e+00 + 1.800000000000000e+00 + -3.636361474893237e-03 +287 2.625000000000009e-09 + 9.778983566848710e-01 + 1.799738383696072e+00 + 1.800000000000000e+00 + -3.557803108966191e-03 +288 2.635000000000009e-09 + 9.189188445956594e-01 + 1.799774080443304e+00 + 1.800000000000000e+00 + -3.556424043877092e-03 +289 2.645000000000009e-09 + 8.517731981087580e-01 + 1.799761509501920e+00 + 1.800000000000000e+00 + -3.591122988589053e-03 +290 2.655000000000010e-09 + 7.817189061119890e-01 + 1.799780472649904e+00 + 1.800000000000000e+00 + -3.665430232786366e-03 +291 2.665000000000010e-09 + 7.137637243691788e-01 + 1.799790083890087e+00 + 1.800000000000000e+00 + -3.736536159784110e-03 +292 2.675000000000010e-09 + 6.516142166243016e-01 + 1.799816082459582e+00 + 1.800000000000000e+00 + -3.813200959605312e-03 +293 2.685000000000010e-09 + 5.969559707618493e-01 + 1.799831526722594e+00 + 1.800000000000000e+00 + -3.853283360585444e-03 +294 2.695000000000010e-09 + 5.503263440657399e-01 + 1.799854982656401e+00 + 1.800000000000000e+00 + -3.865212010328465e-03 +295 2.705000000000010e-09 + 5.115544706093186e-01 + 1.799871884013967e+00 + 1.800000000000000e+00 + -3.820773396333770e-03 +296 2.715000000000011e-09 + 4.801058417675291e-01 + 1.799889463403082e+00 + 1.800000000000000e+00 + -3.765858578409916e-03 +297 2.725000000000011e-09 + 4.549177272973844e-01 + 1.799880108530264e+00 + 1.800000000000000e+00 + -3.716025839575701e-03 +298 2.735000000000011e-09 + 4.347741767257710e-01 + 1.799856730769027e+00 + 1.800000000000000e+00 + -3.651489734180766e-03 +299 2.745000000000011e-09 + 4.188056422555871e-01 + 1.799870496151836e+00 + 1.800000000000000e+00 + -3.564897839277035e-03 +300 2.755000000000011e-09 + 4.062052338815145e-01 + 1.799852565442489e+00 + 1.800000000000000e+00 + -3.553542141584603e-03 +301 2.765000000000011e-09 + 3.961623108168953e-01 + 1.799760135176731e+00 + 1.800000000000000e+00 + -3.582898887198656e-03 +302 2.775000000000012e-09 + 3.881174768139825e-01 + 1.799710583478934e+00 + 1.800000000000000e+00 + -3.652978491438523e-03 +303 2.785000000000012e-09 + 3.814865402767008e-01 + 1.799718645958923e+00 + 1.800000000000000e+00 + -3.725315161835387e-03 +304 2.795000000000012e-09 + 3.758552104974667e-01 + 1.799794602206803e+00 + 1.800000000000000e+00 + -3.802254806768272e-03 +305 2.805000000000012e-09 + 3.709311147444561e-01 + 1.799935498334402e+00 + 1.800000000000000e+00 + -3.849469086238212e-03 +306 2.815000000000012e-09 + 3.664855450038403e-01 + 1.800173280038929e+00 + 1.800000000000000e+00 + -3.866195769863277e-03 +307 2.825000000000012e-09 + 3.622978012888948e-01 + 1.800608895474349e+00 + 1.800000000000000e+00 + -3.830423783657293e-03 +308 2.835000000000013e-09 + 3.581370220720089e-01 + 1.801454447933418e+00 + 1.800000000000000e+00 + -3.773975545890461e-03 +309 2.845000000000013e-09 + 3.539647313151419e-01 + 1.803087347070973e+00 + 1.800000000000000e+00 + -3.723025012528055e-03 +310 2.855000000000013e-09 + 3.501971689142501e-01 + 1.804609371218123e+00 + 1.800000000000000e+00 + -3.665672096868874e-03 +311 2.865000000000013e-09 + 3.475433944747368e-01 + 1.805085429599431e+00 + 1.800000000000000e+00 + -3.574283249874857e-03 +312 2.875000000000013e-09 + 3.471325561514864e-01 + 1.804869117897904e+00 + 1.800000000000000e+00 + -3.551509629980241e-03 +313 2.885000000000014e-09 + 3.512103980937182e-01 + 1.804128379053994e+00 + 1.800000000000000e+00 + -3.575827255701879e-03 +314 2.895000000000014e-09 + 3.636225137753606e-01 + 1.803221595219715e+00 + 1.800000000000000e+00 + -3.640459027817241e-03 +315 2.905000000000014e-09 + 3.903547933394977e-01 + 1.802630764458162e+00 + 1.800000000000000e+00 + -3.714346914271794e-03 +316 2.915000000000014e-09 + 4.426762085751926e-01 + 1.802512527333698e+00 + 1.800000000000000e+00 + -3.790473449404785e-03 +317 2.925000000000014e-09 + 5.417117088388829e-01 + 1.803027162219379e+00 + 1.800000000000000e+00 + -3.844996018866086e-03 +318 2.935000000000014e-09 + 7.115532585973333e-01 + 1.804373232857604e+00 + 1.800000000000000e+00 + -3.865722713372560e-03 +319 2.945000000000015e-09 + 9.437967079221198e-01 + 1.806969478815105e+00 + 1.800000000000000e+00 + -3.839598380460938e-03 +320 2.955000000000015e-09 + 1.202182052429260e+00 + 1.810793987733534e+00 + 1.800000000000000e+00 + -3.782157634599369e-03 +321 2.965000000000015e-09 + 1.425560097087904e+00 + 1.813861817516359e+00 + 1.800000000000000e+00 + -3.730151094812502e-03 +322 2.975000000000015e-09 + 1.574860363409074e+00 + 1.814415415673919e+00 + 1.800000000000000e+00 + -3.678440677103369e-03 +323 2.985000000000015e-09 + 1.666393566588430e+00 + 1.810568804869014e+00 + 1.800000000000000e+00 + -3.585846769836529e-03 +324 2.995000000000015e-09 + 1.723495636802481e+00 + 1.796946941855051e+00 + 1.800000000000000e+00 + -3.550543051860369e-03 +325 3.005000000000016e-09 + 1.757576761686423e+00 + 1.766405038088569e+00 + 1.800000000000000e+00 + -3.569797096528144e-03 +326 3.015000000000016e-09 + 1.776661329822271e+00 + 1.715438995616355e+00 + 1.800000000000000e+00 + -3.628165726467144e-03 +327 3.025000000000016e-09 + 1.787171559433383e+00 + 1.646044072659851e+00 + 1.800000000000000e+00 + -3.703419510544656e-03 +328 3.035000000000016e-09 + 1.792792676983318e+00 + 1.563755663241853e+00 + 1.800000000000000e+00 + -3.778220844195154e-03 +329 3.045000000000016e-09 + 1.795961721123607e+00 + 1.474822612697280e+00 + 1.800000000000000e+00 + -3.839610873962475e-03 +330 3.055000000000016e-09 + 1.797616480052903e+00 + 1.384517825763698e+00 + 1.800000000000000e+00 + -3.864128943838700e-03 +331 3.065000000000017e-09 + 1.798666281804185e+00 + 1.296753571518718e+00 + 1.800000000000000e+00 + -3.847845835481594e-03 +332 3.075000000000017e-09 + 1.799189353756373e+00 + 1.214013116699544e+00 + 1.800000000000000e+00 + -3.790565288564349e-03 +333 3.085000000000017e-09 + 1.799535275613613e+00 + 1.137763550710471e+00 + 1.800000000000000e+00 + -3.737646638011936e-03 +334 3.095000000000017e-09 + 1.799584239923328e+00 + 1.069986311057590e+00 + 1.800000000000000e+00 + -3.689487057215436e-03 +335 3.105000000000017e-09 + 1.799718244258401e+00 + 1.012067342477648e+00 + 1.800000000000000e+00 + -3.599341108694084e-03 +336 3.115000000000017e-09 + 1.799737813790900e+00 + 9.569762579753907e-01 + 1.800000000000000e+00 + -3.550846373252526e-03 +337 3.125000000000018e-09 + 1.799788724356333e+00 + 8.946868803395879e-01 + 1.800000000000000e+00 + -3.564725860685315e-03 +338 3.135000000000018e-09 + 1.799748650960423e+00 + 8.257504068811142e-01 + 1.800000000000000e+00 + -3.616341717593667e-03 +339 3.145000000000018e-09 + 1.799800908512888e+00 + 7.559655581520159e-01 + 1.800000000000000e+00 + -3.692364213824715e-03 +340 3.155000000000018e-09 + 1.799783318543331e+00 + 6.898311320812214e-01 + 1.800000000000000e+00 + -3.765793895145579e-03 +341 3.165000000000018e-09 + 1.799837042034280e+00 + 6.303655866850875e-01 + 1.800000000000000e+00 + -3.833120895569738e-03 +342 3.175000000000019e-09 + 1.799826251576981e+00 + 5.786657039352685e-01 + 1.800000000000000e+00 + -3.861701046773452e-03 +343 3.185000000000019e-09 + 1.799874173417263e+00 + 5.350088534868693e-01 + 1.800000000000000e+00 + -3.854799456086784e-03 +344 3.195000000000019e-09 + 1.799867874104641e+00 + 4.990422125788199e-01 + 1.800000000000000e+00 + -3.799304803551811e-03 +345 3.205000000000019e-09 + 1.799900571344346e+00 + 4.700737700637820e-01 + 1.800000000000000e+00 + -3.745586356372073e-03 +346 3.215000000000019e-09 + 1.799860017654798e+00 + 4.468998515976683e-01 + 1.800000000000000e+00 + -3.698834992275657e-03 +347 3.225000000000019e-09 + 1.799867182121369e+00 + 4.283810087991686e-01 + 1.800000000000000e+00 + -3.614257320067339e-03 +348 3.235000000000020e-09 + 1.799865324477118e+00 + 4.137624493270841e-01 + 1.800000000000000e+00 + -3.552724942390547e-03 +349 3.245000000000020e-09 + 1.799829301800610e+00 + 4.022109630472657e-01 + 1.800000000000000e+00 + -3.560471161463790e-03 +350 3.255000000000020e-09 + 1.799725729909619e+00 + 3.929598527191667e-01 + 1.800000000000000e+00 + -3.605272997275668e-03 +351 3.265000000000020e-09 + 1.799714291355327e+00 + 3.855177927288105e-01 + 1.800000000000000e+00 + -3.680997762390893e-03 +352 3.275000000000020e-09 + 1.799731911050873e+00 + 3.792885502218067e-01 + 1.800000000000000e+00 + -3.753489331374429e-03 +353 3.285000000000020e-09 + 1.799845582524034e+00 + 3.739560903329930e-01 + 1.800000000000000e+00 + -3.825348651767894e-03 +354 3.295000000000021e-09 + 1.800002975859731e+00 + 3.692317877925552e-01 + 1.800000000000000e+00 + -3.858707372599190e-03 +355 3.305000000000021e-09 + 1.800309891804301e+00 + 3.649104163736296e-01 + 1.800000000000000e+00 + -3.860141083053653e-03 +356 3.315000000000021e-09 + 1.800855352974025e+00 + 3.607572824579550e-01 + 1.800000000000000e+00 + -3.808440086378390e-03 +357 3.325000000000021e-09 + 1.801937990172807e+00 + 3.565702092379268e-01 + 1.800000000000000e+00 + -3.753816235887819e-03 +358 3.335000000000021e-09 + 1.803805928243424e+00 + 3.524887619397232e-01 + 1.800000000000000e+00 + -3.706880487425076e-03 +359 3.345000000000021e-09 + 1.804888507628136e+00 + 3.490283043790053e-01 + 1.800000000000000e+00 + -3.629819273521543e-03 +360 3.355000000000022e-09 + 1.805048434879402e+00 + 3.470418095180013e-01 + 1.800000000000000e+00 + -3.556588552556035e-03 +361 3.365000000000022e-09 + 1.804669542937500e+00 + 3.479591962451622e-01 + 1.800000000000000e+00 + -3.556844188910082e-03 +362 3.375000000000022e-09 + 1.803756451014735e+00 + 3.545954180214870e-01 + 1.800000000000000e+00 + -3.595277525206438e-03 +363 3.385000000000022e-09 + 1.802971652585766e+00 + 3.714667607845241e-01 + 1.800000000000000e+00 + -3.669160127825594e-03 +364 3.395000000000022e-09 + 1.802509091744413e+00 + 4.059498740342064e-01 + 1.800000000000000e+00 + -3.741576989063405e-03 +365 3.405000000000022e-09 + 1.802634697577183e+00 + 4.726052772375856e-01 + 1.800000000000000e+00 + -3.816178246962950e-03 +366 3.415000000000023e-09 + 1.803404168585300e+00 + 5.961643737075036e-01 + 1.800000000000000e+00 + -3.855354395577064e-03 +367 3.425000000000023e-09 + 1.805174544217848e+00 + 7.920530992107532e-01 + 1.800000000000000e+00 + -3.863645535286420e-03 +368 3.435000000000023e-09 + 1.808312666934059e+00 + 1.039856567105106e+00 + 1.800000000000000e+00 + -3.817943967205740e-03 +369 3.445000000000023e-09 + 1.812150911497050e+00 + 1.292566449023931e+00 + 1.800000000000000e+00 + -3.762088995784880e-03 +370 3.455000000000023e-09 + 1.814410936341800e+00 + 1.489812268760438e+00 + 1.800000000000000e+00 + -3.714159832891669e-03 +371 3.465000000000023e-09 + 1.813700428753061e+00 + 1.613980606187151e+00 + 1.800000000000000e+00 + -3.645233972445657e-03 +372 3.475000000000024e-09 + 1.807041934922258e+00 + 1.690903081473906e+00 + 1.800000000000000e+00 + -3.562747612665312e-03 +373 3.485000000000024e-09 + 1.787878682514226e+00 + 1.738373739797945e+00 + 1.800000000000000e+00 + -3.553784642499074e-03 +374 3.495000000000024e-09 + 1.749841046224975e+00 + 1.766045614729892e+00 + 1.800000000000000e+00 + -3.586526725846126e-03 +375 3.505000000000024e-09 + 1.691534763150853e+00 + 1.781309944821027e+00 + 1.800000000000000e+00 + -3.656883048683348e-03 +376 3.515000000000024e-09 + 1.616610126922925e+00 + 1.789686269790194e+00 + 1.800000000000000e+00 + -3.730139804863362e-03 +377 3.525000000000025e-09 + 1.531149135697543e+00 + 1.794180324401146e+00 + 1.800000000000000e+00 + -3.805706290193491e-03 +378 3.535000000000025e-09 + 1.441164684843650e+00 + 1.796705773779185e+00 + 1.800000000000000e+00 + -3.851649317787108e-03 +379 3.545000000000025e-09 + 1.351422492953063e+00 + 1.798059405358447e+00 + 1.800000000000000e+00 + -3.865316929986709e-03 +380 3.555000000000025e-09 + 1.265306969841942e+00 + 1.798907235802611e+00 + 1.800000000000000e+00 + -3.827584578149319e-03 +381 3.565000000000025e-09 + 1.184829101820501e+00 + 1.799340822576440e+00 + 1.800000000000000e+00 + -3.770282258665291e-03 +382 3.575000000000025e-09 + 1.111423090517912e+00 + 1.799573950957028e+00 + 1.800000000000000e+00 + -3.721128317539499e-03 +383 3.585000000000026e-09 + 1.047403831894572e+00 + 1.799623175117875e+00 + 1.800000000000000e+00 + -3.659886572484089e-03 +384 3.595000000000026e-09 + 9.919094664602405e-01 + 1.799739441612553e+00 + 1.800000000000000e+00 + -3.571232575294605e-03 +385 3.605000000000026e-09 + 9.349071903484715e-01 + 1.799755708347403e+00 + 1.800000000000000e+00 + -3.551470553804194e-03 +386 3.615000000000026e-09 + 8.695024654772564e-01 + 1.799777470498652e+00 + 1.800000000000000e+00 + -3.578987615344582e-03 +387 3.625000000000026e-09 + 7.996406931732400e-01 + 1.799761760417334e+00 + 1.800000000000000e+00 + -3.644406419366016e-03 +388 3.635000000000026e-09 + 7.307372690551300e-01 + 1.799799424648972e+00 + 1.800000000000000e+00 + -3.719050695089626e-03 +389 3.645000000000027e-09 + 6.668550720982924e-01 + 1.799797781163344e+00 + 1.800000000000000e+00 + -3.794240732884280e-03 +390 3.655000000000027e-09 + 6.102026028716504e-01 + 1.799838466732697e+00 + 1.800000000000000e+00 + -3.847400578036126e-03 +391 3.665000000000027e-09 + 5.615044202708529e-01 + 1.799838876331364e+00 + 1.800000000000000e+00 + -3.865391505889997e-03 +392 3.675000000000027e-09 + 5.207613808242788e-01 + 1.799876925454099e+00 + 1.800000000000000e+00 + -3.836943288604032e-03 +393 3.685000000000027e-09 + 4.875120204414138e-01 + 1.799877658916747e+00 + 1.800000000000000e+00 + -3.778466636853097e-03 +394 3.695000000000027e-09 + 4.608410069838788e-01 + 1.799893645209962e+00 + 1.800000000000000e+00 + -3.728129705991882e-03 +395 3.705000000000028e-09 + 4.395129998818707e-01 + 1.799852802479662e+00 + 1.800000000000000e+00 + -3.673267334843465e-03 +396 3.715000000000028e-09 + 4.225397097617848e-01 + 1.799872123469110e+00 + 1.800000000000000e+00 + -3.581970051831565e-03 +397 3.725000000000028e-09 + 4.091526949145133e-01 + 1.799859784372669e+00 + 1.800000000000000e+00 + -3.550126778169759e-03 +398 3.735000000000028e-09 + 3.985282469250510e-01 + 1.799790097564466e+00 + 1.800000000000000e+00 + -3.572544500112219e-03 +399 3.745000000000028e-09 + 3.900159425239273e-01 + 1.799711135971010e+00 + 1.800000000000000e+00 + -3.632035966500790e-03 +400 3.755000000000028e-09 + 3.830799652278349e-01 + 1.799716317924369e+00 + 1.800000000000000e+00 + -3.708094986343934e-03 +401 3.765000000000027e-09 + 3.772178526027827e-01 + 1.799763597223003e+00 + 1.800000000000000e+00 + -3.782157840504689e-03 +402 3.775000000000027e-09 + 3.721394811619761e-01 + 1.799897461724412e+00 + 1.800000000000000e+00 + -3.842346327176067e-03 +403 3.785000000000027e-09 + 3.675900834639736e-01 + 1.800094464486993e+00 + 1.800000000000000e+00 + -3.864206130249720e-03 +404 3.795000000000027e-09 + 3.633590217025665e-01 + 1.800473752098095e+00 + 1.800000000000000e+00 + -3.845551530276841e-03 +405 3.805000000000026e-09 + 3.592102713808542e-01 + 1.801180198143202e+00 + 1.800000000000000e+00 + -3.786803186926217e-03 +406 3.815000000000026e-09 + 3.550147404483966e-01 + 1.802577770622048e+00 + 1.800000000000000e+00 + -3.735441214576741e-03 +407 3.825000000000026e-09 + 3.510929881754096e-01 + 1.804350598661528e+00 + 1.800000000000000e+00 + -3.684995353024688e-03 +408 3.835000000000026e-09 + 3.480635071436568e-01 + 1.805054006232927e+00 + 1.800000000000000e+00 + -3.594767883571983e-03 +409 3.845000000000025e-09 + 3.469259795158024e-01 + 1.804958796319263e+00 + 1.800000000000000e+00 + -3.549956989958546e-03 +410 3.855000000000025e-09 + 3.495589156183765e-01 + 1.804372902980713e+00 + 1.800000000000000e+00 + -3.567107608183501e-03 +411 3.865000000000025e-09 + 3.593765150895684e-01 + 1.803418864913036e+00 + 1.800000000000000e+00 + -3.620030915948544e-03 +412 3.875000000000025e-09 + 3.816774930363638e-01 + 1.802753750052755e+00 + 1.800000000000000e+00 + -3.697086070185785e-03 +413 3.885000000000025e-09 + 4.258857347491944e-01 + 1.802477697304335e+00 + 1.800000000000000e+00 + -3.769781464600409e-03 +414 3.895000000000024e-09 + 5.103781956203584e-01 + 1.802835319539636e+00 + 1.800000000000000e+00 + -3.836267130791147e-03 +415 3.905000000000024e-09 + 6.612166809369705e-01 + 1.803923281917786e+00 + 1.800000000000000e+00 + -3.862072473229476e-03 +416 3.915000000000024e-09 + 8.799661137117418e-01 + 1.806165749001085e+00 + 1.800000000000000e+00 + -3.853005811741590e-03 +417 3.925000000000024e-09 + 1.136870693191953e+00 + 1.809784582020391e+00 + 1.800000000000000e+00 + -3.795426437172140e-03 +418 3.935000000000023e-09 + 1.374877654762025e+00 + 1.813273273730438e+00 + 1.800000000000000e+00 + -3.743208353998223e-03 +419 3.945000000000023e-09 + 1.543421748484980e+00 + 1.814568720650259e+00 + 1.800000000000000e+00 + -3.694955974131159e-03 +420 3.955000000000023e-09 + 1.646846055823525e+00 + 1.812201652725068e+00 + 1.800000000000000e+00 + -3.609225024396103e-03 +421 3.965000000000023e-09 + 1.711430808507560e+00 + 1.801779394211996e+00 + 1.800000000000000e+00 + -3.551220475741933e-03 +422 3.975000000000022e-09 + 1.750558886331414e+00 + 1.776124201675841e+00 + 1.800000000000000e+00 + -3.562561716969433e-03 +423 3.985000000000022e-09 + 1.772811573301790e+00 + 1.730396353148940e+00 + 1.800000000000000e+00 + -3.608656127390063e-03 +424 3.995000000000022e-09 + 1.785050486684488e+00 + 1.665275644287977e+00 + 1.800000000000000e+00 + -3.685846736815187e-03 +425 4.005000000000022e-09 + 1.791664136209423e+00 + 1.585681280303315e+00 + 1.800000000000000e+00 + -3.757406305726911e-03 +426 4.015000000000021e-09 + 1.795318846962261e+00 + 1.497890259692495e+00 + 1.800000000000000e+00 + -3.828978812064291e-03 +427 4.025000000000021e-09 + 1.797279582120473e+00 + 1.407510841339199e+00 + 1.800000000000000e+00 + -3.859267154591180e-03 +428 4.035000000000021e-09 + 1.798447142039110e+00 + 1.318803628961567e+00 + 1.800000000000000e+00 + -3.858968509816894e-03 +429 4.045000000000021e-09 + 1.799082697924255e+00 + 1.234612243290484e+00 + 1.800000000000000e+00 + -3.804419334976778e-03 +430 4.055000000000020e-09 + 1.799473214717029e+00 + 1.156568148923829e+00 + 1.800000000000000e+00 + -3.751352344938866e-03 +431 4.065000000000020e-09 + 1.799577175086975e+00 + 1.086362619886662e+00 + 1.800000000000000e+00 + -3.703428373429562e-03 +432 4.075000000000020e-09 + 1.799683791404142e+00 + 1.026118340986791e+00 + 1.800000000000000e+00 + -3.624639489740418e-03 +433 4.085000000000020e-09 + 1.799736954608506e+00 + 9.714598825980654e-01 + 1.800000000000000e+00 + -3.554310568706052e-03 +434 4.095000000000019e-09 + 1.799781081798925e+00 + 9.114736677275603e-01 + 1.800000000000000e+00 + -3.558714101892665e-03 +435 4.105000000000019e-09 + 1.799755217675323e+00 + 8.436732325998398e-01 + 1.800000000000000e+00 + -3.598237558572605e-03 +436 4.115000000000019e-09 + 1.799788646238195e+00 + 7.736360052977204e-01 + 1.800000000000000e+00 + -3.674188347714654e-03 +437 4.125000000000019e-09 + 1.799786236033815e+00 + 7.061959302319406e-01 + 1.800000000000000e+00 + -3.745330444930306e-03 +438 4.135000000000018e-09 + 1.799824173368225e+00 + 6.448667888306299e-01 + 1.800000000000000e+00 + -3.820324097732960e-03 +439 4.145000000000018e-09 + 1.799828491072261e+00 + 5.911250197033925e-01 + 1.800000000000000e+00 + -3.856036697933887e-03 +440 4.155000000000018e-09 + 1.799862230898416e+00 + 5.454288006003325e-01 + 1.800000000000000e+00 + -3.863162929042114e-03 +441 4.165000000000018e-09 + 1.799869568163068e+00 + 5.075403040951623e-01 + 1.800000000000000e+00 + -3.813804403151049e-03 +442 4.175000000000018e-09 + 1.799894353274430e+00 + 4.768847113696875e-01 + 1.800000000000000e+00 + -3.759631168402512e-03 +443 4.185000000000017e-09 + 1.799873222409255e+00 + 4.523432913011827e-01 + 1.800000000000000e+00 + -3.710933570190918e-03 +444 4.195000000000017e-09 + 1.799859913872097e+00 + 4.327171294735698e-01 + 1.800000000000000e+00 + -3.640191350080908e-03 +445 4.205000000000017e-09 + 1.799868982302744e+00 + 4.171838387637811e-01 + 1.800000000000000e+00 + -3.559594229358433e-03 +446 4.215000000000017e-09 + 1.799847205476623e+00 + 4.049235427223380e-01 + 1.800000000000000e+00 + -3.555443162849009e-03 +447 4.225000000000016e-09 + 1.799747641099005e+00 + 3.951333648692565e-01 + 1.800000000000000e+00 + -3.589021377193572e-03 +448 4.235000000000016e-09 + 1.799711629817954e+00 + 3.872872247408026e-01 + 1.800000000000000e+00 + -3.662052136700816e-03 +449 4.245000000000016e-09 + 1.799721099880090e+00 + 3.807858695562499e-01 + 1.800000000000000e+00 + -3.733726055040357e-03 +450 4.255000000000016e-09 + 1.799810142615572e+00 + 3.752528226323305e-01 + 1.800000000000000e+00 + -3.810302980175886e-03 +451 4.265000000000015e-09 + 1.799954521199538e+00 + 3.703937910524288e-01 + 1.800000000000000e+00 + -3.852479133878087e-03 +452 4.275000000000015e-09 + 1.800213186501584e+00 + 3.659906452562547e-01 + 1.800000000000000e+00 + -3.865490992994712e-03 +453 4.285000000000015e-09 + 1.800678515210511e+00 + 3.618171259995048e-01 + 1.800000000000000e+00 + -3.823439585365340e-03 +454 4.295000000000015e-09 + 1.801593107279728e+00 + 3.576484543800543e-01 + 1.800000000000000e+00 + -3.767850574045373e-03 +455 4.305000000000014e-09 + 1.803320450169456e+00 + 3.534968465525804e-01 + 1.800000000000000e+00 + -3.717976693289979e-03 +456 4.315000000000014e-09 + 1.804706458076033e+00 + 3.498137445466581e-01 + 1.800000000000000e+00 + -3.655182975981480e-03 +457 4.325000000000014e-09 + 1.805081834291195e+00 + 3.473516933980537e-01 + 1.800000000000000e+00 + -3.567237902469393e-03 +458 4.335000000000014e-09 + 1.804817066846249e+00 + 3.473179174870500e-01 + 1.800000000000000e+00 + -3.552812261947906e-03 +459 4.345000000000013e-09 + 1.804012329265166e+00 + 3.521319686217877e-01 + 1.800000000000000e+00 + -3.581053709638886e-03 +460 4.355000000000013e-09 + 1.803139864667385e+00 + 3.658422994149865e-01 + 1.800000000000000e+00 + -3.649608164332322e-03 +461 4.365000000000013e-09 + 1.802584714061789e+00 + 3.948098447248523e-01 + 1.800000000000000e+00 + -3.722536841174926e-03 +462 4.375000000000013e-09 + 1.802542073562669e+00 + 4.512577989963338e-01 + 1.800000000000000e+00 + -3.799155908687344e-03 +463 4.385000000000012e-09 + 1.803131321027381e+00 + 5.575311793696240e-01 + 1.800000000000000e+00 + -3.848466242198494e-03 +464 4.395000000000012e-09 + 1.804603854606959e+00 + 7.357741037815019e-01 + 1.800000000000000e+00 + -3.866113484579606e-03 +465 4.405000000000012e-09 + 1.807367759049146e+00 + 9.734417418128170e-01 + 1.800000000000000e+00 + -3.832962852814935e-03 +466 4.415000000000012e-09 + 1.811235750986661e+00 + 1.231067930706225e+00 + 1.800000000000000e+00 + -3.776016006653549e-03 +467 4.425000000000011e-09 + 1.814073295209319e+00 + 1.446807437499921e+00 + 1.800000000000000e+00 + -3.724935429918537e-03 +468 4.435000000000011e-09 + 1.814261854806066e+00 + 1.587833245185474e+00 + 1.800000000000000e+00 + -3.669079314094058e-03 +469 4.445000000000011e-09 + 1.809629894861452e+00 + 1.674508967011123e+00 + 1.800000000000000e+00 + -3.577165908047520e-03 +470 4.455000000000011e-09 + 1.794390680457660e+00 + 1.728456609216602e+00 + 1.800000000000000e+00 + -3.551078810194444e-03 +471 4.465000000000011e-09 + 1.761550151467354e+00 + 1.760425613687581e+00 + 1.800000000000000e+00 + -3.574223620931908e-03 +472 4.475000000000010e-09 + 1.708251212021200e+00 + 1.778221949826670e+00 + 1.800000000000000e+00 + -3.637159560370908e-03 +473 4.485000000000010e-09 + 1.637042269739245e+00 + 1.788023447640831e+00 + 1.800000000000000e+00 + -3.711561795415322e-03 +474 4.495000000000010e-09 + 1.553670847122779e+00 + 1.793254626306309e+00 + 1.800000000000000e+00 + -3.787253951765707e-03 +475 4.505000000000010e-09 + 1.464335398060210e+00 + 1.796216553359902e+00 + 1.800000000000000e+00 + -3.843744499226815e-03 +476 4.515000000000009e-09 + 1.374150687564179e+00 + 1.797759752054035e+00 + 1.800000000000000e+00 + -3.865348890771700e-03 +477 4.525000000000009e-09 + 1.286867730177280e+00 + 1.798750890165093e+00 + 1.800000000000000e+00 + -3.841906111549855e-03 +478 4.535000000000009e-09 + 1.204814502087339e+00 + 1.799237043299790e+00 + 1.800000000000000e+00 + -3.784271742273339e-03 +479 4.545000000000009e-09 + 1.129419138417236e+00 + 1.799553528303961e+00 + 1.800000000000000e+00 + -3.732111523837621e-03 +480 4.555000000000008e-09 + 1.062793144754399e+00 + 1.799592529214255e+00 + 1.800000000000000e+00 + -3.681445065619327e-03 +481 4.565000000000008e-09 + 1.005776002242544e+00 + 1.799728707766578e+00 + 1.800000000000000e+00 + -3.589239462519019e-03 +482 4.575000000000008e-09 + 9.502369383557758e-01 + 1.799741288053017e+00 + 1.800000000000000e+00 + -3.550445387548243e-03 +483 4.585000000000008e-09 + 8.869220120591215e-01 + 1.799787857415322e+00 + 1.800000000000000e+00 + -3.568430206151101e-03 +484 4.595000000000007e-09 + 8.176078517894962e-01 + 1.799749958425214e+00 + 1.800000000000000e+00 + -3.624985572684263e-03 +485 4.605000000000007e-09 + 7.480330807178796e-01 + 1.799802854234320e+00 + 1.800000000000000e+00 + -3.700597951872279e-03 +486 4.615000000000007e-09 + 6.825605100768134e-01 + 1.799785482666016e+00 + 1.800000000000000e+00 + -3.774946201335419e-03 +487 4.625000000000007e-09 + 6.239605008249458e-01 + 1.799839675781473e+00 + 1.800000000000000e+00 + -3.838072021546172e-03 +488 4.635000000000006e-09 + 5.731939945683605e-01 + 1.799828163868459e+00 + 1.800000000000000e+00 + -3.863527022742787e-03 +489 4.645000000000006e-09 + 5.304524564631811e-01 + 1.799876901721582e+00 + 1.800000000000000e+00 + -3.849834289174543e-03 +490 4.655000000000006e-09 + 4.953441473906429e-01 + 1.799869391687744e+00 + 1.800000000000000e+00 + -3.792771741163347e-03 +491 4.665000000000006e-09 + 4.671115938278088e-01 + 1.799900499052783e+00 + 1.800000000000000e+00 + -3.739711987344526e-03 +492 4.675000000000005e-09 + 4.445307509857469e-01 + 1.799855977948974e+00 + 1.800000000000000e+00 + -3.692041968997257e-03 +493 4.685000000000005e-09 + 4.265025748065243e-01 + 1.799869692307948e+00 + 1.800000000000000e+00 + -3.603155024851483e-03 +494 4.695000000000005e-09 + 4.122798383407110e-01 + 1.799863756260652e+00 + 1.800000000000000e+00 + -3.551134722884865e-03 +495 4.705000000000005e-09 + 4.010300898141091e-01 + 1.799818415762651e+00 + 1.800000000000000e+00 + -3.563578928953814e-03 +496 4.715000000000005e-09 + 3.920157055291972e-01 + 1.799718996331581e+00 + 1.800000000000000e+00 + -3.613337752651649e-03 +497 4.725000000000004e-09 + 3.847411248791783e-01 + 1.799715135981263e+00 + 1.800000000000000e+00 + -3.689470754937854e-03 +498 4.735000000000004e-09 + 3.786300583894022e-01 + 1.799739772571836e+00 + 1.800000000000000e+00 + -3.762530883180845e-03 +499 4.745000000000004e-09 + 3.733812492817903e-01 + 1.799861701368838e+00 + 1.800000000000000e+00 + -3.831255770231384e-03 +500 4.755000000000004e-09 + 3.687142954897459e-01 + 1.800028649409948e+00 + 1.800000000000000e+00 + -3.860934544399227e-03 +501 4.765000000000003e-09 + 3.644246195989942e-01 + 1.800357732656310e+00 + 1.800000000000000e+00 + -3.856388844783001e-03 +502 4.775000000000003e-09 + 3.602759580144489e-01 + 1.800947606224008e+00 + 1.800000000000000e+00 + -3.801617236324137e-03 +503 4.785000000000003e-09 + 3.560825309887550e-01 + 1.802118516241503e+00 + 1.800000000000000e+00 + -3.747743279830349e-03 +504 4.795000000000003e-09 + 3.520436189726198e-01 + 1.804000391087971e+00 + 1.800000000000000e+00 + -3.701007292854295e-03 +505 4.805000000000002e-09 + 3.487030324098037e-01 + 1.804954938422708e+00 + 1.800000000000000e+00 + -3.618314718556947e-03 +506 4.815000000000002e-09 + 3.469590831305188e-01 + 1.805024916182527e+00 + 1.800000000000000e+00 + -3.553496536634206e-03 +507 4.825000000000002e-09 + 3.483669344568354e-01 + 1.804586852488006e+00 + 1.800000000000000e+00 + -3.559499225490322e-03 +508 4.835000000000002e-09 + 3.559252356126180e-01 + 1.803644983563917e+00 + 1.800000000000000e+00 + -3.602524906222147e-03 +509 4.845000000000001e-09 + 3.743768831941512e-01 + 1.802899974163577e+00 + 1.800000000000000e+00 + -3.677988429619021e-03 +510 4.855000000000001e-09 + 4.116592200690751e-01 + 1.802488587892982e+00 + 1.800000000000000e+00 + -3.750310438866008e-03 +511 4.865000000000001e-09 + 4.834817039272654e-01 + 1.802688609762611e+00 + 1.800000000000000e+00 + -3.823121352829806e-03 +512 4.875000000000001e-09 + 6.153686689920302e-01 + 1.803549637623068e+00 + 1.800000000000000e+00 + -3.857835449326827e-03 +513 4.885000000000000e-09 + 8.187701363905345e-01 + 1.805462523834489e+00 + 1.800000000000000e+00 + -3.861264271091731e-03 +514 4.895000000000000e-09 + 1.070205836732940e+00 + 1.808764598408080e+00 + 1.800000000000000e+00 + -3.810859310868428e-03 +515 4.905000000000000e-09 + 1.319246686969233e+00 + 1.812531241190032e+00 + 1.800000000000000e+00 + -3.756005585762116e-03 +516 4.915000000000000e-09 + 1.507621351165102e+00 + 1.814504011982953e+00 + 1.800000000000000e+00 + -3.708802704672442e-03 +517 4.924999999999999e-09 + 1.624840339948325e+00 + 1.813328940187643e+00 + 1.800000000000000e+00 + -3.633909630183284e-03 +518 4.934999999999999e-09 + 1.697707676538600e+00 + 1.805605297631150e+00 + 1.800000000000000e+00 + -3.557935354467658e-03 +519 4.944999999999999e-09 + 1.742443705310636e+00 + 1.784508797677901e+00 + 1.800000000000000e+00 + -3.556019533591919e-03 +520 4.954999999999999e-09 + 1.768320755105091e+00 + 1.744077316590263e+00 + 1.800000000000000e+00 + -3.592845839250048e-03 +521 4.964999999999998e-09 + 1.782566135128673e+00 + 1.683577932877209e+00 + 1.800000000000000e+00 + -3.666023188736105e-03 +522 4.974999999999998e-09 + 1.790353163912898e+00 + 1.607101440336402e+00 + 1.800000000000000e+00 + -3.738523899478210e-03 +523 4.984999999999998e-09 + 1.794561410202005e+00 + 1.520825291488471e+00 + 1.800000000000000e+00 + -3.813591804648736e-03 +524 4.994999999999998e-09 + 1.796899202632356e+00 + 1.430650146987367e+00 + 1.800000000000000e+00 + -3.854399918272427e-03 +525 5.004999999999998e-09 + 1.798187552895254e+00 + 1.341184045301415e+00 + 1.800000000000000e+00 + -3.864279111239177e-03 +526 5.014999999999997e-09 + 1.798966767379719e+00 + 1.255642203814306e+00 + 1.800000000000000e+00 + -3.820431184321613e-03 +527 5.024999999999997e-09 + 1.799385808330826e+00 + 1.175904803735753e+00 + 1.800000000000000e+00 + -3.764259939113678e-03 +528 5.034999999999997e-09 + 1.799576500091321e+00 + 1.103455238799891e+00 + 1.800000000000000e+00 + -3.715963873495515e-03 +529 5.044999999999997e-09 + 1.799641408459204e+00 + 1.040630283766190e+00 + 1.800000000000000e+00 + -3.649180065836651e-03 +530 5.054999999999996e-09 + 1.799739809294999e+00 + 9.855821457812740e-01 + 1.800000000000000e+00 + -3.564706163181012e-03 +531 5.064999999999996e-09 + 1.799764122035260e+00 + 9.277355043809322e-01 + 1.800000000000000e+00 + -3.553127440101373e-03 +532 5.074999999999996e-09 + 1.799770323789081e+00 + 8.614923526167860e-01 + 1.800000000000000e+00 + -3.584422334294607e-03 +533 5.084999999999996e-09 + 1.799769940013379e+00 + 7.915018464120905e-01 + 1.800000000000000e+00 + -3.653663350434504e-03 +534 5.094999999999995e-09 + 1.799795424522791e+00 + 7.229951143301762e-01 + 1.800000000000000e+00 + -3.727197840576807e-03 +535 5.104999999999995e-09 + 1.799805800946715e+00 + 6.598838748860352e-01 + 1.800000000000000e+00 + -3.802823384601983e-03 +536 5.114999999999995e-09 + 1.799835605157547e+00 + 6.041305343824478e-01 + 1.800000000000000e+00 + -3.850579186767477e-03 +537 5.124999999999995e-09 + 1.799845900796959e+00 + 5.563715345112463e-01 + 1.800000000000000e+00 + -3.865502331646914e-03 +538 5.134999999999994e-09 + 1.799874916959399e+00 + 5.165259373114200e-01 + 1.800000000000000e+00 + -3.830045804184336e-03 +539 5.144999999999994e-09 + 1.799882922046945e+00 + 4.841014380252174e-01 + 1.800000000000000e+00 + -3.772435396334714e-03 +540 5.154999999999994e-09 + 1.799888033380152e+00 + 4.581123999591775e-01 + 1.800000000000000e+00 + -3.722913391980361e-03 +541 5.164999999999994e-09 + 1.799853883211695e+00 + 4.373295504317303e-01 + 1.800000000000000e+00 + -3.663539385817527e-03 +542 5.174999999999993e-09 + 1.799871779030829e+00 + 4.208190360188160e-01 + 1.800000000000000e+00 + -3.573796714936313e-03 +543 5.184999999999993e-09 + 1.799857152445119e+00 + 4.077949059776957e-01 + 1.800000000000000e+00 + -3.551041600037998e-03 +544 5.194999999999993e-09 + 1.799776340101214e+00 + 3.974386696811102e-01 + 1.800000000000000e+00 + -3.577183155844152e-03 +545 5.204999999999993e-09 + 1.799710226722092e+00 + 3.891431797990305e-01 + 1.800000000000000e+00 + -3.641182874852062e-03 +546 5.214999999999992e-09 + 1.799717006382083e+00 + 3.823490590738963e-01 + 1.800000000000000e+00 + -3.716167283400951e-03 +547 5.224999999999992e-09 + 1.799776961892324e+00 + 3.765940213193657e-01 + 1.800000000000000e+00 + -3.791158406267141e-03 +548 5.234999999999992e-09 + 1.799914207244217e+00 + 3.715874296116172e-01 + 1.800000000000000e+00 + -3.846148334723565e-03 +549 5.244999999999992e-09 + 1.800128619252916e+00 + 3.670869221843556e-01 + 1.800000000000000e+00 + -3.865212207943958e-03 +550 5.254999999999991e-09 + 1.800532227073216e+00 + 3.628774191672191e-01 + 1.800000000000000e+00 + -3.839255965038799e-03 +551 5.264999999999991e-09 + 1.801299342166994e+00 + 3.587244943271249e-01 + 1.800000000000000e+00 + -3.780640061079124e-03 +552 5.274999999999991e-09 + 1.802805847428034e+00 + 3.545358140839066e-01 + 1.800000000000000e+00 + -3.729975579714246e-03 +553 5.284999999999991e-09 + 1.804477075817013e+00 + 3.506789528718536e-01 + 1.800000000000000e+00 + -3.676515956946358e-03 +554 5.294999999999991e-09 + 1.805075954030068e+00 + 3.478118329430830e-01 + 1.800000000000000e+00 + -3.585098357534345e-03 +555 5.304999999999990e-09 + 1.804921758376145e+00 + 3.469872503294305e-01 + 1.800000000000000e+00 + -3.549981271261952e-03 +556 5.314999999999990e-09 + 1.804264708157886e+00 + 3.502462698135531e-01 + 1.800000000000000e+00 + -3.571013574590283e-03 +557 5.324999999999990e-09 + 1.803326131673887e+00 + 3.611966513908182e-01 + 1.800000000000000e+00 + -3.628880989551985e-03 +558 5.334999999999990e-09 + 1.802694582978307e+00 + 3.854278572033020e-01 + 1.800000000000000e+00 + -3.705217599772494e-03 +559 5.344999999999989e-09 + 1.802488114651546e+00 + 4.331558691974674e-01 + 1.800000000000000e+00 + -3.778966953638172e-03 +560 5.354999999999989e-09 + 1.802916172597047e+00 + 5.240029996620847e-01 + 1.800000000000000e+00 + -3.840849089123488e-03 +561 5.364999999999989e-09 + 1.804117599086740e+00 + 6.835063202147127e-01 + 1.800000000000000e+00 + -3.863748465960479e-03 +562 5.374999999999989e-09 + 1.806517387242179e+00 + 9.086205593832689e-01 + 1.800000000000000e+00 + -3.847602025104509e-03 +563 5.384999999999988e-09 + 1.810246572537153e+00 + 1.166720923581352e+00 + 1.800000000000000e+00 + -3.789037838733268e-03 +564 5.394999999999988e-09 + 1.813560359115421e+00 + 1.398502662924401e+00 + 1.800000000000000e+00 + -3.737402974492714e-03 +565 5.404999999999988e-09 + 1.814528641549332e+00 + 1.558185987018407e+00 + 1.800000000000000e+00 + -3.687775846764037e-03 +566 5.414999999999988e-09 + 1.811530557437323e+00 + 1.656001603191965e+00 + 1.800000000000000e+00 + -3.598382509897827e-03 +567 5.424999999999987e-09 + 1.799720152307440e+00 + 1.717099847866530e+00 + 1.800000000000000e+00 + -3.550152143650993e-03 +568 5.434999999999987e-09 + 1.771883795395003e+00 + 1.753871327894950e+00 + 1.800000000000000e+00 + -3.565825777061489e-03 +569 5.444999999999987e-09 + 1.723767925700772e+00 + 1.774630874272116e+00 + 1.800000000000000e+00 + -3.617009975568920e-03 +570 5.454999999999987e-09 + 1.656663257006149e+00 + 1.786055301776107e+00 + 1.800000000000000e+00 + -3.694168630844864e-03 +571 5.464999999999986e-09 + 1.575794794115100e+00 + 1.792196047614082e+00 + 1.800000000000000e+00 + -3.766560283682359e-03 +572 5.474999999999986e-09 + 1.487441205265260e+00 + 1.795624483621207e+00 + 1.800000000000000e+00 + -3.834473542948466e-03 +573 5.484999999999986e-09 + 1.397062418467677e+00 + 1.797436511916429e+00 + 1.800000000000000e+00 + -3.861412291581425e-03 +574 5.494999999999986e-09 + 1.308761576678027e+00 + 1.798551989943489e+00 + 1.800000000000000e+00 + -3.854699349935437e-03 +575 5.504999999999985e-09 + 1.225216739063670e+00 + 1.799131551294826e+00 + 1.800000000000000e+00 + -3.797750161151894e-03 +576 5.514999999999985e-09 + 1.147972211598540e+00 + 1.799504971070447e+00 + 1.800000000000000e+00 + -3.745285977406080e-03 +577 5.524999999999985e-09 + 1.078846591652574e+00 + 1.799578798984073e+00 + 1.800000000000000e+00 + -3.697306481847133e-03 +578 5.534999999999985e-09 + 1.019703766776265e+00 + 1.799701064878469e+00 + 1.800000000000000e+00 + -3.613167381364105e-03 +579 5.544999999999984e-09 + 9.649482951383811e-01 + 1.799736377972877e+00 + 1.800000000000000e+00 + -3.551849975904782e-03 +580 5.554999999999984e-09 + 9.039212774290831e-01 + 1.799786071048519e+00 + 1.800000000000000e+00 + -3.561481979483617e-03 +581 5.564999999999984e-09 + 8.355533638488056e-01 + 1.799750771480299e+00 + 1.800000000000000e+00 + -3.605852136435942e-03 +582 5.574999999999984e-09 + 7.655943567401151e-01 + 1.799795411667060e+00 + 1.800000000000000e+00 + -3.682836743196383e-03 +583 5.584999999999984e-09 + 6.987187027113529e-01 + 1.799783754049586e+00 + 1.800000000000000e+00 + -3.754235973730455e-03 +584 5.594999999999983e-09 + 6.382262311292476e-01 + 1.799831059572120e+00 + 1.800000000000000e+00 + -3.826841074110283e-03 +585 5.604999999999983e-09 + 5.854072505886406e-01 + 1.799826524998146e+00 + 1.800000000000000e+00 + -3.858475445052056e-03 +586 5.614999999999983e-09 + 5.406392728003616e-01 + 1.799868513088672e+00 + 1.800000000000000e+00 + -3.860223404957389e-03 +587 5.624999999999983e-09 + 5.036270111550011e-01 + 1.799868064538069e+00 + 1.800000000000000e+00 + -3.806847367411562e-03 +588 5.634999999999982e-09 + 4.737473307960779e-01 + 1.799898114963997e+00 + 1.800000000000000e+00 + -3.753490815616229e-03 +589 5.644999999999982e-09 + 4.498362615703904e-01 + 1.799866705232200e+00 + 1.800000000000000e+00 + -3.705473150970725e-03 +590 5.654999999999982e-09 + 4.307170588467096e-01 + 1.799863323973936e+00 + 1.800000000000000e+00 + -3.628694573657952e-03 +591 5.664999999999982e-09 + 4.156060999204715e-01 + 1.799867330128813e+00 + 1.800000000000000e+00 + -3.555483538193739e-03 +592 5.674999999999981e-09 + 4.036744828145987e-01 + 1.799840144183002e+00 + 1.800000000000000e+00 + -3.557788532819510e-03 +593 5.684999999999981e-09 + 3.941317120049290e-01 + 1.799736611952337e+00 + 1.800000000000000e+00 + -3.595731525423178e-03 +594 5.694999999999981e-09 + 3.864747299242909e-01 + 1.799712877591686e+00 + 1.800000000000000e+00 + -3.671049644616559e-03 +595 5.704999999999981e-09 + 3.800989061149807e-01 + 1.799724984753642e+00 + 1.800000000000000e+00 + -3.742276024994617e-03 +596 5.714999999999980e-09 + 3.746595755050595e-01 + 1.799826104181901e+00 + 1.800000000000000e+00 + -3.817819596274665e-03 +597 5.724999999999980e-09 + 3.698631033468180e-01 + 1.799975253679761e+00 + 1.800000000000000e+00 + -3.855160205697328e-03 +598 5.734999999999980e-09 + 3.654990399011113e-01 + 1.800255549936741e+00 + 1.800000000000000e+00 + -3.863929508065645e-03 +599 5.744999999999980e-09 + 3.613366371085580e-01 + 1.800754458824528e+00 + 1.800000000000000e+00 + -3.816321386854692e-03 +600 5.754999999999979e-09 + 3.571593457205211e-01 + 1.801741864451542e+00 + 1.800000000000000e+00 + -3.761765058922114e-03 +601 5.764999999999979e-09 + 3.530354374233716e-01 + 1.803547716402125e+00 + 1.800000000000000e+00 + -3.712814962426837e-03 +602 5.774999999999979e-09 + 3.494466596443432e-01 + 1.804794359729385e+00 + 1.800000000000000e+00 + -3.644159334130323e-03 +603 5.784999999999979e-09 + 3.471908484306689e-01 + 1.805070328419877e+00 + 1.800000000000000e+00 + -3.561387560898559e-03 +604 5.794999999999978e-09 + 3.475670353626067e-01 + 1.804756023305837e+00 + 1.800000000000000e+00 + -3.554656922418900e-03 +605 5.804999999999978e-09 + 3.531724219393744e-01 + 1.803895577617023e+00 + 1.800000000000000e+00 + -3.586846945336935e-03 +606 5.814999999999978e-09 + 3.682632602732559e-01 + 1.803061734502950e+00 + 1.800000000000000e+00 + -3.658807871662483e-03 +607 5.824999999999978e-09 + 3.996263071626847e-01 + 1.802545686594480e+00 + 1.800000000000000e+00 + -3.730794045511772e-03 +608 5.834999999999977e-09 + 4.605072250655342e-01 + 1.802579505358956e+00 + 1.800000000000000e+00 + -3.807473507618938e-03 +609 5.844999999999977e-09 + 5.744081199533124e-01 + 1.803247333373323e+00 + 1.800000000000000e+00 + -3.851504159071922e-03 +610 5.854999999999977e-09 + 7.608226035636964e-01 + 1.804851838166073e+00 + 1.800000000000000e+00 + -3.865788316773211e-03 +611 5.864999999999977e-09 + 1.003420653227113e+00 + 1.807785867817743e+00 + 1.800000000000000e+00 + -3.825969382198731e-03 +612 5.874999999999977e-09 + 1.259368627431487e+00 + 1.811662228467277e+00 + 1.800000000000000e+00 + -3.769961883562287e-03 +613 5.884999999999976e-09 + 1.466959057460116e+00 + 1.814248667116619e+00 + 1.800000000000000e+00 + -3.719803910044399e-03 +614 5.894999999999976e-09 + 1.600087108355892e+00 + 1.814047930799999e+00 + 1.800000000000000e+00 + -3.658912242692503e-03 +615 5.904999999999976e-09 + 1.682189806379665e+00 + 1.808549728219465e+00 + 1.800000000000000e+00 + -3.569627890679091e-03 +616 5.914999999999976e-09 + 1.733121453675469e+00 + 1.791590879012676e+00 + 1.800000000000000e+00 + -3.552247089555207e-03 +617 5.924999999999975e-09 + 1.763082160477577e+00 + 1.756411916427182e+00 + 1.800000000000000e+00 + -3.579186823504898e-03 +618 5.934999999999975e-09 + 1.779679379948409e+00 + 1.700816220953935e+00 + 1.800000000000000e+00 + -3.646332456170657e-03 +619 5.944999999999975e-09 + 1.788812425032158e+00 + 1.627873172899451e+00 + 1.800000000000000e+00 + -3.719682713782512e-03 +620 5.954999999999975e-09 + 1.793689459443014e+00 + 1.543503767071676e+00 + 1.800000000000000e+00 + -3.796091957434203e-03 +621 5.964999999999974e-09 + 1.796450090582197e+00 + 1.453834277462843e+00 + 1.800000000000000e+00 + -3.847333125474599e-03 +622 5.974999999999974e-09 + 1.797898340276962e+00 + 1.363820756002686e+00 + 1.800000000000000e+00 + -3.866015003943084e-03 +623 5.984999999999974e-09 + 1.798826622068851e+00 + 1.277049826413655e+00 + 1.800000000000000e+00 + -3.835387920943379e-03 +624 5.994999999999974e-09 + 1.799284500509345e+00 + 1.195700960730418e+00 + 1.800000000000000e+00 + -3.778133696430008e-03 +625 6.004999999999973e-09 + 1.799565868537552e+00 + 1.121188603725864e+00 + 1.800000000000000e+00 + -3.726793175021175e-03 +626 6.014999999999973e-09 + 1.799604431754850e+00 + 1.055736085750909e+00 + 1.800000000000000e+00 + -3.672446344540236e-03 +627 6.024999999999973e-09 + 1.799735582346791e+00 + 9.994956979451998e-01 + 1.800000000000000e+00 + -3.580133678473243e-03 +628 6.034999999999973e-09 + 1.799746806207852e+00 + 9.433682970730678e-01 + 1.800000000000000e+00 + -3.550780975737635e-03 +629 6.044999999999972e-09 + 1.799784413587570e+00 + 8.790699315409050e-01 + 1.800000000000000e+00 + -3.572635595244244e-03 +630 6.054999999999972e-09 + 1.799753933487618e+00 + 8.094603584900477e-01 + 1.800000000000000e+00 + -3.633930613370811e-03 +631 6.064999999999972e-09 + 1.799802496734940e+00 + 7.401548330726280e-01 + 1.800000000000000e+00 + -3.708728690810054e-03 +632 6.074999999999972e-09 + 1.799789882733736e+00 + 6.753827281875195e-01 + 1.800000000000000e+00 + -3.784053120928292e-03 +633 6.084999999999971e-09 + 1.799840232175508e+00 + 6.176595507686337e-01 + 1.800000000000000e+00 + -3.842384712805692e-03 +634 6.094999999999971e-09 + 1.799831993410444e+00 + 5.678297358873722e-01 + 1.800000000000000e+00 + -3.864944689834316e-03 +635 6.104999999999971e-09 + 1.799877864812335e+00 + 5.259977944869154e-01 + 1.800000000000000e+00 + -3.844105281935071e-03 +636 6.114999999999971e-09 + 1.799872377253508e+00 + 4.917386224827667e-01 + 1.800000000000000e+00 + -3.786440126019526e-03 +637 6.124999999999970e-09 + 1.799898489860474e+00 + 4.642243184800066e-01 + 1.800000000000000e+00 + -3.734066326501723e-03 +638 6.134999999999970e-09 + 1.799853522029028e+00 + 4.422205517638113e-01 + 1.800000000000000e+00 + -3.684361030343701e-03 +639 6.144999999999970e-09 + 1.799871374214622e+00 + 4.246759274262891e-01 + 1.800000000000000e+00 + -3.592726829230039e-03 +640 6.154999999999970e-09 + 1.799862118278670e+00 + 4.108382597602703e-01 + 1.800000000000000e+00 + -3.550467484679099e-03 +641 6.164999999999970e-09 + 1.799806156650934e+00 + 3.998784783012105e-01 + 1.800000000000000e+00 + -3.567098654653190e-03 +642 6.174999999999969e-09 + 1.799714293869051e+00 + 3.910954643790420e-01 + 1.800000000000000e+00 + -3.621868674098771e-03 +643 6.184999999999969e-09 + 1.799715740945120e+00 + 3.839792959537798e-01 + 1.800000000000000e+00 + -3.697738901456383e-03 +644 6.194999999999969e-09 + 1.799749505679892e+00 + 3.779831805209944e-01 + 1.800000000000000e+00 + -3.771689543805444e-03 +645 6.204999999999969e-09 + 1.799877838821808e+00 + 3.728139008907481e-01 + 1.800000000000000e+00 + -3.836431206991921e-03 +646 6.214999999999968e-09 + 1.800056875979796e+00 + 3.682018274267957e-01 + 1.800000000000000e+00 + -3.862895902359404e-03 +647 6.224999999999968e-09 + 1.800408397032197e+00 + 3.639406368773486e-01 + 1.800000000000000e+00 + -3.851707094419269e-03 +648 6.234999999999968e-09 + 1.801047989782362e+00 + 3.597935671417710e-01 + 1.800000000000000e+00 + -3.795022905795815e-03 +649 6.244999999999968e-09 + 1.802317236577639e+00 + 3.555967118565075e-01 + 1.800000000000000e+00 + -3.741787753300246e-03 +650 6.254999999999967e-09 + 1.804172589619487e+00 + 3.516067844753671e-01 + 1.800000000000000e+00 + -3.694503247269923e-03 +651 6.264999999999967e-09 + 1.805008499315739e+00 + 3.483992290189261e-01 + 1.800000000000000e+00 + -3.607036488120796e-03 +652 6.274999999999967e-09 + 1.804997318226968e+00 + 3.469171273978665e-01 + 1.800000000000000e+00 + -3.551553700959466e-03 +653 6.284999999999967e-09 + 1.804494753138909e+00 + 3.488551656992254e-01 + 1.800000000000000e+00 + -3.562467951558840e-03 +654 6.294999999999966e-09 + 1.803538754278799e+00 + 3.573985159228215e-01 + 1.800000000000000e+00 + -3.610406373135039e-03 +655 6.304999999999966e-09 + 1.802831376527167e+00 + 3.775305049071958e-01 + 1.800000000000000e+00 + -3.686537757596534e-03 +656 6.314999999999966e-09 + 1.802477734443476e+00 + 4.178187259914166e-01 + 1.800000000000000e+00 + -3.759295938909880e-03 +657 6.324999999999966e-09 + 1.802750143947153e+00 + 4.951637415785812e-01 + 1.800000000000000e+00 + -3.829286682072324e-03 +658 6.334999999999965e-09 + 1.803709859851837e+00 + 6.355794455630919e-01 + 1.800000000000000e+00 + -3.860147471230748e-03 +659 6.344999999999965e-09 + 1.805769478809078e+00 + 8.461556273965835e-01 + 1.800000000000000e+00 + -3.857850582989911e-03 +660 6.354999999999965e-09 + 1.809225142915935e+00 + 1.100529742380289e+00 + 1.800000000000000e+00 + -3.803969673759781e-03 +661 6.364999999999965e-09 + 1.812885336935556e+00 + 1.345049980022319e+00 + 1.800000000000000e+00 + -3.749904028151912e-03 +662 6.374999999999964e-09 + 1.814558121752553e+00 + 1.524429421531276e+00 + 1.800000000000000e+00 + -3.703111489789340e-03 +663 6.384999999999964e-09 + 1.812873705026434e+00 + 1.635138552512326e+00 + 1.800000000000000e+00 + -3.622389856171643e-03 +664 6.394999999999964e-09 + 1.803987233132873e+00 + 1.704143844309124e+00 + 1.800000000000000e+00 + -3.554421342501254e-03 +665 6.404999999999964e-09 + 1.780870488800282e+00 + 1.746265911212488e+00 + 1.800000000000000e+00 + -3.558556201903001e-03 +666 6.414999999999963e-09 + 1.738036207495724e+00 + 1.770443033305441e+00 + 1.800000000000000e+00 + -3.599865527463212e-03 +667 6.424999999999963e-09 + 1.675401734833987e+00 + 1.783739872608136e+00 + 1.800000000000000e+00 + -3.674934713448793e-03 +668 6.434999999999963e-09 + 1.597459009904752e+00 + 1.790973040442525e+00 + 1.800000000000000e+00 + -3.747172422584204e-03 +669 6.444999999999963e-09 + 1.510448312606602e+00 + 1.794919046999800e+00 + 1.800000000000000e+00 + -3.820787948103694e-03 +670 6.454999999999963e-09 + 1.420144486391972e+00 + 1.797078550719536e+00 + 1.800000000000000e+00 + -3.856951796779837e-03 +671 6.464999999999962e-09 + 1.330997998505078e+00 + 1.798309651623778e+00 + 1.800000000000000e+00 + -3.862249742915249e-03 +672 6.474999999999962e-09 + 1.246054815388841e+00 + 1.799021328405313e+00 + 1.800000000000000e+00 + -3.813312110586880e-03 +673 6.484999999999962e-09 + 1.167074429002116e+00 + 1.799427949803237e+00 + 1.800000000000000e+00 + -3.758183177946758e-03 +674 6.494999999999962e-09 + 1.095618870031113e+00 + 1.799576975452354e+00 + 1.800000000000000e+00 + -3.710692811045415e-03 +675 6.504999999999961e-09 + 1.033980191670323e+00 + 1.799660803903457e+00 + 1.800000000000000e+00 + -3.637966605025337e-03 +676 6.514999999999961e-09 + 9.792116648623169e-01 + 1.799738689456424e+00 + 1.800000000000000e+00 + -3.559451370066137e-03 +677 6.524999999999961e-09 + 9.204323256401821e-01 + 1.799772472872629e+00 + 1.800000000000000e+00 + -3.555224775719013e-03 +678 6.534999999999961e-09 + 8.534315432233265e-01 + 1.799762944323564e+00 + 1.800000000000000e+00 + -3.590510206418463e-03 +679 6.544999999999960e-09 + 7.833816860199162e-01 + 1.799778706855686e+00 + 1.800000000000000e+00 + -3.662848559112647e-03 +680 6.554999999999960e-09 + 7.153269980329253e-01 + 1.799790960680338e+00 + 1.800000000000000e+00 + -3.735513047483925e-03 +681 6.564999999999960e-09 + 6.530116651281894e-01 + 1.799814354149920e+00 + 1.800000000000000e+00 + -3.810910373636160e-03 +682 6.574999999999960e-09 + 5.981660715673722e-01 + 1.799832204376677e+00 + 1.800000000000000e+00 + -3.853429986659730e-03 +683 6.584999999999959e-09 + 5.513445969814852e-01 + 1.799853450798099e+00 + 1.800000000000000e+00 + -3.864780083699457e-03 +684 6.594999999999959e-09 + 5.123904665521666e-01 + 1.799872390409888e+00 + 1.800000000000000e+00 + -3.822931788950211e-03 +685 6.604999999999959e-09 + 4.807773269751449e-01 + 1.799888391877301e+00 + 1.800000000000000e+00 + -3.766414883190742e-03 +686 6.614999999999959e-09 + 4.554543789290231e-01 + 1.799881493155521e+00 + 1.800000000000000e+00 + -3.717763506432311e-03 +687 6.624999999999958e-09 + 4.352034046502238e-01 + 1.799856169793329e+00 + 1.800000000000000e+00 + -3.653049900716727e-03 +688 6.634999999999958e-09 + 4.191437837461175e-01 + 1.799870748964549e+00 + 1.800000000000000e+00 + -3.566836588732647e-03 +689 6.644999999999958e-09 + 4.064724175456039e-01 + 1.799853498927613e+00 + 1.800000000000000e+00 + -3.552515396966871e-03 +690 6.654999999999958e-09 + 3.963767213833153e-01 + 1.799762806453899e+00 + 1.800000000000000e+00 + -3.582407838284243e-03 +691 6.664999999999957e-09 + 3.882901929633162e-01 + 1.799710457517546e+00 + 1.800000000000000e+00 + -3.650426853570153e-03 +692 6.674999999999957e-09 + 3.816319136011808e-01 + 1.799718259077635e+00 + 1.800000000000000e+00 + -3.724284500497629e-03 +693 6.684999999999957e-09 + 3.759800512230372e-01 + 1.799791521943975e+00 + 1.800000000000000e+00 + -3.799871451991357e-03 +694 6.694999999999957e-09 + 3.710421090584214e-01 + 1.799931741387025e+00 + 1.800000000000000e+00 + -3.849475503048834e-03 +695 6.704999999999956e-09 + 3.665876001218805e-01 + 1.800165429212793e+00 + 1.800000000000000e+00 + -3.865577040442766e-03 +696 6.714999999999956e-09 + 3.623963884563110e-01 + 1.800595291113308e+00 + 1.800000000000000e+00 + -3.832486821300460e-03 +697 6.724999999999956e-09 + 3.582372255824003e-01 + 1.801427153183332e+00 + 1.800000000000000e+00 + -3.774583165238838e-03 +698 6.734999999999956e-09 + 3.540613810782188e-01 + 1.803039234639791e+00 + 1.800000000000000e+00 + -3.724713198134982e-03 +699 6.744999999999956e-09 + 3.502778106966560e-01 + 1.804588175536232e+00 + 1.800000000000000e+00 + -3.667091120279814e-03 +700 6.754999999999955e-09 + 3.475862169518119e-01 + 1.805084953022931e+00 + 1.800000000000000e+00 + -3.576517775220124e-03 +701 6.764999999999955e-09 + 3.471020296049037e-01 + 1.804878824990063e+00 + 1.800000000000000e+00 + -3.550676749681010e-03 +702 6.774999999999955e-09 + 3.510351779399288e-01 + 1.804151910101656e+00 + 1.800000000000000e+00 + -3.575456867403556e-03 +703 6.784999999999955e-09 + 3.631907301623607e-01 + 1.803238917070046e+00 + 1.800000000000000e+00 + -3.637966583883542e-03 +704 6.794999999999954e-09 + 3.894827073428434e-01 + 1.802640987400262e+00 + 1.800000000000000e+00 + -3.713294239645670e-03 +705 6.804999999999954e-09 + 4.409935260201301e-01 + 1.802507510611483e+00 + 1.800000000000000e+00 + -3.788036080314087e-03 +706 6.814999999999954e-09 + 5.385932634378936e-01 + 1.803007145102565e+00 + 1.800000000000000e+00 + -3.844841214259528e-03 +707 6.824999999999954e-09 + 7.066879645495026e-01 + 1.804328030163117e+00 + 1.800000000000000e+00 + -3.864949385019133e-03 +708 6.834999999999953e-09 + 9.377614615925657e-01 + 1.806890291607290e+00 + 1.800000000000000e+00 + -3.841513223436445e-03 +709 6.844999999999953e-09 + 1.196189979868375e+00 + 1.810701798113077e+00 + 1.800000000000000e+00 + -3.782823460727540e-03 +710 6.854999999999953e-09 + 1.421064149197423e+00 + 1.813814009589566e+00 + 1.800000000000000e+00 + -3.731850295260124e-03 +711 6.864999999999953e-09 + 1.572103725061102e+00 + 1.814440043890261e+00 + 1.800000000000000e+00 + -3.679643287768499e-03 +712 6.874999999999952e-09 + 1.664672197202373e+00 + 1.810745158748082e+00 + 1.800000000000000e+00 + -3.588365267910228e-03 +713 6.884999999999952e-09 + 1.722439373784913e+00 + 1.797442460120591e+00 + 1.800000000000000e+00 + -3.549916795617976e-03 +714 6.894999999999952e-09 + 1.756967258267402e+00 + 1.767366567277168e+00 + 1.800000000000000e+00 + -3.569551522117315e-03 +715 6.904999999999952e-09 + 1.776327508215587e+00 + 1.716883200006219e+00 + 1.800000000000000e+00 + -3.625753698137956e-03 +716 6.914999999999951e-09 + 1.786988550813939e+00 + 1.647870267364644e+00 + 1.800000000000000e+00 + -3.702334739344991e-03 +717 6.924999999999951e-09 + 1.792694299719082e+00 + 1.565814791832448e+00 + 1.800000000000000e+00 + -3.775760670172024e-03 +718 6.934999999999951e-09 + 1.795906646080165e+00 + 1.476972958189660e+00 + 1.800000000000000e+00 + -3.839279234871228e-03 +719 6.944999999999951e-09 + 1.797586460371226e+00 + 1.386650080238528e+00 + 1.800000000000000e+00 + -3.863231269494755e-03 +720 6.954999999999950e-09 + 1.798647755080608e+00 + 1.298790964611620e+00 + 1.800000000000000e+00 + -3.849567476328959e-03 +721 6.964999999999950e-09 + 1.799179569728565e+00 + 1.215911711434733e+00 + 1.800000000000000e+00 + -3.791294089389290e-03 +722 6.974999999999950e-09 + 1.799530734859608e+00 + 1.139490107914135e+00 + 1.800000000000000e+00 + -3.739396788792652e-03 +723 6.984999999999950e-09 + 1.799583006020551e+00 + 1.071480033226212e+00 + 1.800000000000000e+00 + -3.690436873993938e-03 +724 6.994999999999949e-09 + 1.799715629885271e+00 + 1.013362273308812e+00 + 1.800000000000000e+00 + -3.602100256404282e-03 +725 7.004999999999949e-09 + 1.799737391125755e+00 + 9.583446341504899e-01 + 1.800000000000000e+00 + -3.550450897117155e-03 +726 7.014999999999949e-09 + 1.799788531110947e+00 + 8.962690773481883e-01 + 1.800000000000000e+00 + -3.564601039071142e-03 +727 7.024999999999949e-09 + 1.799748757567073e+00 + 8.274206210080094e-01 + 1.800000000000000e+00 + -3.614038098110170e-03 +728 7.034999999999949e-09 + 1.799800183243665e+00 + 7.575999598208475e-01 + 1.800000000000000e+00 + -3.691231077476285e-03 +729 7.044999999999948e-09 + 1.799783190745082e+00 + 6.913348600618054e-01 + 1.800000000000000e+00 + -3.763345849616216e-03 +730 7.054999999999948e-09 + 1.799836206565663e+00 + 6.316931071478799e-01 + 1.800000000000000e+00 + -3.832593227863984e-03 +731 7.064999999999948e-09 + 1.799826132872190e+00 + 5.798022187617939e-01 + 1.800000000000000e+00 + -3.860712726519991e-03 +732 7.074999999999948e-09 + 1.799873359200514e+00 + 5.359567451383174e-01 + 1.800000000000000e+00 + -3.856284318455792e-03 +733 7.084999999999947e-09 + 1.799867782546669e+00 + 4.998129292740977e-01 + 1.800000000000000e+00 + -3.800101625305071e-03 +734 7.094999999999947e-09 + 1.799900315178500e+00 + 4.706911720918762e-01 + 1.800000000000000e+00 + -3.747384827863222e-03 +735 7.104999999999947e-09 + 1.799861056645458e+00 + 4.473935141116037e-01 + 1.800000000000000e+00 + -3.699564634841980e-03 +736 7.114999999999947e-09 + 1.799866550273455e+00 + 4.287731211750809e-01 + 1.800000000000000e+00 + -3.617158964706873e-03 +737 7.124999999999946e-09 + 1.799865682453440e+00 + 4.140719700394108e-01 + 1.800000000000000e+00 + -3.552612889832065e-03 +738 7.134999999999946e-09 + 1.799831304962031e+00 + 4.024569982698815e-01 + 1.800000000000000e+00 + -3.560444400148214e-03 +739 7.144999999999946e-09 + 1.799727399973077e+00 + 3.931567371075755e-01 + 1.800000000000000e+00 + -3.603120781197120e-03 +740 7.154999999999946e-09 + 1.799714051116463e+00 + 3.856790738001225e-01 + 1.800000000000000e+00 + -3.679793576406686e-03 +741 7.164999999999945e-09 + 1.799730565468904e+00 + 3.794252279003161e-01 + 1.800000000000000e+00 + -3.751092716158281e-03 +742 7.174999999999945e-09 + 1.799842238844442e+00 + 3.740750177626626e-01 + 1.800000000000000e+00 + -3.824606624939656e-03 +743 7.184999999999945e-09 + 1.799998044641289e+00 + 3.693386890743622e-01 + 1.800000000000000e+00 + -3.857660297194221e-03 +744 7.194999999999945e-09 + 1.800300359373349e+00 + 3.650103700922085e-01 + 1.800000000000000e+00 + -3.861352346579568e-03 +745 7.204999999999944e-09 + 1.800837429612736e+00 + 3.608559884950102e-01 + 1.800000000000000e+00 + -3.809303172055481e-03 +746 7.214999999999944e-09 + 1.801903045800396e+00 + 3.566704387535237e-01 + 1.800000000000000e+00 + -3.755632234239888e-03 +747 7.224999999999944e-09 + 1.803763593954823e+00 + 3.525810958493132e-01 + 1.800000000000000e+00 + -3.707463329542620e-03 +748 7.234999999999944e-09 + 1.804873444600564e+00 + 3.490975637051326e-01 + 1.800000000000000e+00 + -3.632743392239053e-03 +749 7.244999999999943e-09 + 1.805052737723088e+00 + 3.470635269336780e-01 + 1.800000000000000e+00 + -3.556812112913766e-03 +750 7.254999999999943e-09 + 1.804685263386961e+00 + 3.478849603726776e-01 + 1.800000000000000e+00 + -3.556900280660265e-03 +751 7.264999999999943e-09 + 1.803779869786015e+00 + 3.543395575823209e-01 + 1.800000000000000e+00 + -3.593311267883730e-03 +752 7.274999999999943e-09 + 1.802986684015881e+00 + 3.708983451628856e-01 + 1.800000000000000e+00 + -3.667878211078866e-03 +753 7.284999999999942e-09 + 1.802514468707606e+00 + 4.048312016660360e-01 + 1.800000000000000e+00 + -3.739256048997444e-03 +754 7.294999999999942e-09 + 1.802624520128581e+00 + 4.704689020473781e-01 + 1.800000000000000e+00 + -3.815223251221393e-03 +755 7.304999999999942e-09 + 1.803376099818038e+00 + 5.923512258832376e-01 + 1.800000000000000e+00 + -3.854262323123481e-03 +756 7.314999999999942e-09 + 1.805117706697454e+00 + 7.866580173031613e-01 + 1.800000000000000e+00 + -3.864568651244726e-03 +757 7.324999999999942e-09 + 1.808221438073110e+00 + 1.033636300098666e+00 + 1.800000000000000e+00 + -3.818851719155925e-03 +758 7.334999999999941e-09 + 1.812069875332265e+00 + 1.286990227150064e+00 + 1.800000000000000e+00 + -3.763892083236874e-03 +759 7.344999999999941e-09 + 1.814387159584854e+00 + 1.486029612093706e+00 + 1.800000000000000e+00 + -3.714673349931087e-03 +760 7.354999999999941e-09 + 1.813766993006536e+00 + 1.611678547609209e+00 + 1.800000000000000e+00 + -3.648077836978204e-03 +761 7.364999999999941e-09 + 1.807315483172369e+00 + 1.689459703920964e+00 + 1.800000000000000e+00 + -3.563328666685825e-03 +762 7.374999999999940e-09 + 1.788537500159377e+00 + 1.737506990323817e+00 + 1.800000000000000e+00 + -3.553933311383933e-03 +763 7.384999999999940e-09 + 1.750989123022623e+00 + 1.765558615168436e+00 + 1.800000000000000e+00 + -3.584754454598315e-03 +764 7.394999999999940e-09 + 1.693139467718036e+00 + 1.781041605338570e+00 + 1.800000000000000e+00 + -3.655547544407862e-03 +765 7.404999999999940e-09 + 1.618543786621937e+00 + 1.789543107071467e+00 + 1.800000000000000e+00 + -3.727888079772458e-03 +766 7.414999999999939e-09 + 1.533260146963926e+00 + 1.794099229022617e+00 + 1.800000000000000e+00 + -3.804572680847499e-03 +767 7.424999999999939e-09 + 1.443322724140694e+00 + 1.796664086546386e+00 + 1.800000000000000e+00 + -3.850495099705918e-03 +768 7.434999999999939e-09 + 1.353529434724468e+00 + 1.798032464065055e+00 + 1.800000000000000e+00 + -3.865973565302616e-03 +769 7.444999999999939e-09 + 1.267299499325179e+00 + 1.798894257825365e+00 + 1.800000000000000e+00 + -3.828484364501414e-03 +770 7.454999999999938e-09 + 1.186671606063900e+00 + 1.799331349606724e+00 + 1.800000000000000e+00 + -3.772070588292792e-03 +771 7.464999999999938e-09 + 1.113073786078827e+00 + 1.799573026536506e+00 + 1.800000000000000e+00 + -3.721631675574485e-03 +772 7.474999999999938e-09 + 1.048809536973556e+00 + 1.799619687175786e+00 + 1.800000000000000e+00 + -3.662558184896096e-03 +773 7.484999999999938e-09 + 9.932038064441215e-01 + 1.799739090621965e+00 + 1.800000000000000e+00 + -3.572172181558516e-03 +774 7.494999999999937e-09 + 9.363622016032505e-01 + 1.799754056568598e+00 + 1.800000000000000e+00 + -3.551746491375091e-03 +775 7.504999999999937e-09 + 8.711389187737159e-01 + 1.799778825257827e+00 + 1.800000000000000e+00 + -3.577394876726246e-03 +776 7.514999999999937e-09 + 8.013123568925128e-01 + 1.799760230931271e+00 + 1.800000000000000e+00 + -3.643062235547402e-03 +777 7.524999999999937e-09 + 7.323345706140276e-01 + 1.799800119496046e+00 + 1.800000000000000e+00 + -3.716838753578542e-03 +778 7.534999999999936e-09 + 6.682975773628187e-01 + 1.799796265463314e+00 + 1.800000000000000e+00 + -3.792983943900834e-03 +779 7.544999999999936e-09 + 6.114617880685780e-01 + 1.799838929302868e+00 + 1.800000000000000e+00 + -3.846146518724454e-03 +780 7.554999999999936e-09 + 5.625707735159468e-01 + 1.799837552622864e+00 + 1.800000000000000e+00 + -3.865828976458837e-03 +781 7.564999999999936e-09 + 5.216429049253043e-01 + 1.799877226963616e+00 + 1.800000000000000e+00 + -3.837764556334346e-03 +782 7.574999999999935e-09 + 4.882226999856681e-01 + 1.799876650781646e+00 + 1.800000000000000e+00 + -3.780261240396744e-03 +783 7.584999999999935e-09 + 4.614097932094884e-01 + 1.799894641795190e+00 + 1.800000000000000e+00 + -3.728670333053687e-03 +784 7.594999999999935e-09 + 4.399681550701589e-01 + 1.799852753824191e+00 + 1.800000000000000e+00 + -3.675702646098639e-03 +785 7.604999999999935e-09 + 4.228985939127324e-01 + 1.799872096839644e+00 + 1.800000000000000e+00 + -3.583243852848774e-03 +786 7.614999999999935e-09 + 4.094358336264418e-01 + 1.799860226390687e+00 + 1.800000000000000e+00 + -3.550561837744631e-03 +787 7.624999999999934e-09 + 3.987553088191762e-01 + 1.799792901025792e+00 + 1.800000000000000e+00 + -3.571115956417730e-03 +788 7.634999999999934e-09 + 3.901975682292733e-01 + 1.799711494505838e+00 + 1.800000000000000e+00 + -3.630725312221673e-03 +789 7.644999999999934e-09 + 3.832316901771685e-01 + 1.799716218770593e+00 + 1.800000000000000e+00 + -3.705892417996795e-03 +790 7.654999999999934e-09 + 3.773471031180960e-01 + 1.799761025406746e+00 + 1.800000000000000e+00 + -3.780830928575767e-03 +791 7.664999999999933e-09 + 3.722536307653951e-01 + 1.799894095126489e+00 + 1.800000000000000e+00 + -3.840955808150542e-03 +792 7.674999999999933e-09 + 3.676938174292209e-01 + 1.800087781851079e+00 + 1.800000000000000e+00 + -3.864474741183022e-03 +793 7.684999999999933e-09 + 3.634579696176026e-01 + 1.800462259353937e+00 + 1.800000000000000e+00 + -3.846227784501167e-03 +794 7.694999999999933e-09 + 3.593097503968634e-01 + 1.801156803819580e+00 + 1.800000000000000e+00 + -3.788628136273163e-03 +795 7.704999999999932e-09 + 3.551135206487145e-01 + 1.802532089951470e+00 + 1.800000000000000e+00 + -3.736052463982371e-03 +796 7.714999999999932e-09 + 3.511793906930845e-01 + 1.804322399758129e+00 + 1.800000000000000e+00 + -3.687154706800637e-03 +797 7.724999999999932e-09 + 3.481182443972127e-01 + 1.805047758309341e+00 + 1.800000000000000e+00 + -3.596332387914598e-03 +798 7.734999999999932e-09 + 3.469196112040660e-01 + 1.804965786561135e+00 + 1.800000000000000e+00 + -3.550584140969460e-03 +799 7.744999999999931e-09 + 3.494297456144641e-01 + 1.804394386385526e+00 + 1.800000000000000e+00 + -3.565828917877851e-03 +800 7.754999999999931e-09 + 3.590234434204338e-01 + 1.803438636155576e+00 + 1.800000000000000e+00 + -3.618792273967698e-03 +801 7.764999999999931e-09 + 3.809433732048914e-01 + 1.802766520219462e+00 + 1.800000000000000e+00 + -3.694865361388185e-03 +802 7.774999999999931e-09 + 4.244599645373794e-01 + 1.802476710087293e+00 + 1.800000000000000e+00 + -3.768430864900503e-03 +803 7.784999999999930e-09 + 5.076964280352757e-01 + 1.802819908147972e+00 + 1.800000000000000e+00 + -3.834709180591350e-03 +804 7.794999999999930e-09 + 6.567549569759017e-01 + 1.803885346416294e+00 + 1.800000000000000e+00 + -3.862217464254308e-03 +805 7.804999999999930e-09 + 8.741504921399983e-01 + 1.806096178846733e+00 + 1.800000000000000e+00 + -3.853480455991384e-03 +806 7.814999999999930e-09 + 1.130706182183945e+00 + 1.809689322302684e+00 + 1.800000000000000e+00 + -3.797299221276122e-03 +807 7.824999999999929e-09 + 1.369900937904143e+00 + 1.813210374621383e+00 + 1.800000000000000e+00 + -3.743891324500474e-03 +808 7.834999999999929e-09 + 1.540282161609438e+00 + 1.814571318487018e+00 + 1.800000000000000e+00 + -3.696858927259783e-03 +809 7.844999999999929e-09 + 1.644905229118974e+00 + 1.812326245097917e+00 + 1.800000000000000e+00 + -3.610989776819075e-03 +810 7.854999999999929e-09 + 1.710225491179886e+00 + 1.802176041718402e+00 + 1.800000000000000e+00 + -3.552093696838925e-03 +811 7.864999999999928e-09 + 1.749851441846212e+00 + 1.776960473568882e+00 + 1.800000000000000e+00 + -3.561405610869942e-03 +812 7.874999999999928e-09 + 1.772422205243399e+00 + 1.731724520713972e+00 + 1.800000000000000e+00 + -3.607537732954306e-03 +813 7.884999999999928e-09 + 1.784835123985444e+00 + 1.667020041474991e+00 + 1.800000000000000e+00 + -3.683576945465421e-03 +814 7.894999999999928e-09 + 1.791550477662070e+00 + 1.587697960975338e+00 + 1.800000000000000e+00 + -3.756079648622796e-03 +815 7.904999999999928e-09 + 1.795253195257501e+00 + 1.500031834713532e+00 + 1.800000000000000e+00 + -3.827224979223025e-03 +816 7.914999999999927e-09 + 1.797246351047631e+00 + 1.409659296640157e+00 + 1.800000000000000e+00 + -3.859330469094223e-03 +817 7.924999999999927e-09 + 1.798424555443542e+00 + 1.320873286598245e+00 + 1.800000000000000e+00 + -3.859193176371999e-03 +818 7.934999999999927e-09 + 1.799072484841508e+00 + 1.236551680982433e+00 + 1.800000000000000e+00 + -3.806349644457744e-03 +819 7.944999999999927e-09 + 1.799466014006692e+00 + 1.158346154288286e+00 + 1.800000000000000e+00 + -3.752075967859250e-03 +820 7.954999999999926e-09 + 1.799577057701033e+00 + 1.087923721277145e+00 + 1.800000000000000e+00 + -3.705145816125980e-03 +821 7.964999999999926e-09 + 1.799680000964368e+00 + 1.027446180397004e+00 + 1.800000000000000e+00 + -3.626479692228349e-03 +822 7.974999999999926e-09 + 1.799737202482639e+00 + 9.727866050194444e-01 + 1.800000000000000e+00 + -3.555494226121243e-03 +823 7.984999999999926e-09 + 1.799779792438763e+00 + 9.130106696872706e-01 + 1.800000000000000e+00 + -3.557651475280848e-03 +824 7.994999999999925e-09 + 1.799756376865813e+00 + 8.453374901766163e-01 + 1.800000000000000e+00 + -3.597287836115315e-03 +825 8.004999999999925e-09 + 1.799787065874268e+00 + 7.752917427965802e-01 + 1.800000000000000e+00 + -3.671846755342239e-03 +826 8.014999999999925e-09 + 1.799786930444566e+00 + 7.077418116336714e-01 + 1.800000000000000e+00 + -3.744067215219359e-03 +827 8.024999999999925e-09 + 1.799822596050674e+00 + 6.462429066296265e-01 + 1.800000000000000e+00 + -3.818359352707100e-03 +828 8.034999999999924e-09 + 1.799829040526132e+00 + 5.923124814393059e-01 + 1.800000000000000e+00 + -3.856047319304635e-03 +829 8.044999999999924e-09 + 1.799860809918232e+00 + 5.464251109932236e-01 + 1.800000000000000e+00 + -3.863106679406528e-03 +830 8.054999999999924e-09 + 1.799869987201362e+00 + 5.083558622433431e-01 + 1.800000000000000e+00 + -3.815785184286150e-03 +831 8.064999999999924e-09 + 1.799893431310639e+00 + 4.775388917959174e-01 + 1.800000000000000e+00 + -3.760356310372478e-03 +832 8.074999999999923e-09 + 1.799874617126334e+00 + 4.528660459858280e-01 + 1.800000000000000e+00 + -3.712549184116698e-03 +833 8.084999999999923e-09 + 1.799859235362276e+00 + 4.331346384579924e-01 + 1.800000000000000e+00 + -3.641983402639924e-03 +834 8.094999999999923e-09 + 1.799869296234516e+00 + 4.175130569951245e-01 + 1.800000000000000e+00 + -3.561145209078282e-03 +835 8.104999999999923e-09 + 1.799848447141022e+00 + 4.051839232989304e-01 + 1.800000000000000e+00 + -3.554461627851433e-03 +836 8.114999999999922e-09 + 1.799750105195518e+00 + 3.953423054925623e-01 + 1.800000000000000e+00 + -3.588259411327081e-03 +837 8.124999999999922e-09 + 1.799711388360218e+00 + 3.874561235421708e-01 + 1.800000000000000e+00 + -3.659649430595133e-03 +838 8.134999999999922e-09 + 1.799720483089331e+00 + 3.809285272840627e-01 + 1.800000000000000e+00 + -3.732531851679704e-03 +839 8.144999999999922e-09 + 1.799806915703834e+00 + 3.753756972084579e-01 + 1.800000000000000e+00 + -3.808149281796733e-03 +840 8.154999999999921e-09 + 1.799950482277124e+00 + 3.705035038460572e-01 + 1.800000000000000e+00 + -3.852431078958343e-03 +841 8.164999999999921e-09 + 1.800204801675041e+00 + 3.660919441289811e-01 + 1.800000000000000e+00 + -3.865162626794841e-03 +842 8.174999999999921e-09 + 1.800663727879916e+00 + 3.619157405308486e-01 + 1.800000000000000e+00 + -3.825428581748682e-03 +843 8.184999999999921e-09 + 1.801563883810415e+00 + 3.577487991010380e-01 + 1.800000000000000e+00 + -3.768564984097411e-03 +844 8.194999999999921e-09 + 1.803272907571745e+00 + 3.535923582038618e-01 + 1.800000000000000e+00 + -3.719555310058263e-03 +845 8.204999999999920e-09 + 1.804687335650154e+00 + 3.498911644580295e-01 + 1.800000000000000e+00 + -3.656848759245354e-03 +846 8.214999999999920e-09 + 1.805083277000561e+00 + 3.473885920691286e-01 + 1.800000000000000e+00 + -3.569124518484967e-03 +847 8.224999999999920e-09 + 1.804828456470522e+00 + 3.472748435005340e-01 + 1.800000000000000e+00 + -3.551961638015198e-03 +848 8.234999999999920e-09 + 1.804036256920131e+00 + 3.519333862013851e-01 + 1.800000000000000e+00 + -3.580471818105950e-03 +849 8.244999999999919e-09 + 1.803156328580052e+00 + 3.653707416112548e-01 + 1.800000000000000e+00 + -3.647187581148847e-03 +850 8.254999999999919e-09 + 1.802593609476894e+00 + 3.938669169621485e-01 + 1.800000000000000e+00 + -3.721387648780482e-03 +851 8.264999999999919e-09 + 1.802535360130185e+00 + 4.494435954670307e-01 + 1.800000000000000e+00 + -3.796865111192046e-03 +852 8.274999999999919e-09 + 1.803108998801051e+00 + 5.541989972804886e-01 + 1.800000000000000e+00 + -3.848326024711768e-03 +853 8.284999999999918e-09 + 1.804555131936327e+00 + 7.307345121436937e-01 + 1.800000000000000e+00 + -3.865554407206586e-03 +854 8.294999999999918e-09 + 1.807284339832701e+00 + 9.673275205056882e-01 + 1.800000000000000e+00 + -3.834892429477750e-03 +855 8.304999999999918e-09 + 1.811146220860704e+00 + 1.225184255298247e+00 + 1.800000000000000e+00 + -3.776735217873943e-03 +856 8.314999999999918e-09 + 1.814032803355584e+00 + 1.442536297727810e+00 + 1.800000000000000e+00 + -3.726526870745982e-03 +857 8.324999999999917e-09 + 1.814298093785014e+00 + 1.585231334361433e+00 + 1.800000000000000e+00 + -3.670540239876079e-03 +858 8.334999999999917e-09 + 1.809833684989855e+00 + 1.672879642920388e+00 + 1.800000000000000e+00 + -3.579387576725600e-03 +859 8.344999999999917e-09 + 1.794934820384429e+00 + 1.727463157206566e+00 + 1.800000000000000e+00 + -3.550384520477961e-03 +860 8.354999999999917e-09 + 1.762569558512029e+00 + 1.759857007429124e+00 + 1.800000000000000e+00 + -3.573802317722950e-03 +861 8.364999999999916e-09 + 1.709746685122933e+00 + 1.777910354999470e+00 + 1.800000000000000e+00 + -3.634766398611666e-03 +862 8.374999999999916e-09 + 1.638903556878293e+00 + 1.787853883968884e+00 + 1.800000000000000e+00 + -3.710423960111077e-03 +863 8.384999999999916e-09 + 1.555747440244675e+00 + 1.793162113023836e+00 + 1.800000000000000e+00 + -3.784883116761817e-03 +864 8.394999999999916e-09 + 1.466488907913706e+00 + 1.796166035968143e+00 + 1.800000000000000e+00 + -3.843471743668826e-03 +865 8.404999999999915e-09 + 1.376275333537765e+00 + 1.797730750121378e+00 + 1.800000000000000e+00 + -3.864611627042162e-03 +866 8.414999999999915e-09 + 1.288891019371896e+00 + 1.798734264512076e+00 + 1.800000000000000e+00 + -3.843705126512167e-03 +867 8.424999999999915e-09 + 1.206695345218679e+00 + 1.799227273025526e+00 + 1.800000000000000e+00 + -3.785021698679782e-03 +868 8.434999999999915e-09 + 1.131122396215598e+00 + 1.799550277159342e+00 + 1.800000000000000e+00 + -3.733755200195628e-03 +869 8.444999999999914e-09 + 1.064258099005906e+00 + 1.799590536522431e+00 + 1.800000000000000e+00 + -3.682647742893583e-03 +870 8.454999999999914e-09 + 1.007065434875358e+00 + 1.799726849704761e+00 + 1.800000000000000e+00 + -3.591763573664950e-03 +871 8.464999999999914e-09 + 9.516302128731845e-01 + 1.799740407350303e+00 + 1.800000000000000e+00 + -3.549938072969785e-03 +872 8.474999999999914e-09 + 8.885229326458893e-01 + 1.799788251215004e+00 + 1.800000000000000e+00 + -3.568156293525770e-03 +873 8.484999999999914e-09 + 8.192794775559535e-01 + 1.799749469709554e+00 + 1.800000000000000e+00 + -3.622658247239460e-03 +874 8.494999999999913e-09 + 7.496567413230044e-01 + 1.799802643848481e+00 + 1.800000000000000e+00 + -3.699443754152179e-03 +875 8.504999999999913e-09 + 6.840450761675129e-01 + 1.799784855786503e+00 + 1.800000000000000e+00 + -3.772543175962524e-03 +876 8.514999999999913e-09 + 6.252664740339908e-01 + 1.799839304204770e+00 + 1.800000000000000e+00 + -3.837634540717333e-03 +877 8.524999999999913e-09 + 5.743081152627729e-01 + 1.799827616184447e+00 + 1.800000000000000e+00 + -3.862658102455385e-03 +878 8.534999999999912e-09 + 5.313791900318705e-01 + 1.799876484236979e+00 + 1.800000000000000e+00 + -3.851443490224261e-03 +879 8.544999999999912e-09 + 4.960954573001731e-01 + 1.799868961221839e+00 + 1.800000000000000e+00 + -3.793571865639651e-03 +880 8.554999999999912e-09 + 4.677133302900046e-01 + 1.799900668650273e+00 + 1.800000000000000e+00 + -3.741423526775370e-03 +881 8.564999999999912e-09 + 4.450121190330847e-01 + 1.799856687389750e+00 + 1.800000000000000e+00 + -3.692981135149745e-03 +882 8.574999999999911e-09 + 4.268837785028602e-01 + 1.799869235097188e+00 + 1.800000000000000e+00 + -3.605911051649261e-03 +883 8.584999999999911e-09 + 4.125807164716973e-01 + 1.799864082383579e+00 + 1.800000000000000e+00 + -3.550858150519853e-03 +884 8.594999999999911e-09 + 4.012700210584297e-01 + 1.799820769316992e+00 + 1.800000000000000e+00 + -3.563432067990422e-03 +885 8.604999999999911e-09 + 3.922074760816678e-01 + 1.799720213895065e+00 + 1.800000000000000e+00 + -3.611118648634544e-03 +886 8.614999999999910e-09 + 3.848992834884600e-01 + 1.799714980628878e+00 + 1.800000000000000e+00 + -3.688272219368992e-03 +887 8.624999999999910e-09 + 3.787642288287915e-01 + 1.799738008773877e+00 + 1.800000000000000e+00 + -3.760140913300280e-03 +888 8.634999999999910e-09 + 3.734985944173550e-01 + 1.799858389773720e+00 + 1.800000000000000e+00 + -3.830625703489264e-03 +889 8.644999999999910e-09 + 3.688200740981037e-01 + 1.800023180822107e+00 + 1.800000000000000e+00 + -3.859975655615685e-03 +890 8.654999999999909e-09 + 3.645241520113389e-01 + 1.800347690227201e+00 + 1.800000000000000e+00 + -3.857758298269177e-03 +891 8.664999999999909e-09 + 3.603748170110970e-01 + 1.800928025757139e+00 + 1.800000000000000e+00 + -3.802478895953915e-03 +892 8.674999999999909e-09 + 3.561824880006128e-01 + 1.802079986286567e+00 + 1.800000000000000e+00 + -3.749503243391141e-03 +893 8.684999999999909e-09 + 3.521343287151378e-01 + 1.803962222300370e+00 + 1.800000000000000e+00 + -3.701737344510079e-03 +894 8.694999999999908e-09 + 3.487680826576087e-01 + 1.804942283632717e+00 + 1.800000000000000e+00 + -3.621187521651698e-03 +895 8.704999999999908e-09 + 3.469728545993038e-01 + 1.805030094524057e+00 + 1.800000000000000e+00 + -3.553513802486132e-03 +896 8.714999999999908e-09 + 3.482768708192094e-01 + 1.804604613365970e+00 + 1.800000000000000e+00 + -3.559448726642547e-03 +897 8.724999999999908e-09 + 3.556408736125455e-01 + 1.803667480338474e+00 + 1.800000000000000e+00 + -3.600464432020731e-03 +898 8.734999999999907e-09 + 3.737602511594268e-01 + 1.802914445219111e+00 + 1.800000000000000e+00 + -3.676717868575621e-03 +899 8.744999999999907e-09 + 4.104517493403571e-01 + 1.802492028113995e+00 + 1.800000000000000e+00 + -3.747977698660070e-03 +900 8.754999999999907e-09 + 4.811852304677576e-01 + 1.802676933701639e+00 + 1.800000000000000e+00 + -3.822277062726788e-03 +901 8.764999999999907e-09 + 6.113439171990976e-01 + 1.803518605091036e+00 + 1.800000000000000e+00 + -3.856821733828770e-03 +902 8.774999999999907e-09 + 8.132305228413454e-01 + 1.805401892483439e+00 + 1.800000000000000e+00 + -3.862355198346891e-03 +903 8.784999999999906e-09 + 1.063975211809937e+00 + 1.808670990594606e+00 + 1.800000000000000e+00 + -3.811782749305256e-03 +904 8.794999999999906e-09 + 1.313839904682745e+00 + 1.812455221225884e+00 + 1.800000000000000e+00 + -3.757774682805373e-03 +905 8.804999999999906e-09 + 1.504049479045964e+00 + 1.814488042537665e+00 + 1.800000000000000e+00 + -3.709406372617163e-03 +906 8.814999999999906e-09 + 1.622658516368424e+00 + 1.813411741372157e+00 + 1.800000000000000e+00 + -3.636775288599385e-03 +907 8.824999999999905e-09 + 1.696341800267996e+00 + 1.805914551376510e+00 + 1.800000000000000e+00 + -3.558297710777434e-03 +908 8.834999999999905e-09 + 1.741629050105261e+00 + 1.785222143790528e+00 + 1.800000000000000e+00 + -3.556052242520707e-03 +909 8.844999999999905e-09 + 1.767866578460430e+00 + 1.745283024103693e+00 + 1.800000000000000e+00 + -3.590975929108480e-03 +910 8.854999999999905e-09 + 1.782315210165268e+00 + 1.685229247048450e+00 + 1.800000000000000e+00 + -3.664678358617373e-03 +911 8.864999999999904e-09 + 1.790220279737267e+00 + 1.609064313597350e+00 + 1.800000000000000e+00 + -3.736268121856976e-03 +912 8.874999999999904e-09 + 1.794485120053162e+00 + 1.522948835817144e+00 + 1.800000000000000e+00 + -3.812540467282197e-03 +913 8.884999999999904e-09 + 1.796860736268252e+00 + 1.432807712059214e+00 + 1.800000000000000e+00 + -3.853339563269583e-03 +914 8.894999999999904e-09 + 1.798161711294248e+00 + 1.343281304846136e+00 + 1.800000000000000e+00 + -3.865084268837809e-03 +915 8.904999999999903e-09 + 1.798955007358190e+00 + 1.257619630323223e+00 + 1.800000000000000e+00 + -3.821387971976110e-03 +916 8.914999999999903e-09 + 1.799376766695249e+00 + 1.177728929744705e+00 + 1.800000000000000e+00 + -3.766013352614470e-03 +917 8.924999999999903e-09 + 1.799576201836625e+00 + 1.105080089840680e+00 + 1.800000000000000e+00 + -3.716514381653561e-03 +918 8.934999999999903e-09 + 1.799637528199423e+00 + 1.042010183207054e+00 + 1.800000000000000e+00 + -3.651936043875186e-03 +919 8.944999999999902e-09 + 1.799739892682123e+00 + 9.868837597231834e-01 + 1.800000000000000e+00 + -3.565430978122639e-03 +920 8.954999999999902e-09 + 1.799762364252806e+00 + 9.292183188837423e-01 + 1.800000000000000e+00 + -3.553262441357589e-03 +921 8.964999999999902e-09 + 1.799771845766856e+00 + 8.631411259282306e-01 + 1.800000000000000e+00 + -3.582742956286934e-03 +922 8.974999999999902e-09 + 1.799768180909014e+00 + 7.931714449461122e-01 + 1.800000000000000e+00 + -3.652277418357091e-03 +923 8.984999999999901e-09 + 1.799796314037403e+00 + 7.245787660610457e-01 + 1.800000000000000e+00 + -3.725003001916233e-03 +924 8.994999999999901e-09 + 1.799804082873315e+00 + 6.613071035780448e-01 + 1.800000000000000e+00 + -3.801608944557347e-03 +925 9.004999999999901e-09 + 1.799836263079134e+00 + 6.053684529530245e-01 + 1.800000000000000e+00 + -3.849445603711833e-03 +926 9.014999999999901e-09 + 1.799844391682947e+00 + 5.574167147728353e-01 + 1.800000000000000e+00 + -3.866054289038189e-03 +927 9.024999999999900e-09 + 1.799875393654878e+00 + 5.173873494648659e-01 + 1.800000000000000e+00 + -3.830974354037582e-03 +928 9.034999999999900e-09 + 1.799881803010616e+00 + 4.847945451850371e-01 + 1.800000000000000e+00 + -3.774181005632350e-03 +929 9.044999999999900e-09 + 1.799889280700700e+00 + 4.586667986630529e-01 + 1.800000000000000e+00 + -3.723463954943875e-03 +930 9.054999999999900e-09 + 1.799853549079933e+00 + 4.377731292311580e-01 + 1.800000000000000e+00 + -3.666114179550450e-03 +931 9.064999999999900e-09 + 1.799871915005767e+00 + 4.211685404833174e-01 + 1.800000000000000e+00 + -3.574867007441315e-03 +932 9.074999999999899e-09 + 1.799857761661958e+00 + 4.080707242260509e-01 + 1.800000000000000e+00 + -3.551315695014435e-03 +933 9.084999999999899e-09 + 1.799779166704939e+00 + 3.976601005519758e-01 + 1.800000000000000e+00 + -3.575674770419988e-03 +934 9.094999999999899e-09 + 1.799710304814931e+00 + 3.893207123059073e-01 + 1.800000000000000e+00 + -3.639803840069240e-03 +935 9.104999999999899e-09 + 1.799716833331864e+00 + 3.824979933466062e-01 + 1.800000000000000e+00 + -3.714000138103753e-03 +936 9.114999999999898e-09 + 1.799774108987773e+00 + 3.767212795748852e-01 + 1.800000000000000e+00 + -3.789839389839270e-03 +937 9.124999999999898e-09 + 1.799910720219443e+00 + 3.717002166050615e-01 + 1.800000000000000e+00 + -3.844900920814661e-03 +938 9.134999999999898e-09 + 1.800121389642607e+00 + 3.671898983479271e-01 + 1.800000000000000e+00 + -3.865562494510497e-03 +939 9.144999999999898e-09 + 1.800519877257470e+00 + 3.629762340810020e-01 + 1.800000000000000e+00 + -3.840083759287358e-03 +940 9.154999999999897e-09 + 1.801274185491967e+00 + 3.588243420715743e-01 + 1.800000000000000e+00 + -3.782402614607490e-03 +941 9.164999999999897e-09 + 1.802758439750060e+00 + 3.546337896713977e-01 + 1.800000000000000e+00 + -3.730570103812070e-03 +942 9.174999999999897e-09 + 1.804452492106991e+00 + 3.507629442225387e-01 + 1.800000000000000e+00 + -3.678843940511085e-03 +943 9.184999999999897e-09 + 1.805072569890987e+00 + 3.478614321091882e-01 + 1.800000000000000e+00 + -3.586490783190141e-03 +944 9.194999999999896e-09 + 1.804929791397346e+00 + 3.469704687520926e-01 + 1.800000000000000e+00 + -3.550426039522225e-03 +945 9.204999999999896e-09 + 1.804287347042798e+00 + 3.500971797700837e-01 + 1.800000000000000e+00 + -3.569662158781715e-03 +946 9.214999999999896e-09 + 1.803344686944222e+00 + 3.608093016497970e-01 + 1.800000000000000e+00 + -3.627549171509216e-03 +947 9.224999999999896e-09 + 1.802706295606721e+00 + 3.846341168977493e-01 + 1.800000000000000e+00 + -3.703048729319982e-03 +948 9.234999999999895e-09 + 1.802485226635777e+00 + 4.316189564967721e-01 + 1.800000000000000e+00 + -3.777593963620185e-03 +949 9.244999999999895e-09 + 1.802898780504408e+00 + 5.211297914200712e-01 + 1.800000000000000e+00 + -3.839452978931608e-03 +950 9.254999999999895e-09 + 1.804076420688786e+00 + 6.788581474221238e-01 + 1.800000000000000e+00 + -3.863945611627628e-03 +951 9.264999999999895e-09 + 1.806443495182939e+00 + 9.026982348072821e-01 + 1.800000000000000e+00 + -3.848265639019654e-03 +952 9.274999999999894e-09 + 1.810152168873304e+00 + 1.160622648126580e+00 + 1.800000000000000e+00 + -3.790839190709346e-03 +953 9.284999999999894e-09 + 1.813504115270686e+00 + 1.393739656485089e+00 + 1.800000000000000e+00 + -3.738068886628926e-03 +954 9.294999999999894e-09 + 1.814540680583394e+00 + 1.555226700021719e+00 + 1.800000000000000e+00 + -3.689829423496513e-03 +955 9.304999999999894e-09 + 1.811677242454548e+00 + 1.654162816402496e+00 + 1.800000000000000e+00 + -3.600044269388571e-03 +956 9.314999999999893e-09 + 1.800160212954404e+00 + 1.715963661494221e+00 + 1.800000000000000e+00 + -3.550803095732277e-03 +957 9.324999999999893e-09 + 1.772776549916677e+00 + 1.753209482157509e+00 + 1.800000000000000e+00 + -3.564616320638671e-03 +958 9.334999999999893e-09 + 1.725149361177692e+00 + 1.774267791446193e+00 + 1.800000000000000e+00 + -3.615763611746613e-03 +959 9.344999999999893e-09 + 1.658445792485421e+00 + 1.785855028585285e+00 + 1.800000000000000e+00 + -3.691972073535169e-03 +960 9.354999999999893e-09 + 1.577831694733731e+00 + 1.792089740658523e+00 + 1.800000000000000e+00 + -3.765177498564575e-03 +961 9.364999999999892e-09 + 1.489587415000527e+00 + 1.795563685697562e+00 + 1.800000000000000e+00 + -3.832900813371789e-03 +962 9.374999999999892e-09 + 1.399203924349876e+00 + 1.797404925941773e+00 + 1.800000000000000e+00 + -3.861498487430523e-03 +963 9.384999999999892e-09 + 1.310816722242079e+00 + 1.798531198831854e+00 + 1.800000000000000e+00 + -3.855146733860656e-03 +964 9.394999999999892e-09 + 1.227137596059235e+00 + 1.799121617374273e+00 + 1.800000000000000e+00 + -3.799603815057325e-03 +965 9.404999999999891e-09 + 1.149727149667387e+00 + 1.799498927410152e+00 + 1.800000000000000e+00 + -3.746017025421854e-03 +966 9.414999999999891e-09 + 1.080376848085188e+00 + 1.799578286610426e+00 + 1.800000000000000e+00 + -3.699119458174076e-03 +967 9.424999999999891e-09 + 1.021013400973133e+00 + 1.799697713649633e+00 + 1.800000000000000e+00 + -3.614997772636210e-03 +968 9.434999999999891e-09 + 9.662915609177470e-01 + 1.799736385745548e+00 + 1.800000000000000e+00 + -3.552764907012864e-03 +969 9.444999999999890e-09 + 9.054796276928646e-01 + 1.799785241318621e+00 + 1.800000000000000e+00 + -3.560385782649943e-03 +970 9.454999999999890e-09 + 8.372210605757167e-01 + 1.799751500197458e+00 + 1.800000000000000e+00 + -3.604740368903372e-03 +971 9.464999999999890e-09 + 7.672410713335679e-01 + 1.799794170802611e+00 + 1.800000000000000e+00 + -3.680582792773502e-03 +972 9.474999999999890e-09 + 7.002457127224433e-01 + 1.799784121292487e+00 + 1.800000000000000e+00 + -3.752889627089827e-03 +973 9.484999999999889e-09 + 6.395803192256839e-01 + 1.799829774070006e+00 + 1.800000000000000e+00 + -3.825065941243032e-03 +974 9.494999999999889e-09 + 5.865714903139330e-01 + 1.799826813576674e+00 + 1.800000000000000e+00 + -3.858489900428274e-03 +975 9.504999999999889e-09 + 5.416134614803727e-01 + 1.799867328278279e+00 + 1.800000000000000e+00 + -3.860409991760394e-03 +976 9.514999999999889e-09 + 5.044219844688880e-01 + 1.799868284385942e+00 + 1.800000000000000e+00 + -3.808759202466521e-03 +977 9.524999999999888e-09 + 4.743845061378970e-01 + 1.799897458251430e+00 + 1.800000000000000e+00 + -3.754251579477183e-03 +978 9.534999999999888e-09 + 4.503454355997581e-01 + 1.799867987092157e+00 + 1.800000000000000e+00 + -3.707122810369462e-03 +979 9.544999999999888e-09 + 4.311229228394181e-01 + 1.799862626220865e+00 + 1.800000000000000e+00 + -3.630567661723739e-03 +980 9.554999999999888e-09 + 4.159263314749818e-01 + 1.799867672132868e+00 + 1.800000000000000e+00 + -3.556722449111435e-03 +981 9.564999999999887e-09 + 4.039282198833426e-01 + 1.799841738191298e+00 + 1.800000000000000e+00 + -3.556782404364527e-03 +982 9.574999999999887e-09 + 3.943350843786200e-01 + 1.799738736952564e+00 + 1.800000000000000e+00 + -3.594796634633858e-03 +983 9.584999999999887e-09 + 3.866400741176190e-01 + 1.799712619882836e+00 + 1.800000000000000e+00 + -3.668723568655657e-03 +984 9.594999999999887e-09 + 3.802387943929066e-01 + 1.799724056475034e+00 + 1.800000000000000e+00 + -3.740997925717178e-03 +985 9.604999999999886e-09 + 3.747806027807473e-01 + 1.799822807396835e+00 + 1.800000000000000e+00 + -3.815835841484791e-03 +986 9.614999999999886e-09 + 3.699714932078901e-01 + 1.799970841342867e+00 + 1.800000000000000e+00 + -3.855123630644302e-03 +987 9.624999999999886e-09 + 3.655996792235219e-01 + 1.800246656871880e+00 + 1.800000000000000e+00 + -3.863833794875911e-03 +988 9.634999999999886e-09 + 3.614352512818369e-01 + 1.800738321276500e+00 + 1.800000000000000e+00 + -3.818275722799368e-03 +989 9.644999999999886e-09 + 3.572597342819079e-01 + 1.801710418273697e+00 + 1.800000000000000e+00 + -3.762521291527779e-03 +990 9.654999999999885e-09 + 3.531295758559395e-01 + 1.803501811831912e+00 + 1.800000000000000e+00 + -3.714381366052621e-03 +991 9.664999999999885e-09 + 3.495205820643004e-01 + 1.804777050284127e+00 + 1.800000000000000e+00 + -3.645960267333023e-03 +992 9.674999999999885e-09 + 3.472212157009838e-01 + 1.805073248527405e+00 + 1.800000000000000e+00 + -3.562982848552509e-03 +993 9.684999999999885e-09 + 3.475104649985920e-01 + 1.804769292085536e+00 + 1.800000000000000e+00 + -3.553748765152315e-03 +994 9.694999999999884e-09 + 3.529488309263130e-01 + 1.803919499015156e+00 + 1.800000000000000e+00 + -3.586100723171608e-03 +995 9.704999999999884e-09 + 3.677493767218779e-01 + 1.803077502063399e+00 + 1.800000000000000e+00 + -3.656430695674984e-03 +996 9.714999999999884e-09 + 3.986070336069286e-01 + 1.802553089141485e+00 + 1.800000000000000e+00 + -3.729580754093715e-03 +997 9.724999999999884e-09 + 4.585522805702891e-01 + 1.802571199095944e+00 + 1.800000000000000e+00 + -3.805312508341056e-03 +998 9.734999999999883e-09 + 5.708573479634880e-01 + 1.803222517165982e+00 + 1.800000000000000e+00 + -3.851401883861592e-03 +999 9.744999999999883e-09 + 7.556161387100679e-01 + 1.804799502106518e+00 + 1.800000000000000e+00 + -3.865428995775185e-03 +1000 9.754999999999883e-09 + 9.972451798214613e-01 + 1.807698539536773e+00 + 1.800000000000000e+00 + -3.827915725057620e-03 +1001 9.764999999999883e-09 + 1.253612638825992e+00 + 1.811576121857806e+00 + 1.800000000000000e+00 + -3.770709451601662e-03 +1002 9.774999999999882e-09 + 1.462912149374369e+00 + 1.814215660292627e+00 + 1.800000000000000e+00 + -3.721347077567545e-03 +1003 9.784999999999882e-09 + 1.597628006919593e+00 + 1.814097073473774e+00 + 1.800000000000000e+00 + -3.660565538755656e-03 +1004 9.794999999999882e-09 + 1.680647707059082e+00 + 1.808783565810438e+00 + 1.800000000000000e+00 + -3.571569444836548e-03 +1005 9.804999999999882e-09 + 1.732187386757369e+00 + 1.792185875450270e+00 + 1.800000000000000e+00 + -3.551468674499110e-03 +1006 9.814999999999881e-09 + 1.762552040136713e+00 + 1.757489671582547e+00 + 1.800000000000000e+00 + -3.578613656957916e-03 +1007 9.824999999999881e-09 + 1.779388273152736e+00 + 1.702362082328848e+00 + 1.800000000000000e+00 + -3.643949615957607e-03 +1008 9.834999999999881e-09 + 1.788655412603148e+00 + 1.629768346497078e+00 + 1.800000000000000e+00 + -3.718504739736928e-03 +1009 9.844999999999881e-09 + 1.793602315118351e+00 + 1.545596888853422e+00 + 1.800000000000000e+00 + -3.793809938693609e-03 +1010 9.854999999999880e-09 + 1.796403820567773e+00 + 1.455990497298658e+00 + 1.800000000000000e+00 + -3.847127124741005e-03 +1011 9.864999999999880e-09 + 1.797870258315702e+00 + 1.365937769931679e+00 + 1.800000000000000e+00 + -3.865439444310338e-03 +1012 9.874999999999880e-09 + 1.798811772895998e+00 + 1.279059335213992e+00 + 1.800000000000000e+00 + -3.837255050710325e-03 +1013 9.884999999999880e-09 + 1.799274790285632e+00 + 1.197564538397172e+00 + 1.800000000000000e+00 + -3.778893489391804e-03 +1014 9.894999999999879e-09 + 1.799563790486031e+00 + 1.122868477469205e+00 + 1.800000000000000e+00 + -3.728360107415159e-03 +1015 9.904999999999879e-09 + 1.799601698537060e+00 + 1.057173657154200e+00 + 1.800000000000000e+00 + -3.673878754295498e-03 +1016 9.914999999999879e-09 + 1.799734460670171e+00 + 1.000784939190727e+00 + 1.800000000000000e+00 + -3.582403453133977e-03 +1017 9.924999999999879e-09 + 1.799745515966393e+00 + 9.447890494948178e-01 + 1.800000000000000e+00 + -3.550167328649962e-03 +1018 9.934999999999879e-09 + 1.799785314997641e+00 + 8.806882225936731e-01 + 1.800000000000000e+00 + -3.572219018265160e-03 +1019 9.944999999999878e-09 + 1.799752911383298e+00 + 8.111327420444630e-01 + 1.800000000000000e+00 + -3.631585977284085e-03 +1020 9.954999999999878e-09 + 1.799802749409491e+00 + 7.417671585474621e-01 + 1.800000000000000e+00 + -3.707554149460135e-03 +1021 9.964999999999878e-09 + 1.799788804609961e+00 + 6.768483302959182e-01 + 1.800000000000000e+00 + -3.781704471508876e-03 +1022 9.974999999999878e-09 + 1.799840281588190e+00 + 6.189443107902098e-01 + 1.800000000000000e+00 + -3.842036938535607e-03 +1023 9.984999999999877e-09 + 1.799831055657256e+00 + 5.689220360738784e-01 + 1.800000000000000e+00 + -3.864203744064905e-03 +1024 9.994999999999877e-09 + 1.799877807385038e+00 + 5.269038674809134e-01 + 1.800000000000000e+00 + -3.845825262784571e-03 +1025 1.000000000000000e-08 + 1.799864128299574e+00 + 5.087865049709742e-01 + 1.800000000000000e+00 + -3.817470741212248e-03
diff --git a/xschem/vco_2-4GHz/tests/spiceinterface_temp.spice b/xschem/vco_2-4GHz/tests/spiceinterface_temp.spice new file mode 100644 index 0000000..51e4fbe --- /dev/null +++ b/xschem/vco_2-4GHz/tests/spiceinterface_temp.spice
@@ -0,0 +1,87 @@ +**.subckt vco_2-4GHz_tb +V1 vctl 0 vctl +Vdd net1 0 vdd +xvco net1 Ip In Qp Qn NCp NCn FBp FBn vctl 0 vco_2-4GHz +**** begin user architecture code + + +.param temp=125.000000 +.temp 125.000000 + +.save v(ip) v(in) v(vctl) i(vdd) + +.include sky130_fd_pr/cells/rf_pfet_01v8_lvt/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p35.spice +.lib sky130_fd_pr/models/sky130.lib.spice lh +.tran 0.01n 10n uic +.param vdd=1.800000 +.param vctl=1.800000 + + +**** end user architecture code +**.ends + +* expanding symbol: vco_2-4GHz/vco_2-4GHz.sym # of pins=11 + +.subckt vco_2-4GHz VDD ph1_p ph1_n ph2_p ph2_n ph3_p ph3_n ph4_p ph4_n CTL GND +*.ipin CTL +*.iopin VDD +*.iopin GND +*.opin ph3_p +*.opin ph3_n +*.opin ph4_p +*.opin ph4_n +*.opin ph2_p +*.opin ph2_n +*.opin ph1_p +*.opin ph1_n +x1 VDD net2 net1 net7 net8 GND CTL vco_2-4Ghz_delaycell +x2 VDD net4 net3 net2 net1 GND CTL vco_2-4Ghz_delaycell +x3 VDD net6 net5 net4 net3 GND CTL vco_2-4Ghz_delaycell +x4 VDD net8 net7 net6 net5 GND CTL vco_2-4Ghz_delaycell +x5 VDD ph1_p ph1_n net1 net2 GND rf_bufferdiff +x6 VDD ph2_p ph2_n net3 net4 GND rf_bufferdiff +x7 VDD ph3_p ph3_n net5 net6 GND rf_bufferdiff +x8 VDD ph4_p ph4_n net7 net8 GND rf_bufferdiff +I0 GND GND pulse(1000n 0 0 400p 100p 100p 10 20 0) +.ends + + +* expanding symbol: vco_2-4GHz_delaycell/vco_2-4Ghz_delaycell.sym # of pins=7 + +.subckt vco_2-4Ghz_delaycell VDD OUTn OUTp Pn Pp GND CTL +*.ipin Pp +*.ipin Pn +*.opin OUTn +*.opin OUTp +*.iopin VDD +*.iopin GND +*.ipin CTL +XXMprimpos OUTp Pp GND GND sky130_fd_pr__rf_nfet_01v8_bM04W5p00L0p15 m=3 +XXMcrossneg OUTn OUTp GND GND sky130_fd_pr__rf_nfet_01v8_bM02W3p00L0p15 m=1 +XXMctlneg OUTn CTL VDD VDD sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p35 m=1 +XXMctlpos OUTp CTL VDD VDD sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p35 m=1 +XXMcrosspos OUTp OUTn GND GND sky130_fd_pr__rf_nfet_01v8_bM02W3p00L0p15 m=1 +XXMprimneg OUTn Pn GND GND sky130_fd_pr__rf_nfet_01v8_bM04W5p00L0p15 m=3 +XXMctlpos1 net2 GND VDD VDD sky130_fd_pr__rf_pfet_01v8_bM02W5p00L0p15 m=1 +XXMctlneg1 net1 GND VDD VDD sky130_fd_pr__rf_pfet_01v8_bM02W5p00L0p15 m=1 +XXMctlpos2 OUTp GND net2 VDD sky130_fd_pr__rf_pfet_01v8_bM02W5p00L0p15 m=1 +XXMctlneg2 OUTn GND net1 VDD sky130_fd_pr__rf_pfet_01v8_bM02W5p00L0p15 m=1 +.ends + + +* expanding symbol: rf_bufferdiff/rf_bufferdiff.sym # of pins=6 + +.subckt rf_bufferdiff vdd out_n out_p in_p in_n vss +*.iopin vdd +*.iopin vss +*.ipin in_p +*.ipin in_n +*.opin out_n +*.opin out_p +XXMdiffp out_n in_p vss vss sky130_fd_pr__rf_nfet_01v8_bM02W1p65L0p15 m=1 +XXMdiffn out_p in_n vss vss sky130_fd_pr__rf_nfet_01v8_bM02W1p65L0p15 m=1 +XRn vdd out_n vss sky130_fd_pr__res_xhigh_po_2p85 m=1 +XRp vdd out_p vss sky130_fd_pr__res_xhigh_po_2p85 m=1 +.ends + +.end
diff --git a/xschem/vco_2-4GHz/tests/transfer_model.ods b/xschem/vco_2-4GHz/tests/transfer_model.ods new file mode 100644 index 0000000..78c3264 --- /dev/null +++ b/xschem/vco_2-4GHz/tests/transfer_model.ods Binary files differ
diff --git a/xschem/vco_2-4GHz/tests/vco_2-4GHz_behavourial_square_tb.sch b/xschem/vco_2-4GHz/tests/vco_2-4GHz_behavourial_square_tb.sch new file mode 100644 index 0000000..bded039 --- /dev/null +++ b/xschem/vco_2-4GHz/tests/vco_2-4GHz_behavourial_square_tb.sch
@@ -0,0 +1,34 @@ +v {xschem version=2.9.7 file_version=1.1} +G {} +V {} +S {} +E {} +N 100 -40 120 -40 {lab=Ip} +N 100 -20 120 -20 {lab=In} +N 100 20 120 20 {lab=Qp} +N 100 40 120 40 {lab=Qn} +N 0 -120 -0 -80 {lab=#net1} +N -290 -120 -0 -120 {lab=#net1} +N -290 -120 -290 -30 {lab=#net1} +N -290 30 -290 130 {lab=0} +N -290 130 -0 130 {lab=0} +N -0 80 0 130 {lab=0} +N -170 100 -170 130 {lab=0} +N -170 -0 -170 40 {lab=#net2} +N -170 -0 -100 -0 {lab=#net2} +C {lab_wire.sym} 100 -40 0 1 {name=l1 sig_type=std_logic lab=Ip} +C {lab_wire.sym} 100 -20 0 1 {name=l2 sig_type=std_logic lab=In} +C {lab_wire.sym} 100 20 0 1 {name=l3 sig_type=std_logic lab=Qp} +C {lab_wire.sym} 100 40 0 1 {name=l4 sig_type=std_logic lab=Qn} +C {vsource.sym} -170 70 0 0 {name=V1 value=0.9} +C {vsource.sym} -290 0 0 0 {name=V2 value=1.8} +C {gnd.sym} -290 130 0 0 {name=l5 lab=0} +C {code.sym} 80 -250 0 0 {name=STIMULI +tclcommand="xschem edit_vi_prop" +value=" +.include "xh018_ng/xh018.lib" +.temp 30 +.param vctl=0.9 +.tran 0.1e-9 1e-6 uic +"} +C {vco_quad/vco_quad_behavourial_square.sym} 0 0 0 0 {}
diff --git a/xschem/vco_2-4GHz/tests/vco_2-4GHz_behavourial_tb.sch b/xschem/vco_2-4GHz/tests/vco_2-4GHz_behavourial_tb.sch new file mode 100644 index 0000000..8f71242 --- /dev/null +++ b/xschem/vco_2-4GHz/tests/vco_2-4GHz_behavourial_tb.sch
@@ -0,0 +1,34 @@ +v {xschem version=2.9.7 file_version=1.1} +G {} +V {} +S {} +E {} +N 100 -40 120 -40 {lab=Ip} +N 100 -20 120 -20 {lab=In} +N 100 20 120 20 {lab=Qp} +N 100 40 120 40 {lab=Qn} +N 0 -120 -0 -80 {lab=#net1} +N -290 -120 -0 -120 {lab=#net1} +N -290 -120 -290 -30 {lab=#net1} +N -290 30 -290 130 {lab=0} +N -290 130 -0 130 {lab=0} +N -0 80 0 130 {lab=0} +N -170 100 -170 130 {lab=0} +N -170 -0 -170 40 {lab=#net2} +N -170 -0 -100 -0 {lab=#net2} +C {vco_quad/vco_quad_behavourial.sym} 0 0 0 0 {name=xvco} +C {lab_wire.sym} 100 -40 0 1 {name=l1 sig_type=std_logic lab=Ip} +C {lab_wire.sym} 100 -20 0 1 {name=l2 sig_type=std_logic lab=In} +C {lab_wire.sym} 100 20 0 1 {name=l3 sig_type=std_logic lab=Qp} +C {lab_wire.sym} 100 40 0 1 {name=l4 sig_type=std_logic lab=Qn} +C {vsource.sym} -170 70 0 0 {name=V1 value=0.0} +C {vsource.sym} -290 0 0 0 {name=V2 value=1.8} +C {gnd.sym} -290 130 0 0 {name=l5 lab=0} +C {code.sym} 80 -250 0 0 {name=STIMULI +tclcommand="xschem edit_vi_prop" +value=" +.include "xh018_ng/xh018.lib" +.temp 30 +.param vctl=0.9 +.tran 0.1e-9 1e-6 uic +"}
diff --git a/xschem/vco_2-4GHz/tests/vco_2-4GHz_corners.hdf5 b/xschem/vco_2-4GHz/tests/vco_2-4GHz_corners.hdf5 new file mode 100644 index 0000000..588ae17 --- /dev/null +++ b/xschem/vco_2-4GHz/tests/vco_2-4GHz_corners.hdf5 Binary files differ
diff --git a/xschem/vco_2-4GHz/tests/vco_2-4GHz_tb.sch b/xschem/vco_2-4GHz/tests/vco_2-4GHz_tb.sch new file mode 100644 index 0000000..20eb662 --- /dev/null +++ b/xschem/vco_2-4GHz/tests/vco_2-4GHz_tb.sch
@@ -0,0 +1,142 @@ +v {xschem version=2.9.8 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N -440 -600 -440 -300 {lab=#net1} +N -440 -240 -440 0 {lab=0} +N -130 -0 330 0 {lab=0} +N -360 -270 -360 -150 {lab=vctl} +N -360 -270 -260 -270 {lab=vctl} +N -360 -90 -360 0 {lab=0} +N 0 -290 80 -290 {lab=Qn} +N 0 -310 80 -310 {lab=Qp} +N 0 -190 230 -190 {lab=FBn} +N 0 -210 230 -210 {lab=FBp} +N 330 -140 330 0 {lab=0} +N 430 -190 440 -190 {lab=0} +N 440 -190 440 0 {lab=0} +N 330 0 440 0 {lab=0} +N 430 -210 440 -210 {lab=0} +N 440 -210 440 -190 {lab=0} +N -130 -150 -130 -0 {lab=0} +N 0 -340 80 -340 {lab=In} +N 0 -360 80 -360 {lab=Ip} +N -440 -600 -130 -600 {lab=#net1} +N -440 0 -360 0 {lab=0} +N -360 0 -130 -0 {lab=0} +N 0 -240 80 -240 {lab=NCn} +N 0 -260 80 -260 {lab=NCp} +N 330 -600 330 -260 {lab=#net1} +N -130 -600 330 -600 {lab=#net1} +N -130 -470 -130 -400 { lab=#net2} +N -130 -500 -110 -500 { lab=#net1} +N -110 -600 -110 -500 { lab=#net1} +N -130 -600 -130 -530 { lab=#net1} +N -590 -500 -570 -500 { lab=#net1} +N -570 -600 -570 -500 { lab=#net1} +N -590 -600 -590 -530 { lab=#net1} +N -590 -600 -570 -600 { lab=#net1} +N -570 -600 -430 -600 { lab=#net1} +N -590 -470 -590 -390 { lab=#net3} +N -590 -330 -590 -0 { lab=0} +N -590 -0 -440 -0 { lab=0} +N 80 -310 160 -310 { lab=Qp} +N 160 -360 160 -310 { lab=Qp} +N 160 -360 220 -360 { lab=Qp} +N 220 -360 220 -330 { lab=Qp} +N 80 -290 160 -290 { lab=Qn} +N 160 -290 160 -240 { lab=Qn} +N 160 -240 220 -240 { lab=Qn} +N 220 -270 220 -240 { lab=Qn} +C {vsource.sym} -360 -120 0 0 {name=V1 value="vctl"} +C {vsource.sym} -440 -270 0 0 {name=Vdd value=vdd} +C {lab_wire.sym} 40 -290 0 1 {name=l1 sig_type=std_logic lab=Qn} +C {lab_wire.sym} 40 -310 0 1 {name=l2 sig_type=std_logic lab=Qp} +C {lab_wire.sym} 40 -190 0 1 {name=l3 sig_type=std_logic lab=FBn} +C {lab_wire.sym} 40 -210 0 1 {name=l4 sig_type=std_logic lab=FBp} +C {lab_wire.sym} -440 0 0 1 {name=l5 sig_type=std_logic lab=0} +C {code.sym} 370 -420 0 0 {name=STIMULI +tclcommand="xschem edit_vi_prop" +value=" +.param temp=27 +.temp 27 + +*.save v(ip) v(in) v(vctl) i(vdd) + +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W5p00L0p15.spice +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W3p00L0p15.spice +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15.spice + +.include sky130_fd_pr/cells/rf_pfet_01v8_lvt/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p35.spice +.include sky130_fd_pr/cells/rf_pfet_01v8_lvt/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W3p00L0p35.spice +.include sky130_fd_pr/cells/rf_pfet_01v8_lvt/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p35.spice +.include sky130_fd_pr/cells/rf_pfet_01v8_lvt/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p50.spice +.include sky130_fd_pr/cells/rf_pfet_01v8_lvt/sky130_fd_pr__rf_pfet_01v8_lvt_aM02W3p00L0p35.spice +.include sky130_fd_pr/cells/rf_pfet_01v8_lvt/sky130_fd_pr__rf_pfet_01v8_lvt_aM02W5p00L0p35.spice + +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aM02W1p65L0p15.spice +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aM02W3p00L0p15.spice +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aM02W5p00L0p15.spice +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aM02W3p00L0p25.spice +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aM02W5p00L0p25.spice +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aF04W2p00L0p15.spice +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aF04W3p00L0p15.spice +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aM02W1p65L0p25.spice + +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aF06W3p00L0p15.spice +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aF06W1p65L0p15.spice +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aF04W1p65L0p15.spice +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aF02W1p65L0p15.spice +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aF02W0p84L0p15.spice + + +.lib sky130_fd_pr/models/sky130.lib.spice tt +*.include sky130_fd_pr/models/corners/tt.spice + + +.tran 0.01n 10n uic +.param vdd=1.8 +.param vctl=0.2 +"} +C {vco_2-4GHz/vco_2-4GHz.sym} -130 -270 0 0 {name=xvco} +C {lab_wire.sym} 40 -340 0 1 {name=l8 sig_type=std_logic lab=In} +C {lab_wire.sym} 40 -360 0 1 {name=l9 sig_type=std_logic lab=Ip} +C {noconn.sym} 80 -360 2 0 {name=l10} +C {noconn.sym} 80 -340 2 0 {name=l11} +C {lab_wire.sym} 40 -240 0 1 {name=l12 sig_type=std_logic lab=NCn} +C {lab_wire.sym} 40 -260 0 1 {name=l13 sig_type=std_logic lab=NCp} +C {noconn.sym} 80 -260 2 0 {name=l14} +C {noconn.sym} 80 -240 2 0 {name=l15} +C {lab_wire.sym} -360 -270 0 1 {name=l16 sig_type=std_logic lab=vctl} +C {sky130_fd_pr/pfet_01v8_lvt.sym} -150 -500 0 0 {name=M1 +L=0.35 +W=7 +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=64 +model=pfet_01v8_lvt +spiceprefix=X +} +C {sky130_fd_pr/pfet_01v8_lvt.sym} -610 -500 0 0 {name=M2 +L=0.35 +W=7 +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=64 +model=pfet_01v8_lvt +spiceprefix=X +} +C {ammeter.sym} -590 -360 0 0 {name=Vmeas} +C {lab_wire.sym} -630 -500 0 0 {name=l17 sig_type=std_logic lab=0} +C {lab_wire.sym} -170 -500 0 0 {name=l18 sig_type=std_logic lab=0} +C {res.sym} 220 -300 0 0 {name=R1 +value=100 +footprint=1206 +device=resistor +m=1}
diff --git a/xschem/vco_2-4GHz/vco_2-4GHz.sch b/xschem/vco_2-4GHz/vco_2-4GHz.sch new file mode 100644 index 0000000..6890061 --- /dev/null +++ b/xschem/vco_2-4GHz/vco_2-4GHz.sch
@@ -0,0 +1,125 @@ +v {xschem version=2.9.8 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 340 -150 470 -150 {lab=1p} +N 360 -130 470 -130 {lab=1n} +N 695 -150 830 -150 {lab=2p} +N 715 -130 830 -130 {lab=2n} +N 1055 -150 1190 -150 {lab=3p} +N 1075 -130 1190 -130 {lab=4n} +N 1400 -150 1450 -150 {lab=4n} +N 1450 -150 1470 -130 {lab=4n} +N 1420 -130 1450 -130 {lab=4p} +N 1450 -130 1470 -150 {lab=4p} +N 1470 -130 1490 -130 {lab=4n} +N 1490 -130 1490 -20 {lab=4n} +N 60 -20 1490 -20 {lab=4n} +N 60 -130 110 -130 {lab=4n} +N 1470 -150 1490 -150 {lab=4p} +N 1490 -260 1490 -150 {lab=4p} +N 60 -150 110 -150 {lab=4p} +N 60 -260 1490 -260 {lab=4p} +N 170 -280 170 -200 {lab=CTL} +N 540 -80 540 0 {lab=GND} +N 900 -80 900 0 {lab=GND} +N 1260 -80 1260 0 {lab=GND} +N 450 0 540 0 {lab=GND} +N 180 -80 180 0 {lab=GND} +N 810 0 900 0 {lab=GND} +N 1170 -0 1260 0 {lab=GND} +N 170 -280 530 -280 {lab=CTL} +N 530 -280 890 -280 {lab=CTL} +N 890 -280 1250 -280 {lab=CTL} +N 450 -700 560 -700 {lab=VDD} +N 810 -700 920 -700 {lab=VDD} +N 1170 -700 1280 -700 {lab=VDD} +N 530 -280 530 -200 {lab=CTL} +N 560 -700 560 -200 {lab=VDD} +N 890 -280 890 -200 {lab=CTL} +N 920 -700 920 -200 {lab=VDD} +N 1250 -280 1250 -200 {lab=CTL} +N 1280 -700 1280 -200 {lab=VDD} +N 0 -280 170 -280 {lab=CTL} +N 0 -700 200 -700 {lab=VDD} +N 1400 -340 1400 -150 {lab=4n} +N 1075 -420 1075 -130 {lab=4n} +N 1055 -440 1055 -150 {lab=3p} +N 715 -510 715 -130 {lab=2n} +N 695 -530 695 -150 {lab=2p} +N 1280 -700 1550 -700 {lab=VDD} +N 360 -620 360 -130 {lab=1n} +N 340 -640 340 -150 {lab=1p} +N 1610 -340 1710 -340 {lab=ph4_p} +N 1610 -320 1710 -320 {lab=ph4_n} +N 1230 -440 1710 -440 {lab=ph3_p} +N 1230 -420 1710 -420 {lab=ph3_n} +N 870 -530 1710 -530 {lab=ph2_p} +N 870 -510 1710 -510 {lab=ph2_n} +N 510 -640 1715 -640 {lab=ph1_p} +N 510 -620 1715 -620 {lab=ph1_n} +N 1350 -150 1400 -150 {lab=4n} +N 1350 -130 1420 -130 {lab=4p} +N 630 -150 695 -150 {lab=2p} +N 630 -130 715 -130 {lab=2n} +N 270 -150 340 -150 {lab=1p} +N 270 -130 360 -130 {lab=1n} +N 990 -150 1055 -150 {lab=3p} +N 990 -130 1075 -130 {lab=4n} +N 560 -700 810 -700 {lab=VDD} +N 360 -620 380 -620 {lab=1n} +N 340 -640 380 -640 {lab=1p} +N 450 -590 450 0 {lab=GND} +N 450 -700 450 -670 {lab=VDD} +N 180 0 450 0 {lab=GND} +N 200 -700 450 -700 {lab=VDD} +N 695 -530 740 -530 {lab=2p} +N 715 -510 740 -510 {lab=2n} +N 810 -700 810 -560 {lab=VDD} +N 810 -480 810 0 {lab=GND} +N 1170 -390 1170 -0 {lab=GND} +N 1055 -440 1100 -440 {lab=3p} +N 1075 -420 1100 -420 {lab=4n} +N 540 0 810 0 {lab=GND} +N 900 0 1170 -0 {lab=GND} +N 1170 -700 1170 -470 {lab=VDD} +N 920 -700 1170 -700 {lab=VDD} +N 1420 -320 1480 -320 {lab=4p} +N 1420 -320 1420 -130 {lab=4p} +N 1400 -340 1480 -340 {lab=4n} +N 1260 -0 1550 -0 {lab=GND} +N 1550 -290 1550 -0 {lab=GND} +N 1550 -700 1550 -370 {lab=VDD} +N 0 0 180 0 {lab=GND} +N 200 -700 200 -200 { lab=VDD} +N 60 -260 60 -150 { lab=4p} +N 60 -130 60 -20 { lab=4n} +C {vco_2-4GHz_delaycell/vco_2-4GHz_delaycell.sym} 180 -140 0 0 {name=x1} +C {vco_2-4GHz_delaycell/vco_2-4GHz_delaycell.sym} 540 -140 0 0 {name=x2} +C {vco_2-4GHz_delaycell/vco_2-4GHz_delaycell.sym} 900 -140 0 0 {name=x3} +C {vco_2-4GHz_delaycell/vco_2-4GHz_delaycell.sym} 1260 -140 0 0 {name=x4} +C {ipin.sym} 0 -280 0 0 {name=p1 lab=CTL} +C {iopin.sym} 0 -700 0 1 {name=p6 lab=VDD} +C {iopin.sym} 0 0 0 1 {name=p7 lab=GND} +C {opin.sym} 1710 -440 0 0 {name=p2 lab=ph3_p} +C {opin.sym} 1710 -420 0 0 {name=p3 lab=ph3_n} +C {opin.sym} 1710 -340 0 0 {name=p4 lab=ph4_p} +C {opin.sym} 1710 -320 0 0 {name=p5 lab=ph4_n} +C {rf_bufferdiff/rf_bufferdiff.sym} 450 -630 0 0 {name=x5} +C {rf_bufferdiff/rf_bufferdiff.sym} 810 -520 0 0 {name=x6} +C {rf_bufferdiff/rf_bufferdiff.sym} 1170 -430 0 0 {name=x7} +C {rf_bufferdiff/rf_bufferdiff.sym} 1550 -330 0 0 {name=x8} +C {opin.sym} 1710 -530 0 0 {name=p8 lab=ph2_p} +C {opin.sym} 1710 -510 0 0 {name=p9 lab=ph2_n} +C {opin.sym} 1715 -640 0 0 {name=p10 lab=ph1_p} +C {opin.sym} 1715 -620 0 0 {name=p11 lab=ph1_n} +C {lab_wire.sym} 470 -150 0 0 {name=l1 sig_type=std_logic lab=1p} +C {lab_wire.sym} 470 -130 2 1 {name=l2 sig_type=std_logic lab=1n} +C {lab_wire.sym} 830 -150 0 0 {name=l3 sig_type=std_logic lab=2p} +C {lab_wire.sym} 830 -130 2 1 {name=l4 sig_type=std_logic lab=2n} +C {lab_wire.sym} 1190 -150 0 0 {name=l5 sig_type=std_logic lab=3p} +C {lab_wire.sym} 1190 -130 2 1 {name=l6 sig_type=std_logic lab=3n} +C {lab_wire.sym} 110 -150 0 0 {name=l7 sig_type=std_logic lab=4p} +C {lab_wire.sym} 110 -130 2 1 {name=l8 sig_type=std_logic lab=4n}
diff --git a/xschem/vco_2-4GHz/vco_2-4GHz.sym b/xschem/vco_2-4GHz/vco_2-4GHz.sym new file mode 100644 index 0000000..7ab3724 --- /dev/null +++ b/xschem/vco_2-4GHz/vco_2-4GHz.sym
@@ -0,0 +1,49 @@ +v {xschem version=2.9.7 file_version=1.1} +G {type=subcircuit +format="@name @pinlist @symname" +template="name=xvco"} +V {} +S {} +E {} +L 4 -110 -110 110 -110 {} +L 4 -110 100 110 100 {} +L 4 -110 -110 -110 100 {} +L 4 110 -110 110 100 {} +L 4 110 -90 130 -90 {} +L 4 110 -70 130 -70 {} +L 4 110 -40 130 -40 {} +L 4 110 -20 130 -20 {} +L 4 110 10 130 10 {} +L 4 110 30 130 30 {} +L 4 110 60 130 60 {} +L 4 110 80 130 80 {} +L 4 -130 0 -110 0 {} +L 7 0 -130 0 -110 {} +L 7 0 100 0 120 {} +B 5 -2.5 -132.5 2.5 -127.5 {name=VDD dir=inout } +B 5 127.5 -92.5 132.5 -87.5 {name=ph1_p dir=out } +B 5 127.5 -72.5 132.5 -67.5 {name=ph1_n dir=out } +B 5 127.5 -42.5 132.5 -37.5 {name=ph2_p dir=out } +B 5 127.5 -22.5 132.5 -17.5 {name=ph2_n dir=out } +B 5 127.5 7.5 132.5 12.5 {name=ph3_p dir=out } +B 5 127.5 27.5 132.5 32.5 {name=ph3_n dir=out } +B 5 127.5 57.5 132.5 62.5 {name=ph4_p dir=out } +B 5 127.5 77.5 132.5 82.5 {name=ph4_n dir=out } +B 5 -132.5 -2.5 -127.5 2.5 {name=CTL dir=in } +B 5 -2.5 117.5 2.5 122.5 {name=GND dir=inout } +A 4 15 -5 15.8113883008419 198.434948822922 143.130102354156 {} +A 4 -15 5 15.8113883008419 18.43494882292204 143.130102354156 {} +A 4 0 -1.25 40.0195264839553 358.2100893917539 360 {} +T {@symname} 27 124 0 0 0.3 0.3 {} +T {@name} 25 108 0 0 0.2 0.2 {} +T {VDD} 6 -105 0 1 0.2 0.2 {} +T {ph1_p} 105 -94 0 1 0.2 0.2 {} +T {ph1_n} 105 -74 0 1 0.2 0.2 {} +T {ph2_p} 105 -44 0 1 0.2 0.2 {} +T {ph2_n} 105 -24 0 1 0.2 0.2 {} +T {ph3_p} 105 6 0 1 0.2 0.2 {} +T {ph3_n} 105 26 0 1 0.2 0.2 {} +T {ph4_p} 105 56 0 1 0.2 0.2 {} +T {ph4_n} 105 76 0 1 0.2 0.2 {} +T {CTL} -105 -4 0 0 0.2 0.2 {} +T {GND} -16 95 2 1 0.2 0.2 {}
diff --git a/xschem/vco_2-4GHz/vco_2-4GHz_behavourial.sch b/xschem/vco_2-4GHz/vco_2-4GHz_behavourial.sch new file mode 100644 index 0000000..5bdd636 --- /dev/null +++ b/xschem/vco_2-4GHz/vco_2-4GHz_behavourial.sch
@@ -0,0 +1,44 @@ +v {xschem version=2.9.7 file_version=1.1} +G {} +V {} +S {} +E {} +N 630 -110 630 0 {lab=GND} +N 440 0 630 0 {lab=GND} +N 0 0 440 0 {lab=GND} +N 480 -180 480 -100 {lab=phase} +N 480 -40 480 0 {lab=GND} +N 630 -280 630 -170 {lab=Ip} +N 630 -280 790 -280 {lab=Ip} +N 480 -300 480 -240 {lab=VDD} +N 0 -300 480 -300 {lab=VDD} +N 1000 -110 1000 0 {lab=GND} +N 1000 -280 1000 -170 {lab=In} +N 1000 -280 1160 -280 {lab=In} +N 1380 -110 1380 0 {lab=GND} +N 1380 -280 1380 -170 {lab=Qp} +N 1380 -280 1540 -280 {lab=Qp} +N 1750 -110 1750 0 {lab=GND} +N 1750 -280 1750 -170 {lab=Qn} +N 1750 -280 1910 -280 {lab=Qn} +N 630 0 1000 0 {lab=GND} +N 1000 0 1380 0 {lab=GND} +N 1380 0 1750 0 {lab=GND} +C {ipin.sym} 0 -230 0 0 {name=p1 lab=CTL} +C {iopin.sym} 0 -300 0 1 {name=p6 lab=VDD} +C {iopin.sym} 0 0 0 1 {name=p7 lab=GND} +C {opin.sym} 790 -280 0 0 {name=p2 lab=Ip} +C {opin.sym} 1160 -280 0 0 {name=p3 lab=In} +C {opin.sym} 1540 -280 0 0 {name=p4 lab=Qp} +C {opin.sym} 1910 -280 0 0 {name=p5 lab=Qn} +C {capa.sym} 480 -70 0 0 {name=C1 +m=1 +value=1 +footprint=1206 +device="ceramic capacitor"} +C {lab_wire.sym} 480 -130 0 1 {name=l1 sig_type=std_logic lab=phase} +C {bsource.sym} 480 -210 0 1 {name=B2 VAR=I FUNC="-546e3*v(ctl,gnd)^3 + 2.8e6*v(ctl,gnd)^2 - 4.6e6*v(ctl,gnd) + 5.65e6"} +C {bsource.sym} 630 -140 0 0 {name=B1 VAR=V FUNC="0.5*v(vdd)*cos(6.283185307*v(phase,gnd))+0.5*v(vdd)"} +C {bsource.sym} 1000 -140 0 0 {name=B3 VAR=V FUNC="-1*0.5*v(vdd)*cos(6.283185307*v(phase,gnd))+0.5*v(vdd)"} +C {bsource.sym} 1380 -140 0 0 {name=B4 VAR=V FUNC="0.5*v(vdd)*sin(6.283185307*v(phase,gnd))+0.5*v(vdd)"} +C {bsource.sym} 1750 -140 0 0 {name=B5 VAR=V FUNC="-1*0.5*v(vdd)*sin(6.283185307*v(phase,gnd))+0.5*v(vdd)"}
diff --git a/xschem/vco_2-4GHz/vco_2-4GHz_behavourial.sym b/xschem/vco_2-4GHz/vco_2-4GHz_behavourial.sym new file mode 100644 index 0000000..cd0b86f --- /dev/null +++ b/xschem/vco_2-4GHz/vco_2-4GHz_behavourial.sym
@@ -0,0 +1,36 @@ +v {xschem version=2.9.7 file_version=1.1} +G {type=subcircuit +format="@name @pinlist @symname"} +V {} +S {} +E {} +L 4 -80 -60 80 -60 {} +L 4 -80 60 80 60 {} +L 4 -80 -60 -80 60 {} +L 4 80 -60 80 60 {} +L 4 -100 0 -80 0 {} +L 4 80 -40 100 -40 {} +L 4 80 -20 100 -20 {} +L 4 80 20 100 20 {} +L 4 80 40 100 40 {} +L 7 0 -80 0 -60 {} +L 7 0 60 0 80 {} +B 5 -2.5 -82.5 2.5 -77.5 {name=VDD dir=inout } +B 5 -102.5 -2.5 -97.5 2.5 {name=CTL dir=in } +B 5 97.5 -42.5 102.5 -37.5 {name=Ip dir=out } +B 5 97.5 -22.5 102.5 -17.5 {name=In dir=out } +B 5 97.5 17.5 102.5 22.5 {name=Qp dir=out } +B 5 97.5 37.5 102.5 42.5 {name=Qn dir=out } +B 5 -2.5 77.5 2.5 82.5 {name=GND dir=inout } +A 4 15 -5 15.8113883008419 198.434948822922 143.130102354156 {} +A 4 -15 5 15.8113883008419 18.43494882292204 143.130102354156 {} +A 4 0 -1.25 40.0195264839553 358.2100893917539 360 {} +T {@symname} 16 84 0 0 0.3 0.3 {} +T {@name} 15 68 0 0 0.2 0.2 {} +T {VDD} 10 -57 0 1 0.2 0.2 {} +T {CTL} -75 -4 0 0 0.2 0.2 {} +T {Ip} 75 -44 0 1 0.2 0.2 {} +T {In} 75 -24 0 1 0.2 0.2 {} +T {Qp} 75 16 0 1 0.2 0.2 {} +T {Qn} 75 36 0 1 0.2 0.2 {} +T {GND} -12 57 2 1 0.2 0.2 {}
diff --git a/xschem/vco_2-4GHz/vco_2-4GHz_behavourial_square.sch b/xschem/vco_2-4GHz/vco_2-4GHz_behavourial_square.sch new file mode 100644 index 0000000..73298ff --- /dev/null +++ b/xschem/vco_2-4GHz/vco_2-4GHz_behavourial_square.sch
@@ -0,0 +1,44 @@ +v {xschem version=2.9.7 file_version=1.1} +G {} +V {} +S {} +E {} +N 630 -110 630 0 {lab=GND} +N 440 0 630 0 {lab=GND} +N 0 0 440 0 {lab=GND} +N 480 -180 480 -100 {lab=phase} +N 480 -40 480 0 {lab=GND} +N 630 -280 630 -170 {lab=Ip} +N 630 -280 790 -280 {lab=Ip} +N 480 -300 480 -240 {lab=VDD} +N 0 -300 480 -300 {lab=VDD} +N 1000 -110 1000 0 {lab=GND} +N 1000 -280 1000 -170 {lab=In} +N 1000 -280 1160 -280 {lab=In} +N 1380 -110 1380 0 {lab=GND} +N 1380 -280 1380 -170 {lab=Qp} +N 1380 -280 1540 -280 {lab=Qp} +N 1750 -110 1750 0 {lab=GND} +N 1750 -280 1750 -170 {lab=Qn} +N 1750 -280 1910 -280 {lab=Qn} +N 630 0 1000 0 {lab=GND} +N 1000 0 1380 0 {lab=GND} +N 1380 0 1750 0 {lab=GND} +C {ipin.sym} 0 -230 0 0 {name=p1 lab=CTL} +C {iopin.sym} 0 -300 0 1 {name=p6 lab=VDD} +C {iopin.sym} 0 0 0 1 {name=p7 lab=GND} +C {opin.sym} 790 -280 0 0 {name=p2 lab=Ip} +C {opin.sym} 1160 -280 0 0 {name=p3 lab=In} +C {opin.sym} 1540 -280 0 0 {name=p4 lab=Qp} +C {opin.sym} 1910 -280 0 0 {name=p5 lab=Qn} +C {capa.sym} 480 -70 0 0 {name=C1 +m=1 +value=1 +footprint=1206 +device="ceramic capacitor"} +C {lab_wire.sym} 480 -130 0 1 {name=l1 sig_type=std_logic lab=phase} +C {bsource.sym} 480 -210 0 1 {name=B2 VAR=I FUNC="-17500000*v(ctl,gnd)^3 + 89500000*v(ctl,gnd)^2 - 146000000*v(ctl,gnd) + 181000000"} +C {bsource.sym} 630 -140 0 0 {name=B1 VAR=V FUNC="0.5*v(vdd)*(((2*v(phase,gnd)%2)\\\\1)+0.5*v(vdd)"} +C {bsource.sym} 1000 -140 0 0 {name=B3 VAR=V FUNC="-1*0.5*v(vdd)*cos(6.283185307*v(phase,gnd))+0.5*v(vdd)"} +C {bsource.sym} 1380 -140 0 0 {name=B4 VAR=V FUNC="0.5*v(vdd)*sin(6.283185307*v(phase,gnd))+0.5*v(vdd)"} +C {bsource.sym} 1750 -140 0 0 {name=B5 VAR=V FUNC="-1*0.5*v(vdd)*sin(6.283185307*v(phase,gnd))+0.5*v(vdd)"}
diff --git a/xschem/vco_2-4GHz/vco_2-4GHz_behavourial_square.sym b/xschem/vco_2-4GHz/vco_2-4GHz_behavourial_square.sym new file mode 100644 index 0000000..cd0b86f --- /dev/null +++ b/xschem/vco_2-4GHz/vco_2-4GHz_behavourial_square.sym
@@ -0,0 +1,36 @@ +v {xschem version=2.9.7 file_version=1.1} +G {type=subcircuit +format="@name @pinlist @symname"} +V {} +S {} +E {} +L 4 -80 -60 80 -60 {} +L 4 -80 60 80 60 {} +L 4 -80 -60 -80 60 {} +L 4 80 -60 80 60 {} +L 4 -100 0 -80 0 {} +L 4 80 -40 100 -40 {} +L 4 80 -20 100 -20 {} +L 4 80 20 100 20 {} +L 4 80 40 100 40 {} +L 7 0 -80 0 -60 {} +L 7 0 60 0 80 {} +B 5 -2.5 -82.5 2.5 -77.5 {name=VDD dir=inout } +B 5 -102.5 -2.5 -97.5 2.5 {name=CTL dir=in } +B 5 97.5 -42.5 102.5 -37.5 {name=Ip dir=out } +B 5 97.5 -22.5 102.5 -17.5 {name=In dir=out } +B 5 97.5 17.5 102.5 22.5 {name=Qp dir=out } +B 5 97.5 37.5 102.5 42.5 {name=Qn dir=out } +B 5 -2.5 77.5 2.5 82.5 {name=GND dir=inout } +A 4 15 -5 15.8113883008419 198.434948822922 143.130102354156 {} +A 4 -15 5 15.8113883008419 18.43494882292204 143.130102354156 {} +A 4 0 -1.25 40.0195264839553 358.2100893917539 360 {} +T {@symname} 16 84 0 0 0.3 0.3 {} +T {@name} 15 68 0 0 0.2 0.2 {} +T {VDD} 10 -57 0 1 0.2 0.2 {} +T {CTL} -75 -4 0 0 0.2 0.2 {} +T {Ip} 75 -44 0 1 0.2 0.2 {} +T {In} 75 -24 0 1 0.2 0.2 {} +T {Qp} 75 16 0 1 0.2 0.2 {} +T {Qn} 75 36 0 1 0.2 0.2 {} +T {GND} -12 57 2 1 0.2 0.2 {}
diff --git a/xschem/vco_2-4GHz_delaycell/tests/vco_2-4GHz_delaycell_ac_test.sch b/xschem/vco_2-4GHz_delaycell/tests/vco_2-4GHz_delaycell_ac_test.sch new file mode 100644 index 0000000..5267373 --- /dev/null +++ b/xschem/vco_2-4GHz_delaycell/tests/vco_2-4GHz_delaycell_ac_test.sch
@@ -0,0 +1,126 @@ +v {xschem version=2.9.8 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 500 -220 510 -220 { lab=GND} +N 500 -220 500 0 { lab=GND} +N 390 -260 390 -120 { lab=#net1} +N 390 -260 510 -260 { lab=#net1} +N 550 -290 550 -270 { lab=#net2} +N 550 -290 620 -290 { lab=#net2} +N 620 -250 640 -250 { lab=#net2} +N 620 -290 620 -250 { lab=#net2} +N 550 -210 550 -190 { lab=#net3} +N 550 -190 620 -190 { lab=#net3} +N 620 -230 640 -230 { lab=#net3} +N 620 -230 620 -190 { lab=#net3} +N 390 -60 390 0 { lab=GND} +N 390 0 500 0 { lab=GND} +N 100 0 390 0 { lab=GND} +N 0 -230 0 0 { lab=GND} +N 100 -230 100 0 { lab=GND} +N 100 -340 100 -290 { lab=#net4} +N 100 -340 700 -340 { lab=#net4} +N 700 -340 700 -300 { lab=#net4} +N 0 -470 730 -470 { lab=#net5} +N 0 -470 0 -290 { lab=#net5} +N 710 -180 710 0 { lab=GND} +N 500 0 710 0 { lab=GND} +N 710 0 1170 0 { lab=GND} +N 1170 -180 1170 0 { lab=GND} +N 1160 -340 1160 -300 { lab=#net4} +N 700 -340 1160 -340 { lab=#net4} +N 730 -470 1190 -470 { lab=#net5} +N 1190 -470 1190 -300 { lab=#net5} +N 0 0 100 0 { lab=GND} +N 800 -250 1100 -250 { lab=#net6} +N 800 -230 1100 -230 { lab=#net7} +N 990 -140 1020 -140 { lab=#net7} +N 970 -100 1020 -100 { lab=#net6} +N 1060 -90 1060 0 { lab=GND} +N 350 -190 550 -190 { lab=#net3} +N 350 -290 550 -290 { lab=#net2} +N 170 -60 170 0 { lab=GND} +N 170 -290 170 -120 { lab=#net8} +N 170 -290 290 -290 { lab=#net8} +N 170 -190 290 -190 { lab=#net8} +N 990 -230 990 -140 { lab=#net7} +N 970 -250 970 -100 { lab=#net6} +N 730 -380 730 -300 { lab=#net9} +N 730 -470 730 -440 { lab=#net5} +N 570 120 600 120 { lab=GND} +N 600 120 600 190 { lab=GND} +N 260 190 600 190 { lab=GND} +N 260 0 260 190 { lab=GND} +N 570 150 570 190 { lab=GND} +N 280 120 530 120 { lab=#net8} +N 280 -190 280 120 { lab=#net8} +N 570 -470 570 30 { lab=#net5} +C {code.sym} 1050 -610 0 0 {name=STIMULI +tclcommand="xschem edit_vi_prop" +value=" +.param temp=27 +.temp 27 + + +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W5p00L0p15.spice +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W3p00L0p15.spice +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15.spice +.include sky130_fd_pr/cells/rf_pfet_01v8_lvt/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p35.spice + +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aM02W5p00L0p25.spice + +.include sky130_fd_pr/cells/rf_nfet_01v8_lvt/sky130_fd_pr__rf_nfet_01v8_lvt_aF06W3p00L0p15.spice + +.include sky130_fd_pr/cells/rf_pfet_01v8/sky130_fd_pr__rf_pfet_01v8_aF02W2p00L0p15.spice + + +*.lib sky130_fd_pr/models/sky130.lib.spice tt +.include sky130_fd_pr/models/corners/tt.spice + +*.option savecurrents + +.save i(Vmeas) +.save i(Vmeas1) + + +.op +.ac dec 10 1 100G + +.param vdd=1.8 +.param vctl=1.8 +"} +C {vco_2-4GHz_delaycell/vco_2-4Ghz_delaycell.sym} 710 -240 0 0 {name=x1} +C {vsource.sym} 100 -260 0 0 {name=V1 value="vctl"} +C {vsource.sym} 0 -260 0 0 {name=Vdd value=vdd} +C {vsource.sym} 390 -90 0 0 {name=V2 value="dc=0 ac=1"} +C {vcvs.sym} 550 -240 0 0 {name=E1 value=1} +C {vsource.sym} 170 -90 0 0 {name=V3 value="dc=\{vdd/2\} ac=0"} +C {vco_2-4GHz_delaycell/vco_2-4Ghz_delaycell.sym} 1170 -240 0 0 {name=x2} +C {vcvs.sym} 1060 -120 0 0 {name=E2 value=1} +C {res.sym} 320 -190 1 0 {name=R1 +value="1u ac=1G" +footprint=1206 +device=resistor +m=1} +C {res.sym} 320 -290 1 0 {name=R2 +value="1u ac=1G" +footprint=1206 +device=resistor +m=1} +C {gnd.sym} 0 0 0 0 {name=l1 lab=GND} +C {lab_wire.sym} 1060 -150 0 1 {name=l2 sig_type=std_logic lab=ac} +C {noconn.sym} 1260 -250 0 1 {name=l3} +C {noconn.sym} 1260 -230 0 1 {name=l4} +C {spice_probe.sym} 350 -290 0 0 {name=p1 analysis=tran voltage=0.9} +C {spice_probe.sym} 350 -190 0 0 {name=p2 analysis=tran voltage=0.9} +C {spice_probe.sym} 1010 -250 0 0 {name=p3 analysis=tran voltage=0.03406} +C {spice_probe.sym} 1010 -230 2 1 {name=p5 analysis=tran voltage=0.03406} +C {spice_probe.sym} 1060 -150 0 0 {name=p4 analysis=tran voltage=-2.7756e-17} +C {spice_probe.sym} 100 -340 0 0 {name=p6 analysis=tran voltage=1.8} +C {spice_probe.sym} 100 -470 0 0 {name=p7 analysis=tran voltage=1.8} +C {ammeter.sym} 730 -410 0 0 {name=Vmeas current=0.002034} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 550 120 0 0 {name=XMprimpos model=sky130_fd_pr__rf_nfet_01v8_lvt_aF06W3p00L0p15 m=8} +C {ammeter.sym} 570 60 0 0 {name=Vmeas1 current=0.01801}
diff --git a/xschem/vco_2-4GHz_delaycell/tests/vco_delaycell_2cells_tb.sch b/xschem/vco_2-4GHz_delaycell/tests/vco_delaycell_2cells_tb.sch new file mode 100644 index 0000000..760151c --- /dev/null +++ b/xschem/vco_2-4GHz_delaycell/tests/vco_delaycell_2cells_tb.sch
@@ -0,0 +1,87 @@ +v {xschem version=2.9.7 file_version=1.1} +G {} +V {} +S {} +E {} +N 90 -10 290 -10 {lab=#net1} +N 90 10 290 10 {lab=#net2} +N 940 -10 1010 -10 {lab=#net1} +N 940 10 1010 10 {lab=#net2} +N 1170 -10 1220 -10 {lab=OUT+} +N 1220 -10 1240 10 {lab=OUT+} +N 1170 10 1220 10 {lab=OUT-} +N 1220 10 1240 -10 {lab=OUT-} +N 1240 10 1280 10 {lab=OUT+} +N 1280 10 1280 110 {lab=OUT+} +N -150 110 1280 110 {lab=OUT+} +N -150 60 -150 110 {lab=OUT+} +N -100 10 -70 10 {lab=OUT+} +N 1240 -10 1280 -10 {lab=OUT-} +N 1280 -110 1280 -10 {lab=OUT-} +N -100 -10 -70 -10 {lab=OUT-} +N -150 -60 -150 -10 {lab=OUT-} +N 940 -80 940 -30 {lab=OUT-} +N 940 -30 1010 -30 {lab=OUT-} +N 940 30 940 80 {lab=OUT+} +N 940 30 1010 30 {lab=OUT+} +N -100 -80 940 -80 {lab=OUT-} +N -100 80 940 80 {lab=OUT+} +N -150 10 -100 10 {lab=OUT+} +N -150 -10 -100 -10 {lab=OUT-} +N 940 10 970 -20 {lab=#net2} +N 940 -10 970 20 {lab=#net1} +N -120 90 970 90 {lab=#net1} +N -120 30 -120 90 {lab=#net1} +N -120 30 -70 30 {lab=#net1} +N -120 -100 970 -100 {lab=#net2} +N -120 -100 -120 -30 {lab=#net2} +N -120 -30 -70 -30 {lab=#net2} +N -150 -110 1280 -110 {lab=OUT-} +N 810 -10 940 -10 {lab=#net1} +N 810 10 940 10 {lab=#net2} +N -10 -120 -10 -60 {lab=CTL} +N 1080 60 1080 120 {lab=0} +N 0 120 1080 120 {lab=0} +N 0 60 0 120 {lab=0} +N -10 -120 1070 -120 {lab=CTL} +N 20 -140 1100 -140 {lab=#net3} +N 1070 -120 1070 -60 {lab=CTL} +N 1100 -140 1100 -60 {lab=#net3} +N -530 30 -530 120 {lab=0} +N -440 120 0 120 {lab=0} +N -440 30 -440 120 {lab=0} +N -440 -120 -10 -120 {lab=CTL} +N -440 -120 -440 -30 {lab=CTL} +N -530 -140 20 -140 {lab=#net3} +N -530 -140 -530 -30 {lab=#net3} +N -530 120 -440 120 {lab=0} +N 20 -140 20 -60 {lab=#net3} +N -370 -60 -370 -30 {lab=OUT-} +N -370 -60 -150 -60 {lab=OUT-} +N -370 30 -370 60 {lab=OUT+} +N -370 60 -150 60 {lab=OUT+} +N -150 10 -150 60 {lab=OUT+} +N -150 -110 -150 -60 {lab=OUT-} +N 290 -10 810 -10 {lab=#net1} +N 290 10 810 10 {lab=#net2} +C {/home/tom/repositories/amsat_txrx_ic/design/vco_delaycell/vco_delaycell.sym} 0 0 0 0 {name=x1} +C {vsource.sym} -530 0 0 0 {name=VDD value="1.8"} +C {vsource.sym} -440 0 0 0 {name=VCTL value=0.9} +C {/home/tom/repositories/amsat_txrx_ic/design/vco_delaycell/vco_delaycell.sym} 1080 0 0 0 {name=x4} +C {lab_wire.sym} 1170 10 0 1 {name=l2 sig_type=std_logic lab=OUT-} +C {lab_wire.sym} 1170 -10 0 1 {name=l3 sig_type=std_logic lab=OUT+} +C {lab_wire.sym} -440 -120 0 1 {name=l4 sig_type=std_logic lab=CTL} +C {code_shown.sym} -330 200 0 0 {name=CONTROL value="* .control +* save all +* tran 5n 100u uic +* write led_driver.raw +* .endc +* .save all +.include \\"xh018/xh018.lib\\" +.tran 0.1n 1u uic +.measure tran osc_freq freq v(out+) on=1.1 off 0.7 from=0.9u to=1u +*.save all +* .dc VP 0 21 0.01 +"} +C {lab_wire.sym} -520 120 0 1 {name=l1 sig_type=std_logic lab=0} +C {isource.sym} -370 0 0 0 {name=I0 value="PWL 0S 0A 1nS 1mA 5nS 0A"}
diff --git a/xschem/vco_2-4GHz_delaycell/tests/vco_delaycell_3cells_tb.sch b/xschem/vco_2-4GHz_delaycell/tests/vco_delaycell_3cells_tb.sch new file mode 100644 index 0000000..240cbfb --- /dev/null +++ b/xschem/vco_2-4GHz_delaycell/tests/vco_delaycell_3cells_tb.sch
@@ -0,0 +1,63 @@ +v {xschem version=2.9.7 file_version=1.1} +G {} +V {} +S {} +E {} +N 90 -10 240 -10 {lab=#net1} +N 90 10 240 10 {lab=#net2} +N 400 -10 540 -10 {lab=#net3} +N 400 10 540 10 {lab=#net4} +N 700 -10 810 -10 {lab=OUT+} +N 700 10 810 10 {lab=OUT-} +N -150 100 810 100 {lab=OUT-} +N -150 10 -70 10 {lab=OUT-} +N 810 -100 810 -10 {lab=OUT+} +N -150 -10 -70 -10 {lab=OUT+} +N -150 -60 -150 -10 {lab=OUT+} +N -150 -100 810 -100 {lab=OUT+} +N -10 -120 -10 -60 {lab=CTL} +N 310 60 310 120 {lab=0} +N 610 60 610 120 {lab=0} +N 0 120 310 120 {lab=0} +N 0 60 0 120 {lab=0} +N 310 120 610 120 {lab=0} +N -10 -120 300 -120 {lab=CTL} +N 300 -120 600 -120 {lab=CTL} +N 20 -140 330 -140 {lab=#net5} +N 330 -140 630 -140 {lab=#net5} +N 300 -120 300 -60 {lab=CTL} +N 330 -140 330 -60 {lab=#net5} +N 600 -120 600 -60 {lab=CTL} +N 630 -140 630 -60 {lab=#net5} +N -530 30 -530 120 {lab=0} +N -440 120 0 120 {lab=0} +N -440 30 -440 120 {lab=0} +N -440 -120 -10 -120 {lab=CTL} +N -440 -120 -440 -30 {lab=CTL} +N -530 -140 20 -140 {lab=#net5} +N -530 -140 -530 -30 {lab=#net5} +N -530 120 -440 120 {lab=0} +N 20 -140 20 -60 {lab=#net5} +N -370 -60 -150 -60 {lab=OUT+} +N -370 30 -370 60 {lab=OUT-} +N -370 60 -150 60 {lab=OUT-} +N -150 10 -150 60 {lab=OUT-} +N -150 -100 -150 -60 {lab=OUT+} +N 810 10 810 100 {lab=OUT-} +N -150 60 -150 100 {lab=OUT-} +C {vco_delaycell/vco_delaycell.sym} 0 0 0 0 {name=x1} +C {vsource.sym} -530 0 0 0 {name=VDD value="1.8"} +C {vsource.sym} -440 0 0 0 {name=VCTL value=0} +C {vco_delaycell/vco_delaycell.sym} 310 0 0 0 {name=x3} +C {vco_delaycell/vco_delaycell.sym} 610 0 0 0 {name=x4} +C {lab_wire.sym} 700 10 0 1 {name=l2 sig_type=std_logic lab=OUT-} +C {lab_wire.sym} 700 -10 0 1 {name=l3 sig_type=std_logic lab=OUT+} +C {lab_wire.sym} -440 -120 0 1 {name=l4 sig_type=std_logic lab=CTL} +C {code_shown.sym} -330 200 0 0 {name=CONTROL value=" +.param temp=27 +.lib sky130_fd_pr/models/sky130.lib.spice tt +.tran 0.001n 10n uic +.measure tran osc_freq freq v(out+) on=1.1 off 0.7 from=8n to=10n +"} +C {lab_wire.sym} -520 120 0 1 {name=l1 sig_type=std_logic lab=0} +C {isource.sym} -370 0 0 0 {name=I0 value="PWL 0S 0A 1nS 1mA 5nS 0A"}
diff --git a/xschem/vco_2-4GHz_delaycell/tests/vco_delaycell_tb.sch b/xschem/vco_2-4GHz_delaycell/tests/vco_delaycell_tb.sch new file mode 100644 index 0000000..cd02355 --- /dev/null +++ b/xschem/vco_2-4GHz_delaycell/tests/vco_delaycell_tb.sch
@@ -0,0 +1,137 @@ +v {xschem version=2.9.7 file_version=1.1} +G {} +V {} +S {} +E {} +N 260 -10 290 -10 {lab=#net1} +N 260 10 290 10 {lab=#net2} +N 620 -10 650 -10 {lab=#net3} +N 620 10 650 10 {lab=#net4} +N 940 -10 1010 -10 {lab=#net5} +N 940 10 1010 10 {lab=#net6} +N 1170 -10 1220 -10 {lab=OUT+} +N 1220 -10 1240 10 {lab=OUT+} +N 1170 10 1220 10 {lab=OUT-} +N 1220 10 1240 -10 {lab=OUT-} +N 1240 10 1280 10 {lab=OUT+} +N 1280 10 1280 110 {lab=OUT+} +N -150 110 1280 110 {lab=OUT+} +N -150 10 -150 110 {lab=OUT+} +N -100 10 -70 10 {lab=OUT+} +N 1240 -10 1280 -10 {lab=OUT-} +N 1280 -110 1280 -10 {lab=OUT-} +N -100 -10 -70 -10 {lab=OUT-} +N -150 -110 -150 -10 {lab=OUT-} +N 620 -80 620 -10 {lab=#net3} +N 940 -80 940 -30 {lab=#net3} +N 940 -30 1010 -30 {lab=#net3} +N 620 10 620 80 {lab=#net4} +N 940 30 940 80 {lab=#net4} +N 940 30 1010 30 {lab=#net4} +N 450 -10 620 -10 {lab=#net3} +N 450 10 620 10 {lab=#net4} +N 620 -80 940 -80 {lab=#net3} +N 620 80 940 80 {lab=#net4} +N 260 -80 260 -10 {lab=#net1} +N 580 -80 580 -30 {lab=#net1} +N 580 -30 650 -30 {lab=#net1} +N 260 10 260 80 {lab=#net2} +N 580 30 580 80 {lab=#net2} +N 580 30 650 30 {lab=#net2} +N 260 -80 580 -80 {lab=#net1} +N 260 80 580 80 {lab=#net2} +N -100 -80 -100 -10 {lab=OUT-} +N 220 -80 220 -30 {lab=OUT-} +N 220 -30 290 -30 {lab=OUT-} +N -100 10 -100 80 {lab=OUT+} +N 220 30 220 80 {lab=OUT+} +N 220 30 290 30 {lab=OUT+} +N -100 -80 220 -80 {lab=OUT-} +N -100 80 220 80 {lab=OUT+} +N -150 10 -100 10 {lab=OUT+} +N -150 -10 -100 -10 {lab=OUT-} +N 90 -10 260 -10 {lab=#net1} +N 90 10 260 10 {lab=#net2} +N 940 10 970 -20 {lab=#net6} +N 940 -10 970 20 {lab=#net5} +N 970 20 970 90 {lab=#net5} +N -120 90 970 90 {lab=#net5} +N -120 30 -120 90 {lab=#net5} +N -120 30 -70 30 {lab=#net5} +N 970 -100 970 -20 {lab=#net6} +N -120 -100 970 -100 {lab=#net6} +N -120 -100 -120 -30 {lab=#net6} +N -120 -30 -70 -30 {lab=#net6} +N -150 -110 1280 -110 {lab=OUT-} +N 810 -10 940 -10 {lab=#net5} +N 810 10 940 10 {lab=#net6} +N -10 -120 -10 -60 {lab=CTL} +N 360 60 360 120 {lab=0} +N 720 60 720 120 {lab=0} +N 1080 60 1080 120 {lab=0} +N 0 120 360 120 {lab=0} +N 0 60 0 120 {lab=0} +N 360 120 720 120 {lab=0} +N 720 120 1080 120 {lab=0} +N -10 -120 350 -120 {lab=CTL} +N 350 -120 710 -120 {lab=CTL} +N 710 -120 1070 -120 {lab=CTL} +N 20 -140 380 -140 {lab=#net7} +N 380 -140 740 -140 {lab=#net7} +N 740 -140 1100 -140 {lab=#net7} +N 350 -120 350 -60 {lab=CTL} +N 380 -140 380 -60 {lab=#net7} +N 710 -120 710 -60 {lab=CTL} +N 740 -140 740 -60 {lab=#net7} +N 1070 -120 1070 -60 {lab=CTL} +N 1100 -140 1100 -60 {lab=#net7} +N -530 30 -530 120 {lab=0} +N -270 120 0 120 {lab=0} +N -440 30 -440 120 {lab=0} +N -270 -120 -10 -120 {lab=CTL} +N -440 -120 -440 -30 {lab=CTL} +N -360 -140 20 -140 {lab=#net7} +N -530 -140 -530 -30 {lab=#net7} +N -530 120 -440 120 {lab=0} +N 20 -140 20 -60 {lab=#net7} +N -370 -60 -370 -30 {lab=OUT-} +N -200 -60 -150 -60 {lab=OUT-} +N -370 30 -370 60 {lab=OUT+} +N -200 60 -150 60 {lab=OUT+} +N -370 60 -200 60 {lab=OUT+} +N -440 120 -270 120 {lab=0} +N -370 -60 -200 -60 {lab=OUT-} +N -440 -120 -270 -120 {lab=CTL} +N -530 -140 -360 -140 {lab=#net7} +C {vco_delaycell/vco_delaycell.sym} 0 0 0 0 {name=x1 sec_w=sec_w load_w=load_w ctl_w=ctl_w prim_w=prim_w cross_w=cross_w } +C {vsource.sym} -530 0 0 0 {name=VDD value="1.8"} +C {vsource.sym} -440 0 0 0 {name=VCTL value=0.0 +} +C {vco_delaycell/vco_delaycell.sym} 360 0 0 0 {name=x2 sec_w=sec_w load_w=load_w ctl_w=ctl_w prim_w=prim_w cross_w=cross_w } +C {vco_delaycell/vco_delaycell.sym} 720 0 0 0 {name=x3 sec_w=sec_w load_w=load_w ctl_w=ctl_w prim_w=prim_w cross_w=cross_w } +C {vco_delaycell/vco_delaycell.sym} 1080 0 0 0 {name=x4 sec_w=sec_w load_w=load_w ctl_w=ctl_w prim_w=prim_w cross_w=cross_w } +C {lab_wire.sym} 1170 10 0 1 {name=l2 sig_type=std_logic lab=OUT-} +C {lab_wire.sym} 1170 -10 0 1 {name=l3 sig_type=std_logic lab=OUT+} +C {lab_wire.sym} -440 -120 0 1 {name=l4 sig_type=std_logic lab=CTL} +C {code_shown.sym} -330 200 0 0 {name=CONTROL value="* .control +* save all +* tran 5n 100u uic +* write led_driver.raw +* .endc +* .save all +*.include \\"xh018/xh018.lib\\" +*.tran 0.1n 1u uic +*.measure tran osc_freq freq v(out+) on=1.1 off 0.7 from=0.9u to=1u +*.save all +* .dc VP 0 21 0.01 + +.param TEMP=27 + +.options savecurrents +.lib /home/tom/repositories/skywater/sky130_fd_pr/models/sky130.lib.spice tt + +.temp 30 +.tran 0.1e-9 0.1e-6 uic +"} +C {lab_wire.sym} -520 120 0 1 {name=l1 sig_type=std_logic lab=0} +C {isource.sym} -370 0 0 0 {name=I0 value="PULSE(0 1m 1n 1p 1p 4n 10 0)"}
diff --git a/xschem/vco_2-4GHz_delaycell/vco_2-4GHz_delaycell b/xschem/vco_2-4GHz_delaycell/vco_2-4GHz_delaycell new file mode 100644 index 0000000..e8e83b9 --- /dev/null +++ b/xschem/vco_2-4GHz_delaycell/vco_2-4GHz_delaycell Binary files differ
diff --git a/xschem/vco_2-4GHz_delaycell/vco_2-4GHz_delaycell.sch b/xschem/vco_2-4GHz_delaycell/vco_2-4GHz_delaycell.sch new file mode 100644 index 0000000..f7f72c5 --- /dev/null +++ b/xschem/vco_2-4GHz_delaycell/vco_2-4GHz_delaycell.sch
@@ -0,0 +1,104 @@ +v {xschem version=2.9.8 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 370 -300 410 -300 {lab=CTL} +N 80 -110 80 -80 {lab=OUTp} +N 290 -110 290 -80 {lab=OUTp} +N 340 -110 400 -50 {lab=OUTp} +N 340 -50 400 -110 {lab=OUTn} +N 290 -110 340 -110 {lab=OUTp} +N 330 -50 340 -50 {lab=OUTn} +N 450 -110 450 -80 {lab=OUTn} +N 400 -110 450 -110 {lab=OUTn} +N 400 -50 410 -50 {lab=OUTp} +N 660 -110 660 -80 {lab=OUTn} +N 660 -150 660 -110 {lab=OUTn} +N 640 -50 660 -50 {lab=GND} +N 660 -20 660 0 {lab=GND} +N 640 0 660 0 {lab=GND} +N 80 -20 80 0 {lab=GND} +N 80 -50 100 -50 {lab=GND} +N 100 -50 100 0 {lab=GND} +N 270 -50 290 -50 {lab=GND} +N 270 -50 270 0 {lab=GND} +N 290 -20 290 0 {lab=GND} +N 450 -20 450 0 {lab=GND} +N 450 -50 470 -50 {lab=GND} +N 470 -50 470 0 {lab=GND} +N 640 -50 640 0 {lab=GND} +N 270 -300 290 -300 {lab=VDD} +N 270 -400 270 -300 {lab=VDD} +N 290 -400 290 -330 {lab=VDD} +N 450 -300 470 -300 {lab=VDD} +N 470 -400 470 -300 {lab=VDD} +N 450 -400 450 -330 {lab=VDD} +N 290 -400 450 -400 {lab=VDD} +N 0 -50 40 -50 {lab=Pp} +N 700 -50 740 -50 {lab=Pn} +N 660 -150 740 -150 {lab=OUTn} +N 0 0 80 0 {lab=GND} +N 370 -300 370 -175 {lab=CTL} +N 0 -140 80 -140 {lab=OUTp} +N 0 -175 370 -175 {lab=CTL} +N 330 -300 370 -300 {lab=CTL} +N 80 -140 80 -110 {lab=OUTp} +N 80 0 100 0 {lab=GND} +N 150 -0 270 0 {lab=GND} +N 270 0 290 0 {lab=GND} +N 290 0 450 0 {lab=GND} +N 450 0 470 0 {lab=GND} +N 590 0 640 0 {lab=GND} +N 450 -400 470 -400 {lab=VDD} +N 80 -400 270 -400 {lab=VDD} +N 270 -400 290 -400 {lab=VDD} +N 60 -350 80 -350 {lab=VDD} +N 60 -400 60 -350 {lab=VDD} +N 80 -400 80 -380 {lab=VDD} +N 80 -200 80 -140 {lab=OUTp} +N 120 -350 150 -350 {lab=GND} +N 150 -350 150 -0 {lab=GND} +N 660 -350 680 -350 {lab=VDD} +N 680 -400 680 -350 {lab=VDD} +N 660 -400 660 -380 {lab=VDD} +N 660 -400 680 -400 {lab=VDD} +N 660 -200 660 -150 {lab=OUTn} +N 470 -400 660 -400 {lab=VDD} +N 590 -350 620 -350 {lab=GND} +N 590 -350 590 0 {lab=GND} +N 100 0 150 -0 {lab=GND} +N 470 0 590 0 {lab=GND} +N 0 -400 60 -400 {lab=VDD} +N 60 -400 80 -400 {lab=VDD} +N 80 -200 290 -200 { lab=OUTp} +N 450 -200 660 -200 { lab=OUTn} +N 290 -270 290 -200 { lab=OUTp} +N 450 -270 450 -200 { lab=OUTn} +N 450 -110 660 -110 { lab=OUTn} +N 80 -110 290 -110 { lab=OUTp} +N 80 -320 80 -280 { lab=OUTp} +N 660 -320 660 -280 { lab=OUTn} +N 80 -280 80 -200 { lab=OUTp} +N 660 -280 660 -200 { lab=OUTn} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 60 -50 0 0 {name=XMprimpos model=sky130_fd_pr__rf_nfet_01v8_lvt_aF02W3p00L0p15 m=1} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 430 -50 0 0 {name=XMcrossneg model=sky130_fd_pr__rf_nfet_01v8_lvt_aF02W1p65L0p15} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_pfet.sym} 430 -300 0 0 {name=XMctlneg model=sky130_fd_pr__rf_pfet_01v8_lvt_aM02W5p00L0p35 m=1} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_pfet.sym} 310 -300 0 1 {name=XMctlpos model=sky130_fd_pr__rf_pfet_01v8_lvt_aM02W5p00L0p35 m=1} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 310 -50 0 1 {name=XMcrosspos model=sky130_fd_pr__rf_nfet_01v8_lvt_aF02W1p65L0p15} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 680 -50 0 1 {name=XMprimneg model=sky130_fd_pr__rf_nfet_01v8_lvt_aF02W3p00L0p15 m=1} +C {ipin.sym} 0 -50 0 0 {name=p1 lab=Pp +} +C {ipin.sym} 740 -50 0 1 {name=p2 lab=Pn +} +C {opin.sym} 740 -150 0 0 {name=p5 lab=OUTn +} +C {opin.sym} 0 -140 0 1 {name=p6 lab=OUTp +} +C {iopin.sym} 0 -400 0 1 {name=p7 lab=VDD} +C {iopin.sym} 0 0 0 1 {name=p8 lab=GND +} +C {ipin.sym} 0 -175 0 0 {name=p9 lab=CTL} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_pfet.sym} 100 -350 0 1 {name=XMctlpos1 model=sky130_fd_pr__rf_pfet_01v8_aM02W1p65L0p25 m=1} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_pfet.sym} 640 -350 0 0 {name=XMctlneg1 model=sky130_fd_pr__rf_pfet_01v8_aM02W1p65L0p25 m=1}
diff --git a/xschem/vco_2-4GHz_delaycell/vco_2-4GHz_delaycell.sym b/xschem/vco_2-4GHz_delaycell/vco_2-4GHz_delaycell.sym new file mode 100644 index 0000000..5217bc2 --- /dev/null +++ b/xschem/vco_2-4GHz_delaycell/vco_2-4GHz_delaycell.sym
@@ -0,0 +1,42 @@ +v {xschem version=2.9.7 file_version=1.1} +G {type=subcircuit +format="@name @pinlist @symname" +template="name=x1"} +V {} +S {} +E {} +L 4 -50 -40 -50 40 {} +L 4 70 10 90 10 {} +L 4 70 -10 90 -10 {} +L 4 -70 10 -50 10 {} +L 4 -70 -10 -50 -10 {} +L 4 -50 -60 80 -0 {} +L 4 -50 60 80 -0 {} +L 4 60 10 80 10 {} +L 4 60 -10 70 -10 {} +L 4 -50 -60 -50 -40 {} +L 4 -50 40 -50 60 {} +L 4 59 10 60 10 {} +L 4 59 -10 60 -10 {} +L 4 -10 -60 -10 -50 {} +L 4 -10 -50 -10 -42 {} +L 7 20 -60 20 -40 {} +L 7 0 40 0 60 {} +L 7 20 -40 20 -28 {} +L 7 0 37 -0 40 {} +B 5 17.5 -62.5 22.5 -57.5 {name=VDD dir=inout } +B 5 87.5 7.5 92.5 12.5 {name=OUTn dir=out } +B 5 87.5 -12.5 92.5 -7.5 {name=OUTp dir=out } +B 5 -72.5 7.5 -67.5 12.5 {name=Pn dir=in } +B 5 -72.5 -12.5 -67.5 -7.5 {name=Pp dir=in } +B 5 -2.5 57.5 2.5 62.5 {name=GND dir=inout } +B 5 -12.5 -62.5 -7.5 -57.5 {name=CTL dir=in } +T {@symname} 43.5 19 0 0 0.3 0.3 {} +T {@name} 45 38 0 0 0.2 0.2 {} +T {VDD} 50 -40 0 1 0.2 0.2 {} +T {OUTn} 45 6 0 1 0.2 0.2 {} +T {OUTp} 45 -14 0 1 0.2 0.2 {} +T {Pn} -45 6 0 0 0.2 0.2 {} +T {Pp} -45 -14 0 0 0.2 0.2 {} +T {GND} 25 46 0 1 0.2 0.2 {} +T {CTL} 4 -25 2 0 0.2 0.2 {}
diff --git a/xschem/vco_2-4GHz_delaycell/vco_2-4GHz_delaycell_old.sch b/xschem/vco_2-4GHz_delaycell/vco_2-4GHz_delaycell_old.sch new file mode 100644 index 0000000..387f090 --- /dev/null +++ b/xschem/vco_2-4GHz_delaycell/vco_2-4GHz_delaycell_old.sch
@@ -0,0 +1,107 @@ +v {xschem version=2.9.8 file_version=1.2} +G {} +K {} +V {} +S {} +E {} +N 370 -300 410 -300 {lab=CTL} +N 80 -110 80 -80 {lab=OUTp} +N 290 -110 290 -80 {lab=OUTp} +N 340 -110 400 -50 {lab=OUTp} +N 340 -50 400 -110 {lab=OUTn} +N 290 -110 340 -110 {lab=OUTp} +N 330 -50 340 -50 {lab=OUTn} +N 450 -110 450 -80 {lab=OUTn} +N 400 -110 450 -110 {lab=OUTn} +N 400 -50 410 -50 {lab=OUTp} +N 660 -110 660 -80 {lab=OUTn} +N 660 -150 660 -110 {lab=OUTn} +N 640 -50 660 -50 {lab=GND} +N 660 -20 660 0 {lab=GND} +N 640 0 660 0 {lab=GND} +N 80 -20 80 0 {lab=GND} +N 80 -50 100 -50 {lab=GND} +N 100 -50 100 0 {lab=GND} +N 270 -50 290 -50 {lab=GND} +N 270 -50 270 0 {lab=GND} +N 290 -20 290 0 {lab=GND} +N 450 -20 450 0 {lab=GND} +N 450 -50 470 -50 {lab=GND} +N 470 -50 470 0 {lab=GND} +N 640 -50 640 0 {lab=GND} +N 270 -300 290 -300 {lab=VDD} +N 270 -400 270 -300 {lab=VDD} +N 290 -400 290 -330 {lab=VDD} +N 450 -300 470 -300 {lab=VDD} +N 470 -400 470 -300 {lab=VDD} +N 450 -400 450 -330 {lab=VDD} +N 290 -400 450 -400 {lab=VDD} +N 0 -50 40 -50 {lab=Pp} +N 700 -50 740 -50 {lab=Pn} +N 660 -150 740 -150 {lab=OUTn} +N 0 0 80 0 {lab=GND} +N 370 -300 370 -175 {lab=CTL} +N 0 -140 80 -140 {lab=OUTp} +N 0 -175 370 -175 {lab=CTL} +N 330 -300 370 -300 {lab=CTL} +N 80 -140 80 -110 {lab=OUTp} +N 80 0 100 0 {lab=GND} +N 150 -0 270 0 {lab=GND} +N 270 0 290 0 {lab=GND} +N 290 0 450 0 {lab=GND} +N 450 0 470 0 {lab=GND} +N 590 0 640 0 {lab=GND} +N 450 -400 470 -400 {lab=VDD} +N 80 -400 270 -400 {lab=VDD} +N 270 -400 290 -400 {lab=VDD} +N 60 -350 80 -350 {lab=VDD} +N 60 -400 60 -350 {lab=VDD} +N 80 -400 80 -380 {lab=VDD} +N 80 -200 80 -140 {lab=OUTp} +N 120 -350 150 -350 {lab=GND} +N 150 -350 150 -0 {lab=GND} +N 660 -350 680 -350 {lab=VDD} +N 680 -400 680 -350 {lab=VDD} +N 660 -400 660 -380 {lab=VDD} +N 660 -400 680 -400 {lab=VDD} +N 660 -200 660 -150 {lab=OUTn} +N 470 -400 660 -400 {lab=VDD} +N 590 -350 620 -350 {lab=GND} +N 590 -350 590 0 {lab=GND} +N 100 0 150 -0 {lab=GND} +N 470 0 590 0 {lab=GND} +N 0 -400 60 -400 {lab=VDD} +N 60 -400 80 -400 {lab=VDD} +N 660 -320 660 -300 {lab=OUTn} +N 80 -320 80 -300 {lab=OUTp} +N 80 -200 220 -200 { lab=OUTp} +N 220 -200 290 -200 { lab=OUTp} +N 450 -200 660 -200 { lab=OUTn} +N 290 -270 290 -200 { lab=OUTp} +N 450 -270 450 -200 { lab=OUTn} +N 80 -240 80 -200 { lab=OUTp} +N 660 -240 660 -200 { lab=OUTn} +N 450 -110 660 -110 { lab=OUTn} +N 80 -110 290 -110 { lab=OUTp} +N 80 -300 80 -240 { lab=OUTp} +N 660 -300 660 -240 { lab=OUTn} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 60 -50 0 0 {name=XMprimpos model=sky130_fd_pr__rf_nfet_01v8_lvt_aF06W3p00L0p15 m=3} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 430 -50 0 0 {name=XMcrossneg model=sky130_fd_pr__rf_nfet_01v8_lvt_aF06W3p00L0p15} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_pfet.sym} 430 -300 0 0 {name=XMctlneg model=sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p35 m=2} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_pfet.sym} 310 -300 0 1 {name=XMctlpos model=sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p35 m=2} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 310 -50 0 1 {name=XMcrosspos model=sky130_fd_pr__rf_nfet_01v8_lvt_aF06W3p00L0p15} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_nfet.sym} 680 -50 0 1 {name=XMprimneg model=sky130_fd_pr__rf_nfet_01v8_lvt_aF06W3p00L0p15 m=3} +C {ipin.sym} 0 -50 0 0 {name=p1 lab=Pp +} +C {ipin.sym} 740 -50 0 1 {name=p2 lab=Pn +} +C {opin.sym} 740 -150 0 0 {name=p5 lab=OUTn +} +C {opin.sym} 0 -140 0 1 {name=p6 lab=OUTp +} +C {iopin.sym} 0 -400 0 1 {name=p7 lab=VDD} +C {iopin.sym} 0 0 0 1 {name=p8 lab=GND +} +C {ipin.sym} 0 -175 0 0 {name=p9 lab=CTL} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_pfet.sym} 100 -350 0 1 {name=XMctlpos1 model=sky130_fd_pr__rf_pfet_01v8_aM02W5p00L0p25 m=1} +C {/home/tom/repositories/amsat_txrx_ic/library/primitives/sky130_fd_pr__rf_pfet.sym} 640 -350 0 0 {name=XMctlneg1 model=sky130_fd_pr__rf_pfet_01v8_aM02W5p00L0p25 m=1}