Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[flake8]
max-line-length = 100
extend-exclude = build
extend-ignore =
33 changes: 33 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: CI
on:
# Runs on all pushes to branches
push:
# Runs on all PRs
pull_request:
# Manual Dispatch
workflow_dispatch:

jobs:
lint_python:
name: Lint Python Code
runs-on: ubuntu-latest
steps:
- name: Check out Git repository
uses: actions/checkout@v4
- name: Lint with Flake8
run: |
pip install --upgrade pip
pip install .[dev]
flake8 --statistics .

check_paths:
name: Run CI
runs-on: ubuntu-latest
steps:
- name: Check out Git repository
uses: actions/checkout@v4
- name: Run tests
run: |
pip install --upgrade pip
pip install -e .[dev]
pytest
49 changes: 49 additions & 0 deletions .github/workflows/wheels.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Wheels

on:
workflow_dispatch:
release:
types:
- published

jobs:
build_wheels:
name: Wheels lambdalib
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: hynek/build-and-inspect-python-package@v1

publish:
needs: [build_wheels]
runs-on: ubuntu-latest
permissions:
id-token: write
if: github.event_name == 'release' && github.event.action == 'published'

steps:
- uses: actions/download-artifact@v3
with:
name: Packages
path: dist

- name: Publish
uses: pypa/gh-action-pypi-publish@v1.8.11

save:
needs: [publish]
runs-on: ubuntu-latest

steps:
- uses: actions/download-artifact@v3
with:
name: Packages
path: dist

- name: Add wheels to GitHub release artifacts
uses: softprops/action-gh-release@v1
with:
files: dist/*.whl
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,6 @@ a.out

# Byte-compiled / optimized / DLL files
__pycache__/
lambdalib.egg-info/
build/
dist/
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ Lambdalib includes the following hardware categories:

| Category | Description|
|---------------------------|------------|
|[stdlib](stdlib/rtl) | Standard cells (inv, nand, ff, ...)
|[ramlib](ramlib/rtl) | Memory (single port, dual port, fifo, ...)
|[iolib](iolib/rtl) | IO cells (bidir, vdd, clamp,...)
|[padring](padring/rtl) | Padring generator
|[vectorlib](vectorlib/rtl) | Vectorized helper library (mux, isolation)
|[syslib](syslib/rtl) | Vendor agnostic peripheral interface(uart, i2c,...)
|[stdlib](lambdalib/stdlib/rtl) | Standard cells (inv, nand, ff, ...)
|[ramlib](lambdalib/ramlib/rtl) | Memory (single port, dual port, fifo, ...)
|[iolib](lambdalib/iolib/rtl) | IO cells (bidir, vdd, clamp,...)
|[padring](lambdalib/padring/rtl) | Padring generator
|[vectorlib](lambdalib/vectorlib/rtl) | Vectorized helper library (mux, isolation)
|[syslib](lambdalib/syslib/rtl) | Vendor agnostic peripheral interface(uart, i2c,...)

The [Lambdapdk](https://github.com/siliconcompiler/lambdapdk) repository demonstrates implementation of the Lambdalib interfaces across a number of open source process technologies.

Expand Down
22 changes: 22 additions & 0 deletions lambdalib/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import os
import pkg_resources
try:
__version__ = pkg_resources.get_distribution('lambdalib').version
except: # noqa E722
__version__ = None


def register_data_source(chip):
# check if local
root_path = os.path.dirname(os.path.dirname(__file__))
test_path = os.path.join(root_path, 'lambdalib', 'iolib', 'rtl', 'la_ioanalog.v')
if os.path.exists(test_path):
path = root_path
ref = None
else:
path = 'git+https://github.com/siliconcompiler/lambdalib.git'
ref = f'v{__version__}'

chip.register_package_source(name='lambdalib',
path=path,
ref=ref)
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
34 changes: 23 additions & 11 deletions lambdalib/lambdalib.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,34 @@
import siliconcompiler
import os
from lambdalib import register_data_source
from siliconcompiler import Library


########################
# SiliconCompiler Setup
########################

def setup(target=None):
def setup(chip):
'''Lambdalib library setup script'''

# Create chip object
chip = siliconcompiler.Chip('lambdalib')
dependencies = {
'iolib': ['stdlib'],
'stdlib': [],
'ramlib': ['stdlib'],
'padring': ['stdlib'],
'syslib': ['stdlib'],
'vectorlib': ['stdlib']
}

# Project sources
root = os.path.realpath(os.path.join(os.path.dirname(__file__), '..'))
register_data_source(chip)

libs = []
# Iterate over all libs
for item in ['iolib', 'stdlib', 'ramlib', 'padring']:
chip.add('option', 'ydir', f"{root}/{item}/rtl")
chip.add('option', 'idir', f"{root}/{item}/rtl")
for name, dep in dependencies.items():
lib = Library(chip, f'la_{name}', package='lambdalib')

for path in [name, *dep]:
lib.add('option', 'ydir', f"lambdalib/{path}/rtl")
lib.add('option', 'idir', f"lambdalib/{path}/rtl")

libs.append(lib)

return chip
return libs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import os
import re
import siliconcompiler


Expand All @@ -15,5 +14,5 @@
chip.add('option', 'ydir', f'{root}/submodules/openpdks/pdks/sky130/libs/sky130io/bb')
chip.set('option', 'relax', True)
chip.set('option', 'steplist', ['import', 'syn', 'floorplan'])
chip.set('asic', 'diearea', [(0,0), (2000,2000)])
chip.set('asic', 'diearea', [(0, 0), (2000, 2000)])
chip.run()
2 changes: 1 addition & 1 deletion padring/padring.py → lambdalib/padring/padring.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import siliconcompiler
import os


########################
# SiliconCompiler Setup
########################

def setup(target=None):
'''Lambdalib Padring Setup'''

Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
37 changes: 37 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
[build-system]
requires = [
"setuptools >= 61.2",
"setuptools_scm[toml] >= 6.2"
]
build-backend = "setuptools.build_meta"

[tool.setuptools]
include-package-data = false
packages = [
"lambdalib"
]

[project]
name = "lambdalib"
authors = [{name = "Zero ASIC"}]
description = "Standardized ASIC design libraries"
readme = "README.md"
urls = {Homepage = "https://github.com/siliconcompiler/lambdalib"}
requires-python = ">= 3.8"
license = {file = "LICENSE"}
dependencies = [
"siliconcompiler >= 0.17.0"
]
version = "0.1.0"

[tool.pytest.ini_options]
testpaths = "tests"
timeout = "60"

[project.optional-dependencies]
# Dev dependencies.
dev = [
"flake8 >= 5.0.0",
"pytest >= 6.2.4",
"pytest-timeout >= 2.1.0"
]
8 changes: 8 additions & 0 deletions tests/test_local_detect.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from siliconcompiler import Chip
from lambdalib import register_data_source


def test_local_install_detection():
chip = Chip('<test>')
register_data_source(chip)
assert 'git+https' not in chip.get('package', 'source', 'lambdalib', 'path')
9 changes: 9 additions & 0 deletions tests/test_paths.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from siliconcompiler import Chip

from lambdalib import lambdalib


def test_pdk_paths():
chip = Chip('<lib>')
chip.use(lambdalib)
assert chip.check_filepaths()
24 changes: 24 additions & 0 deletions tests/test_setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from siliconcompiler import Chip

from lambdalib import lambdalib


def test_setup_without_depencency():
chip = Chip('<lib>')
chip.use(lambdalib)

assert 'la_stdlib' in chip.getkeys('library')

assert len(chip.get('library', 'la_stdlib', 'option', 'ydir')) == 1


def test_setup_with_depencency():
chip = Chip('<lib>')
chip.use(lambdalib)

assert 'la_stdlib' in chip.getkeys('library')
assert 'la_iolib' in chip.getkeys('library')
assert 'la_ramlib' in chip.getkeys('library')

assert len(chip.get('library', 'la_iolib', 'option', 'ydir')) == 2
assert len(chip.get('library', 'la_ramlib', 'option', 'ydir')) == 2