IPM is an open-source IPs Package Manager; it is meant to provide a mean for distributing high quality open-source IPs.
To create a Personal Github Token Follow this link, make sure to check the boxes repo
, workflow
and write:packages
.
export GITHUB_TOKEN=<your_github_token>
Generate your public ssh key on your machine, then Follow this link to add it to your github account.
pip install ipmgr
ipm --version
Note: Before installing IPM you must uninstall previous version of IPM using the following commands.
pip uninstall ipm
pip uninstall ipmgr
ipm ls-remote
Lists all verified IPs supported by IPM, and verified by efabless, it shows the primary details about the IPs.
ipm info <ip_name>
Gives more details about a specific IP.
ipm ls
Lists all locally installed IPs on the machine.
ipm install <ip_name> [OPTIONS]
Installs the IP by default in {PWD}/ip
, you can also specify the ip installation directory using --ip-root
. The user must provide a valid ip_name
, to check all available IPs run ipm ls-remote
.
To install a specific version of the IP you can specify it using --version <version>
While IPM is installing the IP, if the IP's bus is generic
it will create bus wrappers for AHBL
, APB
, WB
and will create firmware fw
, using bus wrapper generator tool
ipm install-dep <ip_name> [OPTIONS]
Installs IPs specified in a dependencies file, by default it looks in {PWD}/ip/dependencies.json
. You can specify the dependencies file location using --ip-root
ipm uninstall <ip_name>
Uninstalls a locally installed IP. The user must provide a valid installed ip_name
, to check all installed IPs run ipm ls
. It is advised to always use this function when you wish to remove an IP. If you deleted the folder manually or renamed it this function may face errors
ipm rm <ip_name>
Removes the IP from the project, but doesn't uninstall it from the machine, to uninstall from machine use ipm uninstall
, it is advised to rm
from project before uninstalling.
ipm check [OPTIONS]
Checks if there are newer versions available for the installed IPs. The function by default checks all the installed IPs for updates.
ipm update [OPTIONS]
Updates the IP if an update is available.
To add your own IP to our package manager, you should follow these steps:
All IPs must include:
- readme.md
- <ip>.json
- doc/datasheet.pdf
- hdl/rtl/bus_wrapper **optional**
- fw
- verify/beh_model
All digital and analog hard IPs must include:
- hdl/gl
- timing/lib
- timing/sdf
- timing/spef
- layout/gds
- layout/lef
All Analog IPs must include:
- spice
All soft digital IPs must include:
- hdl/rtl/design
- verify
- pnr **optional**
- verify/utb
Directory structure should look like:
├── readme.md
├── <ip>.json
├── doc\
│ └── datasheet.pdf
├── layout\
│ ├── gds\
│ └── lef\
├── timing\
│ ├── lib\
│ ├── spef\
│ └── sdf\
├── spice\
├── hdl\
│ ├── rtl\
│ │ ├── bus_wrapper\
│ │ └── design\
│ └── gl\
├── fw\
├── verify\
│ ├── utb\
│ └── beh_model\
└── pnr\
NOTE
verify
directory should include basic unit tests to help the designers build their verificationbus_wrapper
directory contains RTL for IP wrappers to ease system bus connectionfw
directory contains device drivers (.c
and .h
files)Your <ip>.json
file should look like:
{
"info": {
"name": "<ip name>",
"description": "<ip_description>",
"repo": "<src repo>",
"owner": "<owner of IP>",
"license": "<license of IP>",
"author": "<author of IP>",
"email": "<email of author/owner>",
"version": "<IP version>",
"date": "<mm-dd-yyyy>",
"category": "<analog/digital/AMS>",
"tags": [
"<tags for ip>"
],
"bus": [
"<APB|AHBL|WB|generic>"
],
"type": "<hard|soft|firm|hybrid",
"status": "<Verified|FPGA Validated|SI Validated|Production Ready>",
"cell_count": "<number of cells in ip>",
"width": "<width of IP in um>",
"height": "<height of IP in um>",
"technology": "<sky130A|sky130B|gf180mcuC|gf180mcuD|n/a>",
"clock_freq_mhz": "<clock frequency of IP>",
"supply_voltage": [
"<supply voltage of IP>"
]
}
}
All the above fields must be included in your file
Compress your folder into a tarball (tar.gz) with the name <version>.tar.gz
, where version
is the version of your release, you can do that by running:
cd <ip_directory>
tar czf <version>.tar.gz *
create a new release in your GH repo with the tag <version>
and add the tarball created there to the release's assets
Once you are done you can run a package_check function locally by running ipm package-check
which checks that you’ve completed the above steps successfully. Options for IP name
, version
and the GH repo
are required
NOTE: THIS IS STILL A WIP
If the pre-check was successful you can submit your IP through the form ......
IPM team will then perform set of sanity checks to ensure the quality of the submitted IP. This checker shall ensure:
IPM - IP MANAGER
Vendor
Efabless
Design Flow
Free