cicconf is a small command-line tool for managing an IC project that is
assembled from multiple git repositories.
It is built for the workflow where:
- each IP lives in its own repository
- the top-level IC needs specific branches, tags, or commits of those IPs
- tool repositories should also be pinned with the design
- new IPs should be generated from a shared template
An integrated circuit is usually made from multiple IP blocks maintained by different designers. Each IP should keep its own version history, but the top-level IC must still be able to lock each dependency to a known revision at milestones such as tapeout.
cicconf keeps that dependency list in a single config.yaml file and
provides commands to:
- clone all configured repositories
- report the current revision status of each dependency
- update or pull selected repositories
- create a new IP directory from a template
Latest development version:
git clone https://github.com/wulffern/cicconf
cd cicconf
python3 -m pip install --user -e .Published version:
python3 -m pip install cicconfCreate a config.yaml in the project directory:
options:
template:
ip: tech_sky130B/cicconf/ip_template.yaml
project: rply
technology: sky130nm
cpdk:
remote: git@github.com:wulffern/cpdk.git
revision: main
tech_sky130B:
remote: git@github.com:wulffern/tech_sky130B.git
revision: mainThen clone the configured repositories:
cicconf cloneTo inspect the current state of the working tree:
cicconf statuscicconf reads a YAML configuration file. By default it looks for
config.yaml.
The options section is used by newip:
options:
template:
ip: tech_sky130B/cicconf/ip_template.yaml
project: rply
technology: sky130nmRepository entries follow this pattern:
<folder>:
remote: <git url>
revision: <git branch|tag|hash>
on_clone: <optional shell command>Fields:
remote: repository URL to clonerevision: branch, tag, or commit to check out after cloneon_clone: optional shell command run inside the cloned repository
Template-based IP creation uses options.template.ip. A template file can
define:
dirs: directories to createcopy: files copied from a source IP when usedcreate: files written from inline textdo: shell commands executed after setupecho: text printed during generation
Top-level help:
cicconf --helpCurrent command set:
Usage: cicconf [OPTIONS] COMMAND [ARGS]...
Options:
--config TEXT Configuration file
--verbose / --no-verbose Turn on extra output
--rundir TEXT Where to run cicconf
--help Show this message and exit.
Commands:
clone Clone repositories in config file
newip Create a new IP with name <project>_<name>_<technology> ...
pull Pull latest data
status Report the status of each of the configured IPs
update Update IPs to correct branch according to config file
Examples:
cicconf clone
cicconf clone --https
cicconf clone --jobs 8
cicconf status
cicconf status --no-fast
cicconf update --regex "tech_.*" --jobs 8
cicconf pull --regex "cpdk|tech_.*" --jobs 8
cicconf newip bias
cicconf newip bias --project sun --technology sky130nmFollowing the same documentation model as cicsim, the repo now has focused
pages under docs/:
docs/index.md: overview and installdocs/config.md: configuration file formatdocs/clone.md: clone commanddocs/newip.md: newip command and template behaviordocs/status.md: status outputdocs/update.md: update commanddocs/pull.md: pull command
The docs/ directory is set up for Jekyll in the same style as cicsim.
To serve it locally:
cd docs
bundle install
bundle exec jekyll serveThen open the local URL printed by Jekyll.
- If you combine
--rundirwith--config, prefer an absolute path for--config. clone,pullandupdatenow use rich summary tables and can run repositories in parallel with--jobs.statusnow renders a rich table. Fast mode is the default and skips ahead/behind counting for speed. Usecicconf status --no-fastfor the fuller git summary.updatechecks out the configured revision before pulling.