This repository contains pointers to open source PDKs maintained by Google.
https://github.com/google/skywater-pdk
https://github.com/google/sky90fd-pdk
https://github.com/google/globalfoundries-pdks
Index of the fully open source process design kits (PDKs) maintained by Google.
Home Page: https://open-source-pdks.rtfd.io
License: Apache License 2.0
This repository contains pointers to open source PDKs maintained by Google.
https://github.com/google/skywater-pdk
https://github.com/google/sky90fd-pdk
https://github.com/google/globalfoundries-pdks
The SkyWater PDK defines a bunch of "rst roles" in it's sphinx conf.py
file. These include things like;
Which are used like this in the SkyWater PDK documentation;
:lib:`sky130_fd_io` - SKY130 IO and periphery cells (SkyWater Provided)
and like follows;
Libraries in the SKY130 PDK are named using the following scheme;
:lib_process:`<Process name>` _ :lib_src:`<Library Source Abbreviation>` _ :lib_type:`<Library Type Abbreviation>` [_ :lib_name:`<Library Name>`]
Which results in the following colorization in the PDK documentation;
In the future, it would also be good if it resulted in these nodes also being clickable links to useful things.
This is useful for documenting all the PDKs which follow our naming process. We should move it into this repository and make it shared.
This is done with the following Python code;
import re
from docutils.parsers.rst import directives, roles, nodes
LIB_REGEX = re.compile('sky130_(?P<lib_src>[^_\s]*)_(?P<lib_type>[^_\s]*)(_(?P<lib_name>[^_\s]*))?')
CELL_REGEX = re.compile('sky130_(?P<lib_src>[^_\s]*)_(?P<lib_type>[^_\s]*)(_(?P<lib_name>[^_\s]*))?__(?P<cell_name>[^\s]*)')
def lib_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
"""Library name which gets colorized."""
m = LIB_REGEX.match(text)
if not m:
msg = inliner.reporter.error("Malformed library name of "+repr(text), line=lineno)
prb = inliner.problematic(rawtext, rawtext, msg)
return [prb], [msg]
app = inliner.document.settings.env.app
#lib_process_role = roles.role('lib_src', inliner.language, lineno, inliner.reporter)
#lib_src_role = roles.role('lib_src', inliner.language, lineno, inliner.reporter)
#lib_type_role = roles.role('lib_src', inliner.language, lineno, inliner.reporter)
#lib_name_role = roles.role('lib_src', inliner.language, lineno, inliner.reporter)
lib_process = 'sky130'
lib_src = m.group('lib_src')
lib_type = m.group('lib_type')
lib_name = m.group('lib_name')
r = [
nodes.inline(lib_process, lib_process, classes=['lib-process']),
nodes.inline('_', '_', options=options),
nodes.inline(lib_src, lib_src, classes=['lib-src']),
nodes.inline('_', '_', options=options),
nodes.inline(lib_type, lib_type, classes=['lib-type']),
]
if lib_name:
r.append(nodes.inline('_', '_', options=options))
r.append(nodes.inline(lib_name, lib_name, classes=['lib-name']))
return r, []
def cell_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
"""Cell name which gets colorized."""
m = CELL_REGEX.match(text)
if not m:
msg = inliner.reporter.error("Malformed cell name of "+repr(text), line=lineno)
prb = inliner.problematic(rawtext, rawtext, msg)
return [prb], [msg]
app = inliner.document.settings.env.app
#lib_process_role = roles.role('lib_src', inliner.language, lineno, inliner.reporter)
#lib_src_role = roles.role('lib_src', inliner.language, lineno, inliner.reporter)
#lib_type_role = roles.role('lib_src', inliner.language, lineno, inliner.reporter)
#lib_name_role = roles.role('lib_src', inliner.language, lineno, inliner.reporter)
lib_process = 'sky130'
lib_src = m.group('lib_src')
lib_type = m.group('lib_type')
lib_name = m.group('lib_name')
cell_name = m.group('cell_name')
r = [
nodes.inline(lib_process, lib_process, classes=['lib-process']),
nodes.inline('_', '_', options=options),
nodes.inline(lib_src, lib_src, classes=['lib-src']),
nodes.inline('_', '_', options=options),
nodes.inline(lib_type, lib_type, classes=['lib-type']),
]
if lib_name:
r.append(nodes.inline('_', '_', options=options))
r.append(nodes.inline(lib_name, lib_name, classes=['lib-name']))
r.append(nodes.inline('__', '__', options=options))
r.append(nodes.inline(cell_name, cell_name, classes=['cell-name']))
return r, []
def add_role(app, new_role_name):
options = {
'class': directives.class_option(new_role_name),
}
role = roles.CustomRole(new_role_name, roles.generic_custom_role, options, "")
app.add_role(new_role_name, role)
def setup(app):
app.add_css_file('extra.css')
add_role(app, 'cell_name')
add_role(app, 'lib_process')
add_role(app, 'lib_src')
add_role(app, 'lib_type')
add_role(app, 'lib_name')
add_role(app, 'drc_rule')
add_role(app, 'drc_tag')
add_role(app, 'drc_flag')
add_role(app, 'layer')
app.add_role('lib', lib_role)
app.add_role('cell', cell_role)
app.add_role('model', cell_role)
The CONTRIBUTING.md
file in the github/docs
includes a lot of the information we should include.
At a minimum we should explain;
It should still include information about the CLA process.
We should have a specification for the definition.json
file found in our open source PDKs.
There is some details in https://bit.ly/open-source-pdks-naming
Example files;
We should also have a JSON schema for the format.
The README file should include some basic information and links to the no cost tape out program that Google is funding.
The readthedocs build are complaining with;
So we should probably add a .readthedocs.yml
config file. The config file format is described @ https://docs.readthedocs.io/en/stable/config-file/v2.html
The SkyWater PDK has a Python library at https://github.com/google/skywater-pdk/tree/main/scripts/python-skywater-pdk and the documentation can be found at https://skywater-pdk.readthedocs.io/en/main/python-api/skywater_pdk.html#submodules
The library lets you do things like decode file names into human readable descriptions.
Pretty much everything in the library should work with everything that follows our naming scheme found at https://docs.google.com/document/d/1rDN5jw8sh0aTwf1jScn0nP2zy4FWLxC-82M8TL3Lbr4/edit#
Should cover both the new GF180MCU PDK and the existing SKY130 PDK.
See the Google SkyWater PDK equivalent at https://cs.opensource.google/skywater-pdk
It would be good for this repository to document how we are versioning the open source PDKs.
The SkyWater PDK documents the version number information at https://skywater-pdk.readthedocs.io/en/main/versioning.html#version-number-format
when i try to enable sk13o using the following commads:
PDK_HASH = 'fa87f8f4bbcc7255b6f0c0fb506960f531ae2392'
PDK_ROOT = '/root/.volare/volare/sky130/versions'
pip install --upgrade --no-cache-dir volare
volare enable --pdk sky130 {PDK_HASH}
i got following error:
Version {PDK_HASH} not found either locally or remotely.
Try volare build {PDK_HASH}.
when tried to build {PDK_HASH} it gives: Cannot update paths and switch to branch 'current' at the same time.\nDid you intend to checkout '{fa87f8f4bbcc7255b6f0c0fb506960f531ae2392}' which can not be resolved as commit?\n"
what does that mean??
It would be good if this repository included information about how the Google open source PDKs are structure and how things are named.
I have tried to create a document at https://bit.ly/open-source-pdks-naming which includes information about this stuff.
It would be good to have a bit more information about the PDKs, like what features are supported and such.
Link to open-source-pdks should point to https://github.com/google/open-source-pdks
Link to open-source-pdks should point to https://github.com/google/open(s)-source-pdks
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.