ipmgr


Nameipmgr JSON
Version 1.1.0 PyPI version JSON
download
home_pagehttps://efabless.com
SummaryPackage manager for Open Source ASIC IPs
upload_time2024-08-31 07:43:53
maintainerNone
docs_urlNone
authorEfabless Corporation
requires_python>=3.8.0
licenseApache-2.0
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # IPM
IPM is an open-source ChipIgnite Program IPs Package Manager; it is meant to provide a mean for distributing high quality IPs. IPM is tied to the IPs that can be found in [Efabless Market Place](https://platform.efabless.com/design_catalog/ip_block).

## Installation

IPM is now on PyPi, you can install it using this command:

```bash
pip install ipmgr
```

To verify it is working run: 

```bash
ipm --version
``` 

# Usage

## List all available IPs
You can do that by visiting the [Efabless Market Place](https://platform.efabless.com/design_catalog/ip_block), Or using this command
```bash
ipm ls-remote
``` 

## Get more info about a specific IP from the CLI
```bash
ipm info <ip_name>
```

## Install IP
```bash
ipm install <IP_NAME> [OPTIONS]
``` 
**Options:**

  `--version`   Install IP with a specific version

  `--ip-root`   IP installation path [default: `{PWD}/ip`]

  `--ipm-root`  Path to the IPM root where the IPs will reside  [default: `~/.ipm`]

  `--help`          Show this message and exit

> [!NOTE]  
> IPM installs the IPs in a shared directory `ipm-root` which is by default set to `~/.ipm`, then it will create a symlink to `ip-root` which is by default set to `{PWD}/ip`.

> [!TIP]  
> IPM will create a `dependencies.json` file under `ip-root`, which will have all the IPs that you used in your project. Push this file to your repo in order to have a reproducible project.

## Install IPs from dependencies file
```bash
ipm install-dep [OPTIONS]
``` 
**Options:**

  `--ip-root`    IP path [default: `{PWD}/ip/dependencies.json`]

  `--ipm-root`  Path to the IPM root where the IPs will reside  [default: `~/.ipm`]

  `--help`           Show this message and exit
> [!NOTE]
> This will download the IPs in the `dependencies.json`, with the same versions that it used inside the file

## Uninstalling IPs
```bash
ipm uninstall <IP_NAME> [OPTIONS]
``` 
**Options:**

  `--version`     Uninstall IP with a specific version

  `-f, --force` Forces the uninstall

  `--ipm-root`   Path to the IPM root where the IPs will reside  [default: `~/.ipm`]

  `--help`            Show this message and exit
> [!TIP]
> It is advised to use this command rather than deleting the IP manually

## Remove IP from project
```bash
ipm rm <IP_NAME> [OPTIONS]
```
**Options:**

  `--ipm-root`  Path to the IPM root where the IPs are installed  [default: `~/.ipm`]

  `--ip-root`      IP path [default: `{PWD}/ip`]

  `--help`             Show this message and exit

## Update IP
```bash
ipm update [IP_NAME][OPTIONS]
``` 
**Options:**

  `--ipm-root`  Path to the IPM root where the IPs will reside  [default: `~/.ipm`]

  `--ip-root`    IP path [default: `{PWD}/ip`]

  `--help`           Show this message and exit

> [!NOTE]
> If an IP_NAME is provided it will only update this IP, if not it will update all installed IPs

## Adding your IP to IPM

> [!CAUTION]
> The next part is a WIP, and for now only Efabless can add IPs to IPM and the market place. If you are interested in adding your own IP please contact Efabess.

To add your own IP to our package manager, you should follow these steps:

### 1. Package your IP with the following folder structure:

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 verification
- `bus_wrapper` directory contains RTL for IP wrappers to ease system bus connection
- `fw` directory contains device drivers (`.c` and `.h` files)

### 2. IP metadata file structure

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",
        "maturity": "<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**

### 3. Create tarball
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:
```bash
cd <ip_directory>
tar czf <version>.tar.gz *
``` 
### 4. Create release 
create a new release in your GH repo with the tag ```<version>``` and add the tarball created there to the release's assets
### 5. IPM package_check
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**

### 6. Submit
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:
- That the IP is LVS clean
- That the IP is DRC clean

## Additional Docs
- [Awesome Sky130 IPs](https://github.com/shalan/Awesome-Sky130-IPs)
- [Sky130 Open-source IP Catalog](https://github.com/efabless/skywater-pdk-central/blob/main/design-ip.md)


            

Raw data

            {
    "_id": null,
    "home_page": "https://efabless.com",
    "name": "ipmgr",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8.0",
    "maintainer_email": null,
    "keywords": null,
    "author": "Efabless Corporation",
    "author_email": "marwan.abbas@efabless.com",
    "download_url": "https://files.pythonhosted.org/packages/8b/ec/d70c71a696c0e360cba4bbb5908bd2f720fa6b8c032fa64264ef96c585e9/ipmgr-1.1.0.tar.gz",
    "platform": null,
    "description": "# IPM\nIPM is an open-source ChipIgnite Program IPs Package Manager; it is meant to provide a mean for distributing high quality IPs.\u00a0IPM is tied to the IPs that can be found in [Efabless Market Place](https://platform.efabless.com/design_catalog/ip_block).\n\n## Installation\n\nIPM is now on PyPi, you can install it using this command:\n\n```bash\npip install ipmgr\n```\n\nTo verify it is working run: \n\n```bash\nipm --version\n``` \n\n# Usage\n\n## List all available IPs\nYou can do that by visiting the [Efabless Market Place](https://platform.efabless.com/design_catalog/ip_block),\u00a0Or using this command\n```bash\nipm ls-remote\n``` \n\n## Get more info about a specific IP from the CLI\n```bash\nipm info <ip_name>\n```\n\n## Install IP\n```bash\nipm install <IP_NAME> [OPTIONS]\n``` \n**Options:**\n\n\u00a0 `--version`\u00a0 \u00a0Install IP with a specific version\n\n\u00a0 `--ip-root`\u00a0 \u00a0IP installation path [default: `{PWD}/ip`]\n\n\u00a0 `--ipm-root`\u00a0 Path to the IPM root where the IPs will reside\u00a0 [default: `~/.ipm`]\n\n\u00a0 `--help` \u00a0 \u00a0 \u00a0    Show this message and exit\n\n> [!NOTE]  \n> IPM installs the IPs in a shared directory `ipm-root` which is by default set to `~/.ipm`, then it will create a symlink to `ip-root` which is by default set to `{PWD}/ip`.\n\n> [!TIP]  \n> IPM will create a `dependencies.json` file under `ip-root`, which will have all the IPs that you used in your project. Push this file to your repo in order to have a reproducible project.\n\n## Install IPs from dependencies file\n```bash\nipm install-dep [OPTIONS]\n``` \n**Options:**\n\n\u00a0 `--ip-root`\u00a0 \u00a0 IP path [default: `{PWD}/ip/dependencies.json`]\n\n\u00a0 `--ipm-root`\u00a0 Path to the IPM root where the IPs will reside\u00a0 [default: `~/.ipm`]\n\n\u00a0 `--help` \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Show this message and exit\n> [!NOTE]\n> This will download the IPs in the `dependencies.json`, with the same versions that it used inside the file\n\n## Uninstalling IPs\n```bash\nipm uninstall <IP_NAME> [OPTIONS]\n``` \n**Options:**\n\n\u00a0 `--version`\u00a0 \u00a0 \u00a0Uninstall IP with a specific version\n\n\u00a0 `-f, --force` Forces the uninstall\n\n\u00a0 `--ipm-root`\u00a0 \u00a0Path to the IPM root where the IPs will reside\u00a0 [default: `~/.ipm`]\n\n\u00a0 `--help`\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Show this message and exit\n> [!TIP]\n> It is advised to use this command rather than deleting the IP manually\n\n## Remove IP from project\n```bash\nipm rm <IP_NAME> [OPTIONS]\n```\n**Options:**\n\n\u00a0 `--ipm-root`\u00a0 Path to the IPM root where the IPs are installed\u00a0 [default: `~/.ipm`]\n\n\u00a0 `--ip-root`\u00a0 \u00a0 \u00a0 IP path [default: `{PWD}/ip`]\n\n\u00a0 `--help`\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Show this message and exit\n\n## Update IP\n```bash\nipm update [IP_NAME][OPTIONS]\n``` \n**Options:**\n\n\u00a0 `--ipm-root`\u00a0 Path to the IPM root where the IPs will reside\u00a0 [default: `~/.ipm`]\n\n\u00a0 `--ip-root`\u00a0 \u00a0 IP path [default: `{PWD}/ip`]\n\n\u00a0 `--help` \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Show this message and exit\n\n> [!NOTE]\n> If an IP_NAME is provided it will only update this IP, if not it will update all installed IPs\n\n## Adding your IP to IPM\n\n> [!CAUTION]\n> The next part is a WIP, and for now only Efabless can add IPs to IPM and the market place. If you are interested in adding your own IP please contact Efabess.\n\nTo add your own IP to our package manager, you should follow these steps:\n\n### 1. Package your IP with the following folder structure:\n\nAll IPs must include:\n\n    - readme.md\n    - <ip>.json\n    - doc/datasheet.pdf\n    - hdl/rtl/bus_wrapper **optional**\n    - fw\n    - verify/beh_model\n\nAll digital and analog hard IPs must include:\n    \n    - hdl/gl\n    - timing/lib\n    - timing/sdf\n    - timing/spef\n    - layout/gds\n    - layout/lef\n\nAll Analog IPs must include:\n\n    - spice\n\nAll soft digital IPs must include:\n\n    - hdl/rtl/design\n    - verify\n    - pnr **optional**\n    - verify/utb\n\nDirectory structure should look like:\n\n```\n\u251c\u2500\u2500 readme.md\n\u251c\u2500\u2500 <ip>.json\n\u251c\u2500\u2500 doc\\\n\u2502   \u2514\u2500\u2500 datasheet.pdf\n\u251c\u2500\u2500 layout\\\n\u2502   \u251c\u2500\u2500 gds\\\n\u2502   \u2514\u2500\u2500 lef\\\n\u251c\u2500\u2500 timing\\\n\u2502   \u251c\u2500\u2500 lib\\\n\u2502   \u251c\u2500\u2500 spef\\\n\u2502   \u2514\u2500\u2500 sdf\\\n\u251c\u2500\u2500 spice\\\n\u251c\u2500\u2500 hdl\\ \n\u2502   \u251c\u2500\u2500 rtl\\\n\u2502   \u2502   \u251c\u2500\u2500 bus_wrapper\\\n\u2502   \u2502   \u2514\u2500\u2500 design\\\n\u2502   \u2514\u2500\u2500 gl\\\n\u251c\u2500\u2500 fw\\\n\u251c\u2500\u2500 verify\\\n\u2502   \u251c\u2500\u2500 utb\\\n\u2502   \u2514\u2500\u2500 beh_model\\\n\u2514\u2500\u2500 pnr\\\n```\n\n**NOTE**\n\n- `verify` directory should include basic unit tests to help the designers build their verification\n- `bus_wrapper` directory contains RTL for IP wrappers to ease system bus connection\n- `fw` directory contains device drivers (`.c` and `.h` files)\n\n### 2. IP metadata file structure\n\nYour ```<ip>.json``` file should look like:\n\n```\n{\n    \"info\": {\n        \"name\": \"<ip name>\",\n        \"description\": \"<ip_description>\",\n        \"repo\": \"<src repo>\",\n        \"owner\": \"<owner of IP>\",\n        \"license\": \"<license of IP>\",\n        \"author\": \"<author of IP>\",\n        \"email\": \"<email of author/owner>\",\n        \"version\": \"<IP version>\",\n        \"date\": \"<mm-dd-yyyy>\",\n        \"category\": \"<analog/digital/AMS>\",\n        \"tags\": [\n            \"<tags for ip>\"\n        ],\n        \"bus\": [\n            \"<APB|AHBL|WB|generic>\"\n        ],\n        \"type\": \"<hard|soft|firm|hybrid\",\n        \"maturity\": \"<Verified|FPGA Validated|SI Validated|Production Ready>\",\n        \"cell_count\": \"<number of cells in ip>\",\n        \"width\": \"<width of IP in um>\",\n        \"height\": \"<height of IP in um>\",\n        \"technology\": \"<sky130A|sky130B|gf180mcuC|gf180mcuD|n/a>\",\n        \"clock_freq_mhz\": \"<clock frequency of IP>\",\n        \"supply_voltage\": [\n            \"<supply voltage of IP>\"\n        ]\n    }\n}\n```\n\n**All the above fields must be included in your file**\n\n### 3. Create tarball\nCompress 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:\n```bash\ncd <ip_directory>\ntar czf <version>.tar.gz *\n``` \n### 4. Create release \ncreate a new release in your GH repo with the tag ```<version>``` and add the tarball created there to the release's assets\n### 5. IPM package_check\nOnce you are done you can run a package_check function locally by running ```ipm package-check``` which checks that you\u2019ve completed the above steps successfully. Options for ```IP name```, ```version``` and the ```GH repo``` are required\n\n**NOTE: THIS IS STILL A WIP**\n\n### 6. Submit\nIf the pre-check was successful you can submit your IP through the form ......\n\nIPM team will then perform set of sanity checks to ensure the quality of the submitted IP. This checker shall ensure:\n- That the IP is LVS clean\n- That the IP is DRC clean\n\n## Additional Docs\n- [Awesome Sky130 IPs](https://github.com/shalan/Awesome-Sky130-IPs)\n- [Sky130 Open-source IP Catalog](https://github.com/efabless/skywater-pdk-central/blob/main/design-ip.md)\n\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "Package manager for Open Source ASIC IPs",
    "version": "1.1.0",
    "project_urls": {
        "Homepage": "https://efabless.com",
        "Repository": "https://github.com/efabless/ipm"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fd791578b2d37de1a22bdb3c4c15d98d80a4f5d39279b08a7fe31dc5ce59e185",
                "md5": "421e72eeedafcc862194c36ae7c3c2d1",
                "sha256": "8203094d8f5a97a6d6717bcaa2e929f18a86bb5391f544965bf652bb8ce974eb"
            },
            "downloads": -1,
            "filename": "ipmgr-1.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "421e72eeedafcc862194c36ae7c3c2d1",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8.0",
            "size": 24299,
            "upload_time": "2024-08-31T07:43:51",
            "upload_time_iso_8601": "2024-08-31T07:43:51.030528Z",
            "url": "https://files.pythonhosted.org/packages/fd/79/1578b2d37de1a22bdb3c4c15d98d80a4f5d39279b08a7fe31dc5ce59e185/ipmgr-1.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8becd70c71a696c0e360cba4bbb5908bd2f720fa6b8c032fa64264ef96c585e9",
                "md5": "6a5a63d0d0aa9ef8087124474c3df164",
                "sha256": "ee1fbf5e74a4b4121efaa8130ce59e22a07d1c36f7e3f25433773498ec551061"
            },
            "downloads": -1,
            "filename": "ipmgr-1.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "6a5a63d0d0aa9ef8087124474c3df164",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8.0",
            "size": 23328,
            "upload_time": "2024-08-31T07:43:53",
            "upload_time_iso_8601": "2024-08-31T07:43:53.092989Z",
            "url": "https://files.pythonhosted.org/packages/8b/ec/d70c71a696c0e360cba4bbb5908bd2f720fa6b8c032fa64264ef96c585e9/ipmgr-1.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-08-31 07:43:53",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "efabless",
    "github_project": "ipm",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "ipmgr"
}
        
Elapsed time: 0.39521s