Skip to content

HighSpeed LVCMOS IO Cell IP for sky130; GPLv3 licensed. Use at your own risk. MPW5 Tapeout: https://github.com/armleo/armleo_gpio_mpw5

Notifications You must be signed in to change notification settings

armleo/armleo_gpio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Armleo IP Repository

Armleo's IP repository. The cells are not tested agains ESD protection yet, use it at your own risk. Currently includes GPIO cell.

Cell Picture

Running OpenLane for DEF template

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.

  1. Modify carrack_wrapper_user as you wish. Then run it: ./flow.tcl -design carrack_wrapper_user -tag carrack_wrapper_user -overwrite
  2. Run: make uncompress to decompress GDS. Use make compress to then compress it before sending to git.
  3. Then copy from final GDS to the user_analog_project_wrapper manualy.
  4. Place it the wrapper at (189.52um, 137um).
  5. Replace sky130_fd_sc_hd__decap_12 with sky130_ef_sc_hd__decap_12, to make sure that LI1 density is low enough to pass precheck
  6. Run the DRC check below. You will have to pass DRC check for tape-out afterwards anyway.
  7. Make a caravel_user_analog_project workspace
  8. Copy netgen's content to workspace and final GDS to gds folder of workspce.
  9. Pass the precheck

To monitor resource usage:

top -d 1 -b | grep -i --line-buffered 'wish\|openroad\|magic\|klayout\|netgen' >>somefile

Tempalte:

Cell Picture

Logic analyzer pins are not available in the current template. Stay tuned for future versions.

License

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.

Pin Usage

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

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

For developers

Remaking the template def

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 ;

DRC check of user_analog_project_wrapper

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.

Versions

OpenLane: 2021.11.23_01.42.34
Magic VLSI: 8.3.253
KLayout: v0.27.4
Open_PDKs: 1.0.264

Generating lef

First generate makefile then use makefile to create the lef

python3 scripts/generate_makefile.py && make lef/armleo_gpio.lef

About

HighSpeed LVCMOS IO Cell IP for sky130; GPLv3 licensed. Use at your own risk. MPW5 Tapeout: https://github.com/armleo/armleo_gpio_mpw5

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published