![Moore.io Client Logo](https://mooreio.com/dab41100c71545e7520e.png)
[![Documentation Status](https://readthedocs.org/projects/mooreio-client/badge/?version=latest)](https://mooreio-client.readthedocs.io/en/latest/?badge=latest)
# Moore.io Client
The Moore.io Client is an open-source CLI tool designed to automate Electronic Design Automation (EDA) tasks encountered
during the development of ASIC, FPGA and UVM IP. This tool also serves as a client for the Moore.io Web Site
(https://mooreio.com), providing functionalities such as installing IP dependencies, generating UVM code and
packaging/publishing IPs.
## Why?
The EDA (Electronic Design Automation) field clearly lags behind in terms of Free & Open-Source (FOS) developer tools
when compared to the software world. There is no FOS tool that can drive the various CAD software necessary and provide
the kind of automation needed to produce commercial-grade FPGA and ASIC designs. Instead, homebrew (and seldom shared)
Makefiles and Shell scripts rule the field of DevOps in semiconductors.
### The Problem
Writing a Makefile/Shell script that can perform all the tasks required to create a Chip Design is a LARGE job. Since
these languages do not come with any meaningful libraries, the end result is a mess of patched, brittle code painful to
maintain/debug, yet on which every engineering task directly depends. These issues are usually compounded by
copying the project Makefile/Shell script from project to project; thus losing all Git history while commenting
out old code and adding to the mess.
Surely, there must be a better way ...
### The Solution
The Moore.io Client is a FOS Command Line Interface (CLI) tool implemented in Python 3, using Object-Oriented
Practices, strong typing, unit testing, and a modular architecture that will be very familiar to UVM engineers: the
primary target audience of this tool. The Client, invoked via `mio`, has all the features you would expect from a
"Project Makefile" at a high-end Semiconductor engineering firm AND all the best features from Software package
managers:
* The concept of a Project, which is identified by a `mio.toml` file in its root directory
* A layered Configuration Space defined with TOML files (`mio.toml`) at the user (`~/.mio/mio.toml`) and project levels
* Packaging of HDL source file into IPs (Intellectual Property) identified by `ip.yml` descriptors in their root directory
* Performing tasks at the IP-level, including generating code, specifying and installing dependencies
* Ability to drive all Logic Simulators (VCS, XCelium, Questa, Vivado, Metrics DSim, Riviera-PRO) with a single set of commands and parameters
* A feature-driven Test Suite schema for specifying Regressions in UVM Test Benches, AND the ability to run these Regressions on Job Schedulers (LSF, GRID, etc.)
* Built-in compatibility with Continuous Integration (CI) tools like Jenkins
## How much does it cost?
The EDA Automation and Package management is Free & Open-Source. Some commands, such as UVM Code Generation, "phone
home" to the Moore.io Server and therefore require a User Account (which can be created at
https://mooreio.com/register) and a license for Datum UVMx. However, the tool operates independently of the site in all
other regards and can be used without authentication to build a Chip from start to finish.
## Installation
You can install `mio` via `pip`:
```sh
pip install mooreio_client
```
## Usage
```sh
mio <command> [<args>]
mio help <command>
```
For complete list of commands and options, you can use:
```sh
mio --help
```
For quick reference on a specific command:
```sh
mio help <command>
```
## Documentation
Comprehensive documentation is available on [Read the Docs](http://mooreio-client.rtfd.io/).
## Development
### Architecture
The Design Pattern for the Moore.io Client mimics UVM's phases and component structure. A RootManager (RM) class instance
is created by the CLI argument parser and given a Command instance to execute. The RM operates in 3 steps:
1. Discovery: finding the project file, loading/validating the configuration space and finding/loading IP files
2. Main: RM gives control to the Command which invokes Service(s) (simulators, synthesizers, etc.) to perform Task(s) (compilation, simulation, etc.) via a JobScheduler instance (SubProcess, LSF, GRID) which accepts Jobs (shell commands)
3. Post: RM and Command parse results, generate reports, clean up files, close sockets, stop processes and print out final notes to the user
Each step is broken up into phases, with each phase having a 'pre' and 'post' phase associated to it:
* The Discovery step is handled by the RM; the Command can participate via pre/post phase hooks
* During the Main phase, control shifts to the Command, which has a selection of Service tasks and JobSchedulers with which to run them
* The post step is shared between the RM and the Command
Each phase method has a Phase instance parameter that can be used to end the program arbitrarily and/or report errors to the RM.
Commands are discovered by `cli.py` and must append their CLI argument subparser to the main `argparse` instance.
If the user selects the command, an instance is created, fed to the RM and execution begins via `RM.run()`.
Errors are handled via the `raise` of Python Exceptions. The RM catches these and exits with the appropriate error message and return code.
### Requirements
- Python 3.11.4
- `pip` package manager
- `make` utility (for convenience in development and CI)
### Setup
1. Clone the repository:
```sh
git clone https://github.com/Datum-Technology-Corporation/mooreio_client.git
cd mooreio_client
```
2. Set up Virtual Environment and install Dependencies:
```sh
make venv
```
3. Run tests:
```sh
make test
```
4. Build documentation:
```sh
make docs
```
5. Build package:
```sh
make build
```
6. Print Makefile User Manual:
```sh
make help
```
## Continuous Integration
Most popular CI/CD tools are supported out-of-the-box. Some systems are better fleshed out than others; please don't
hesitate to contribute your tweaks!
### Supported Continuous Integration Tools
- Azure Pipelines
- Bamboo
- Bitbucket Pipelines
- CircleCI
- Codeship
- GitHub Actions
- GitLab CI/CD
- Jenkins
- TeamCity
- Travis CI
## Contributing
We welcome contributions! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) file for guidelines on how to contribute.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Contact
- Official site: [www.mooreio.com](http://www.mooreio.com)
- Copyright Holder: [Datum Technology Corporation](http://www.datumtc.ca)
Raw data
{
"_id": null,
"home_page": "https://github.com/Datum-Technology-Corporation/mooreio_client",
"name": "mooreio-client",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.12",
"maintainer_email": null,
"keywords": "SystemVerilog, UVM, DV, verilog, VHDL, hdl, rtl, synthesis, FPGA, simulation, Xilinx, Vivado, Altera, Metrics, DSim",
"author": "Datum Technology Corporation",
"author_email": "info@datumtc.ca",
"download_url": "https://files.pythonhosted.org/packages/00/1c/62fac0daafe8e37a9c83e0b39e06c967fb8e4431b84b95e007bf33d765ef/mooreio_client-2.0.4.tar.gz",
"platform": null,
"description": "![Moore.io Client Logo](https://mooreio.com/dab41100c71545e7520e.png)\n\n[![Documentation Status](https://readthedocs.org/projects/mooreio-client/badge/?version=latest)](https://mooreio-client.readthedocs.io/en/latest/?badge=latest)\n\n# Moore.io Client\n\nThe Moore.io Client is an open-source CLI tool designed to automate Electronic Design Automation (EDA) tasks encountered\nduring the development of ASIC, FPGA and UVM IP. This tool also serves as a client for the Moore.io Web Site\n(https://mooreio.com), providing functionalities such as installing IP dependencies, generating UVM code and\npackaging/publishing IPs.\n\n## Why?\nThe EDA (Electronic Design Automation) field clearly lags behind in terms of Free & Open-Source (FOS) developer tools\nwhen compared to the software world. There is no FOS tool that can drive the various CAD software necessary and provide\nthe kind of automation needed to produce commercial-grade FPGA and ASIC designs. Instead, homebrew (and seldom shared)\nMakefiles and Shell scripts rule the field of DevOps in semiconductors.\n\n### The Problem\nWriting a Makefile/Shell script that can perform all the tasks required to create a Chip Design is a LARGE job. Since\nthese languages do not come with any meaningful libraries, the end result is a mess of patched, brittle code painful to\nmaintain/debug, yet on which every engineering task directly depends. These issues are usually compounded by\ncopying the project Makefile/Shell script from project to project; thus losing all Git history while commenting\nout old code and adding to the mess.\n\nSurely, there must be a better way ...\n\n### The Solution\nThe Moore.io Client is a FOS Command Line Interface (CLI) tool implemented in Python 3, using Object-Oriented\nPractices, strong typing, unit testing, and a modular architecture that will be very familiar to UVM engineers: the\nprimary target audience of this tool. The Client, invoked via `mio`, has all the features you would expect from a\n\"Project Makefile\" at a high-end Semiconductor engineering firm AND all the best features from Software package\nmanagers:\n\n * The concept of a Project, which is identified by a `mio.toml` file in its root directory\n * A layered Configuration Space defined with TOML files (`mio.toml`) at the user (`~/.mio/mio.toml`) and project levels\n * Packaging of HDL source file into IPs (Intellectual Property) identified by `ip.yml` descriptors in their root directory\n * Performing tasks at the IP-level, including generating code, specifying and installing dependencies\n * Ability to drive all Logic Simulators (VCS, XCelium, Questa, Vivado, Metrics DSim, Riviera-PRO) with a single set of commands and parameters\n * A feature-driven Test Suite schema for specifying Regressions in UVM Test Benches, AND the ability to run these Regressions on Job Schedulers (LSF, GRID, etc.)\n * Built-in compatibility with Continuous Integration (CI) tools like Jenkins\n\n## How much does it cost?\nThe EDA Automation and Package management is Free & Open-Source. Some commands, such as UVM Code Generation, \"phone\nhome\" to the Moore.io Server and therefore require a User Account (which can be created at\nhttps://mooreio.com/register) and a license for Datum UVMx. However, the tool operates independently of the site in all\nother regards and can be used without authentication to build a Chip from start to finish. \n\n\n## Installation\n\nYou can install `mio` via `pip`:\n\n```sh\npip install mooreio_client\n```\n\n## Usage\n\n```sh\nmio <command> [<args>]\nmio help <command>\n```\n\nFor complete list of commands and options, you can use:\n\n```sh\nmio --help\n```\n\nFor quick reference on a specific command:\n\n```sh\nmio help <command>\n```\n\n## Documentation\n\nComprehensive documentation is available on [Read the Docs](http://mooreio-client.rtfd.io/).\n\n## Development\n\n### Architecture\nThe Design Pattern for the Moore.io Client mimics UVM's phases and component structure. A RootManager (RM) class instance\nis created by the CLI argument parser and given a Command instance to execute. The RM operates in 3 steps:\n\n1. Discovery: finding the project file, loading/validating the configuration space and finding/loading IP files\n2. Main: RM gives control to the Command which invokes Service(s) (simulators, synthesizers, etc.) to perform Task(s) (compilation, simulation, etc.) via a JobScheduler instance (SubProcess, LSF, GRID) which accepts Jobs (shell commands) \n3. Post: RM and Command parse results, generate reports, clean up files, close sockets, stop processes and print out final notes to the user \n\nEach step is broken up into phases, with each phase having a 'pre' and 'post' phase associated to it:\n\n* The Discovery step is handled by the RM; the Command can participate via pre/post phase hooks\n* During the Main phase, control shifts to the Command, which has a selection of Service tasks and JobSchedulers with which to run them\n* The post step is shared between the RM and the Command\n\nEach phase method has a Phase instance parameter that can be used to end the program arbitrarily and/or report errors to the RM.\n\nCommands are discovered by `cli.py` and must append their CLI argument subparser to the main `argparse` instance.\nIf the user selects the command, an instance is created, fed to the RM and execution begins via `RM.run()`.\n\nErrors are handled via the `raise` of Python Exceptions. The RM catches these and exits with the appropriate error message and return code.\n\n\n### Requirements\n\n- Python 3.11.4\n- `pip` package manager\n- `make` utility (for convenience in development and CI)\n\n### Setup\n\n1. Clone the repository:\n ```sh\n git clone https://github.com/Datum-Technology-Corporation/mooreio_client.git\n cd mooreio_client\n ```\n\n2. Set up Virtual Environment and install Dependencies:\n ```sh\n make venv\n ```\n\n3. Run tests:\n ```sh\n make test\n ```\n\n4. Build documentation:\n ```sh\n make docs\n ```\n\n5. Build package:\n ```sh\n make build\n ```\n\n6. Print Makefile User Manual:\n ```sh\n make help\n ```\n\n## Continuous Integration\nMost popular CI/CD tools are supported out-of-the-box. Some systems are better fleshed out than others; please don't\nhesitate to contribute your tweaks!\n\n### Supported Continuous Integration Tools\n- Azure Pipelines\n- Bamboo\n- Bitbucket Pipelines\n- CircleCI\n- Codeship\n- GitHub Actions\n- GitLab CI/CD\n- Jenkins\n- TeamCity\n- Travis CI\n\n## Contributing\n\nWe welcome contributions! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) file for guidelines on how to contribute.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Contact\n\n- Official site: [www.mooreio.com](http://www.mooreio.com)\n- Copyright Holder: [Datum Technology Corporation](http://www.datumtc.ca)\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "CLI tool to automate EDA tasks for ASICs, FPGAs, and UVM IP.",
"version": "2.0.4",
"project_urls": {
"Author": "https://www.datumtc.ca/",
"Bug Tracker": "https://github.com/Datum-Technology-Corporation/mooreio_client/issues",
"Documentation": "http://mooreio-client.rtfd.io/",
"Homepage": "https://github.com/Datum-Technology-Corporation/mooreio_client",
"Web Site": "https://www.mooreio.com/"
},
"split_keywords": [
"systemverilog",
" uvm",
" dv",
" verilog",
" vhdl",
" hdl",
" rtl",
" synthesis",
" fpga",
" simulation",
" xilinx",
" vivado",
" altera",
" metrics",
" dsim"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "b608e8cdde90a0577f01e8d0314a78edc733fd12d192b427c14d5575246201c6",
"md5": "d652890e29ce7dd52c3f443ffeb588c6",
"sha256": "b9a01d13326f504fd30df250f6a305b66eb12e05d25ae0e5d5c0def1014c58b3"
},
"downloads": -1,
"filename": "mooreio_client-2.0.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d652890e29ce7dd52c3f443ffeb588c6",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.12",
"size": 107299,
"upload_time": "2024-11-28T20:18:09",
"upload_time_iso_8601": "2024-11-28T20:18:09.729509Z",
"url": "https://files.pythonhosted.org/packages/b6/08/e8cdde90a0577f01e8d0314a78edc733fd12d192b427c14d5575246201c6/mooreio_client-2.0.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "001c62fac0daafe8e37a9c83e0b39e06c967fb8e4431b84b95e007bf33d765ef",
"md5": "3623acd0a75bc3910abf616f8a2b72a6",
"sha256": "2e0c75e884da454ca9b064db4055735596b1184f6028a2bf761819b832a854fe"
},
"downloads": -1,
"filename": "mooreio_client-2.0.4.tar.gz",
"has_sig": false,
"md5_digest": "3623acd0a75bc3910abf616f8a2b72a6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.12",
"size": 87866,
"upload_time": "2024-11-28T20:18:13",
"upload_time_iso_8601": "2024-11-28T20:18:13.453353Z",
"url": "https://files.pythonhosted.org/packages/00/1c/62fac0daafe8e37a9c83e0b39e06c967fb8e4431b84b95e007bf33d765ef/mooreio_client-2.0.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-28 20:18:13",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Datum-Technology-Corporation",
"github_project": "mooreio_client",
"travis_ci": true,
"coveralls": false,
"github_actions": true,
"circle": true,
"requirements": [],
"lcname": "mooreio-client"
}