Armleo's IP repository. The cells are not tested agains ESD protection yet, use it at your own risk. Currently includes GPIO cell.
Don't want to make a analog design? We got you covered. OpenLane can be used for PnR or DEF file can be used with other tools to generate a final chip layout.
Copy both designs from OpenLane/designs to designs folder of 2021.11.23_01.42.34 version of OpenLane. make test of openlane should pass successfully before proceeding. HD std cell library has to be built and set to default.
- Modify carrack_wrapper_user as you wish. Then run it:
./flow.tcl -design carrack_wrapper_user -tag carrack_wrapper_user -overwrite - Run:
make uncompressto decompress GDS. Usemake compressto then compress it before sending to git. - Then copy from final GDS to the user_analog_project_wrapper manualy.
- Place it the wrapper at (189.52um, 137um).
- Replace
sky130_fd_sc_hd__decap_12withsky130_ef_sc_hd__decap_12, to make sure that LI1 density is low enough to pass precheck - Run the DRC check below. You will have to pass DRC check for tape-out afterwards anyway.
- Make a caravel_user_analog_project workspace
- Copy netgen's content to workspace and final GDS to gds folder of workspce.
- Pass the precheck
To monitor resource usage:
top -d 1 -b | grep -i --line-buffered 'wish\|openroad\|magic\|klayout\|netgen' >>somefile
Tempalte:
Logic analyzer pins are not available in the current template. Stay tuned for future versions.
Available for licensing. It might or might not be published under GPL license in the future. This repository is provided for evaluation purposes only, if you need this cell for tape-out reach out to me.
oe_l enables drivers; out_l controls output driver
if(oe_l == 0) -> PAD = hi-z;
if(oe_l && out) -> PAD = HIGH;
if(oe_l && !out) -> PAD = LOW;
"Weak" mode is always active.
To activate "medium" power mode, pull med_enable high
To activate "strong" power mode, pull med_enable and strong_enable high
The io_oeb corresponding to the fastio has to be pulled high to disable caravan's chip io. If however fastio_oe_l is low (deactivated driver) then io_oeb can be low (active). Note that io_oeb is inverted, so low value means active driver, while oe_l is NOT inverted, so low value means disabled driver.
Measurements for best, 6pf:
trise_weak_1v8 = 3.867679e-09 targ= 1.523301e-08 trig= 1.136533e-08
tfall_weak_1v8 = 2.626071e-09 targ= 3.438955e-08 trig= 3.176348e-08
tdelay0_weak_1v8 = 2.452975e-09 targ= 1.295297e-08 trig= 1.050000e-08
tdelay1_weak_1v8 = 2.417782e-09 targ= 3.291778e-08 trig= 3.050000e-08
trise_med_1v8 = 1.594208e-09 targ= 9.275429e-08 trig= 9.116008e-08
tfall_med_1v8 = 1.058421e-09 targ= 1.126727e-07 trig= 1.116143e-07
tdelay0_med_1v8 = 1.296988e-09 targ= 9.179699e-08 trig= 9.050000e-08
tdelay1_med_1v8 = 1.576476e-09 targ= 1.120765e-07 trig= 1.105000e-07
trise_strong_1v8 = 6.906845e-10 targ= 1.718177e-07 trig= 1.711270e-07
tfall_strong_1v8 = 5.081321e-10 targ= 1.920965e-07 trig= 1.915884e-07
tdelay0_strong_1v8 = 9.149965e-10 targ= 1.714150e-07 trig= 1.705000e-07
tdelay1_strong_1v8 = 1.309621e-09 targ= 1.918096e-07 trig= 1.905000e-07
trise_weak = 1.675664e-09 targ= 1.267546e-08 trig= 1.099979e-08
tfall_weak = 1.739907e-09 targ= 3.308211e-08 trig= 3.134220e-08
tdelay0_weak = 1.170087e-09 targ= 1.167009e-08 trig= 1.050000e-08
tdelay1_weak = 1.573956e-09 targ= 3.207396e-08 trig= 3.050000e-08
trise_med = 6.838892e-10 targ= 9.159890e-08 trig= 9.091501e-08
tfall_med = 6.627660e-10 targ= 1.119037e-07 trig= 1.112410e-07
tdelay0_med = 6.840024e-10 targ= 9.118400e-08 trig= 9.050000e-08
tdelay1_med = 1.034828e-09 targ= 1.115348e-07 trig= 1.105000e-07
trise_strong = 3.057381e-10 targ= 1.712079e-07 trig= 1.709021e-07
tfall_strong = 2.928193e-10 targ= 1.915104e-07 trig= 1.912176e-07
tdelay0_strong = 5.319152e-10 targ= 1.710319e-07 trig= 1.705000e-07
tdelay1_strong = 8.521985e-10 targ= 1.913522e-07 trig= 1.905000e-07
Measurements for best, 12pf:
trise_weak_1v8 = 7.532729e-09 targ= 1.924743e-08 trig= 1.171470e-08
tfall_weak_1v8 = 5.105752e-09 targ= 3.713221e-08 trig= 3.202646e-08
tdelay0_weak_1v8 = 4.308992e-09 targ= 1.480899e-08 trig= 1.050000e-08
tdelay1_weak_1v8 = 3.774369e-09 targ= 3.427437e-08 trig= 3.050000e-08
trise_med_1v8 = 3.031916e-09 targ= 9.433251e-08 trig= 9.130059e-08
tfall_med_1v8 = 2.052553e-09 targ= 1.137735e-07 trig= 1.117209e-07
tdelay0_med_1v8 = 2.039087e-09 targ= 9.253909e-08 trig= 9.050000e-08
tdelay1_med_1v8 = 2.120735e-09 targ= 1.126207e-07 trig= 1.105000e-07
trise_strong_1v8 = 1.282768e-09 targ= 1.724820e-07 trig= 1.711993e-07
tfall_strong_1v8 = 8.791301e-10 targ= 1.925230e-07 trig= 1.916439e-07
tdelay0_strong_1v8 = 1.226149e-09 targ= 1.717261e-07 trig= 1.705000e-07
tdelay1_strong_1v8 = 1.534362e-09 targ= 1.920344e-07 trig= 1.905000e-07
trise_weak = 3.268607e-09 targ= 1.441806e-08 trig= 1.114945e-08
tfall_weak = 3.348724e-09 targ= 3.486168e-08 trig= 3.151296e-08
tdelay0_weak = 1.960500e-09 targ= 1.246050e-08 trig= 1.050000e-08
tdelay1_weak = 2.446468e-09 targ= 3.294647e-08 trig= 3.050000e-08
trise_med = 1.331928e-09 targ= 9.230728e-08 trig= 9.097535e-08
tfall_med = 1.349697e-09 targ= 1.126595e-07 trig= 1.113098e-07
tdelay0_med = 1.000461e-09 targ= 9.150046e-08 trig= 9.050000e-08
tdelay1_med = 1.381036e-09 targ= 1.118810e-07 trig= 1.105000e-07
trise_strong = 5.719707e-10 targ= 1.715086e-07 trig= 1.709367e-07
tfall_strong = 5.353497e-10 targ= 1.917873e-07 trig= 1.912519e-07
tdelay0_strong = 6.645294e-10 targ= 1.711645e-07 trig= 1.705000e-07
tdelay1_strong = 9.954329e-10 targ= 1.914954e-07 trig= 1.905000e-07
For worst perfomance case, 6pf:
trise_weak_1v8 = 9.718091e-09 targ= 2.274421e-08 trig= 1.302612e-08
tfall_weak_1v8 = 6.892431e-09 targ= 4.073790e-08 trig= 3.384547e-08
tdelay0_weak_1v8 = 6.327373e-09 targ= 1.682737e-08 trig= 1.050000e-08
tdelay1_weak_1v8 = 6.188831e-09 targ= 3.668883e-08 trig= 3.050000e-08
trise_med_1v8 = 3.931444e-09 targ= 9.649940e-08 trig= 9.256795e-08
tfall_med_1v8 = 2.845247e-09 targ= 1.163524e-07 trig= 1.135072e-07
tdelay0_med_1v8 = 3.605996e-09 targ= 9.410600e-08 trig= 9.050000e-08
tdelay1_med_1v8 = 4.157469e-09 targ= 1.146575e-07 trig= 1.105000e-07
trise_strong_1v8 = 1.809623e-09 targ= 1.743354e-07 trig= 1.725258e-07
tfall_strong_1v8 = 1.355591e-09 targ= 1.948144e-07 trig= 1.934588e-07
tdelay0_strong_1v8 = 2.800189e-09 targ= 1.733002e-07 trig= 1.705000e-07
tdelay1_strong_1v8 = 3.532158e-09 targ= 1.940322e-07 trig= 1.905000e-07
trise_weak = 3.701777e-09 targ= 1.560275e-08 trig= 1.190097e-08
tfall_weak = 3.275813e-09 targ= 3.552716e-08 trig= 3.225134e-08
tdelay0_weak = 2.774981e-09 targ= 1.327498e-08 trig= 1.050000e-08
tdelay1_weak = 3.090125e-09 targ= 3.359013e-08 trig= 3.050000e-08
trise_med = 1.515460e-09 targ= 9.325048e-08 trig= 9.173502e-08
tfall_med = 1.325862e-09 targ= 1.133971e-07 trig= 1.120712e-07
tdelay0_med = 1.791871e-09 targ= 9.229187e-08 trig= 9.050000e-08
tdelay1_med = 2.117324e-09 targ= 1.126173e-07 trig= 1.105000e-07
trise_strong = 7.332265e-10 targ= 1.724458e-07 trig= 1.717126e-07
tfall_strong = 6.151685e-10 targ= 1.926508e-07 trig= 1.920356e-07
tdelay0_strong = 1.508502e-09 targ= 1.720085e-07 trig= 1.705000e-07
tdelay1_strong = 1.802461e-09 targ= 1.923025e-07 trig= 1.905000e-07
For worst perfomance case, 12pf:
trise_weak_1v8 = 1.826594e-08 targ= 3.211250e-08 trig= 1.384657e-08
tfall_weak_1v8 = 5.207719e-08 targ= 8.542504e-08 trig= 3.334785e-08
tdelay0_weak_1v8 = 1.068825e-08 targ= 2.118825e-08 trig= 1.050000e-08
tdelay1_weak_1v8 = 8.359119e-09 targ= 3.885912e-08 trig= 3.050000e-08
trise_med_1v8 = 7.474078e-09 targ= 1.003531e-07 trig= 9.287901e-08
tfall_med_1v8 = 5.416217e-09 targ= 1.191835e-07 trig= 1.137672e-07
tdelay0_med_1v8 = 5.334492e-09 targ= 9.583449e-08 trig= 9.050000e-08
tdelay1_med_1v8 = 5.470758e-09 targ= 1.159708e-07 trig= 1.105000e-07
trise_strong_1v8 = 3.330551e-09 targ= 1.760463e-07 trig= 1.727157e-07
tfall_strong_1v8 = 2.348249e-09 targ= 1.959494e-07 trig= 1.936011e-07
tdelay0_strong_1v8 = 3.535290e-09 targ= 1.740353e-07 trig= 1.705000e-07
tdelay1_strong_1v8 = 4.082330e-09 targ= 1.945823e-07 trig= 1.905000e-07
trise_weak = 7.375400e-09 targ= 1.957106e-08 trig= 1.219566e-08
tfall_weak = 6.573872e-09 targ= 3.912639e-08 trig= 3.255252e-08
tdelay0_weak = 4.383191e-09 targ= 1.488319e-08 trig= 1.050000e-08
tdelay1_weak = 4.651983e-09 targ= 3.515198e-08 trig= 3.050000e-08
trise_med = 2.913408e-09 targ= 9.476792e-08 trig= 9.185451e-08
tfall_med = 2.580570e-09 targ= 1.147759e-07 trig= 1.121953e-07
tdelay0_med = 2.422121e-09 targ= 9.292212e-08 trig= 9.050000e-08
tdelay1_med = 2.735442e-09 targ= 1.132354e-07 trig= 1.105000e-07
trise_strong = 1.290027e-09 targ= 1.730804e-07 trig= 1.717904e-07
tfall_strong = 1.089043e-09 targ= 1.931935e-07 trig= 1.921045e-07
tdelay0_strong = 1.780340e-09 targ= 1.722803e-07 trig= 1.705000e-07
tdelay1_strong = 2.062123e-09 targ= 1.925621e-07 trig= 1.905000e-07
It is not recommended, but if you want to regenerate the DEF, then run following ./flow.tcl -interactive -file designs/carrack_wrapper/interactive.tcl
Then in generated DEF fix so that every pin's location is aligned to 5nm. Good luck! I tried to fix all of the pin locations in script, but it still gives a wrong DEF. There is no way too check if all fixed. But some you can find if you search for: 9 ) and 4 ) and 9 2000 ) N ;
cp ../armleo_sky130_ip/gds/user_analog_project_wrapper.gds designs/carrack_wrapper
# From make mount:
./flow.tcl -drc -design carrack_wrapper -magicrc $PDK_ROOT/sky130A/libs.tech/magic/sky130A.magicrc -report designs/carrack_wrapper/drc.rpt -gds designs/carrack_wrapper_lvs/user_analog_project_wrapper.gds
# For LVS:
./flow.tcl -design carrack_wrapper_lvs -lvs -gds ./designs/carrack_wrapper_lvs/user_analog_project_wrapper.gds -net ./designs/carrack_wrapper_lvs/lvs_netlist.v
There is no LVS script. It is what it is.
OpenLane: 2021.11.23_01.42.34
Magic VLSI: 8.3.253
KLayout: v0.27.4
Open_PDKs: 1.0.264
First generate makefile then use makefile to create the lef
python3 scripts/generate_makefile.py && make lef/armleo_gpio.lef

