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 uncompress
to decompress GDS. Usemake compress
to 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_12
withsky130_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