{ "info": { "author": "Bogdan Vukobratovic", "author_email": "bogdan.vukobratovic@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.6", "Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)" ], "description": "Welcome to PyGears \n==================\n\nHW Design: A Functional Approach\n---------------------------------\n\n**PyGears** is an ambitious attempt to create a Python framework that facilitates describing digital hardware. It aims to augment current RTL methodology to drastically increase **composability** of hardware modules. Ease of composition leads to better **reusability**, since modules that compose better can be used in a wider variety of contexts. Set of reusable components can then form a well-tested and documented library that significantly speeds up the development process. \n\nFor a guide through **PyGears** methodology, checkout `blog series on implementing RISC-V in PyGears `_. \n\nFor an introductory **PyGears** example, checkout `echo `_. A snippet is given below: \n\n.. code-block:: python\n\n @gear\n def echo(samples: Int, *, fifo_depth, feedback_gain, precision):\n dout = Intf(din.dtype)\n\n feedback = dout \\\n | fifo(depth=fifo_depth, threshold=fifo_depth - 1) \\\n | fill_void(fill=Int[16](0)) \\\n | decoupler\n\n feedback_attenuated = (feedback * feedback_gain) >> precision\n\n dout |= (din + feedback_attenuated) | dout.dtype\n\n return dout\n\n**PyGears** proposes a single generic interface for all modules (`read about the hardware implementation of the interface here `_) and provides a way to use powerful features of Python language to compose modules written in an existing HDL (currently only supports SystemVerilog). Based on the Python description, **PyGears** generates functionally equivalent, synthetizable RTL code.\n\nFurthermore, **PyGears** offers a way to write verification environment in high-level Python language and co-simulate the generated RTL with an external HDL simulator. **PyGears** features a completely free solution using `Verilator `_ simulator and standard SystemVerilog simulators via the `DPI `_ (tested on proprietary Questa and NCSim simulators).\n\n**PyGears** also features a `library of standard modules `_ and the `cookbook library `_ that are ready to be used in a **PyGears** design.\n\nIn **PyGears**, each HDL module is considered a Python function, called the *gear*, hence the design is described in form of a functional (gear) composition. In order for HDL modules to be composable in this way, they need to be designed in accordance with the **Gears** methodology. You should probably `read a short intro to Gears `_ in order to understand this project from the hardware perspective.\n\n**PyGears** supports also the hierarchical gears which do not have a HDL implementation, but are defined in terms of other gears. Each gear accepts and returns interface objects as arguments, which represents module connections. This allows for a module composition to be described in terms of powerful functional concepts, such as: partial application, higher-order functions, function polymorphism.\n\n**PyGears** features a powerful system of `generic types `_, which allows for generic modules to be described, as well as to perform type checking of the gear composition.\n\nInstallation Instructions\n-------------------------\n\nFor the instruction checkout `Installation `_ page.\n\nRead the documentation\n----------------------\n\n`PyGears documentation `_\n\nCheckout the examples\n---------------------\n\n`Echo `_: Hardware module that applies echo audio effect to a continuous audio stream.\n\n`RISC-V processor `__: **PyGears** implementation. Checkout also the `RISC-V implementation blog series `_.\n\n`Tests `_: Contain many examples on how individual **PyGears** components operate\n\n`Library of standard modules `_\n\n`Cookbook library `_\n\nReferences\n----------\n\n- `Kortiq's `_ AIScale Deep Learning Processor was completely developed using **PyGears**\n\nContributions\n=============\n\nSpecial thanks to the people that helped develop this framework:\n\n- Andrea Erdeljan\n- Damjan Rakanovi\u0107\n- Nemanja Kajtez\n- Risto Peja\u0161inovi\u0107\n- Stefan Tambur\n- Vladimir Niki\u0107\n- Vladimir Vrba\u0161ki\n\nIn order to contribute, pull your copy from `github repository `_ and create a pull request.\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://www.pygears.org", "keywords": "functional hardware design Python simulator HDL ASIC FPGA Gears", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pygears", "package_url": "https://pypi.org/project/pygears/", "platform": "", "project_url": "https://pypi.org/project/pygears/", "project_urls": { "Homepage": "https://www.pygears.org" }, "release_url": "https://pypi.org/project/pygears/0.1.2/", "requires_dist": [ "jinja2 (>=2.10)", "pygears-tools" ], "requires_python": ">=3.6.0", "summary": "Framework for functional hardware design approach", "version": "0.1.2" }, "last_serial": 4425301, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "d11b343fc2cbc7386901bd1514f883ed", "sha256": "ddd25e7af93ccc42ad3922fbefa3c613c5b9a2850d5489db6448ab31cdbbf58d" }, "downloads": -1, "filename": "pygears-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d11b343fc2cbc7386901bd1514f883ed", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 181927, "upload_time": "2018-09-05T17:48:32", "url": "https://files.pythonhosted.org/packages/9a/73/32ab18beb16e86d420702f6d6049b41fa0bd7014b0e968c1827a27a9017c/pygears-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0aee922e55e54c204799a1f58272ea75", "sha256": "2bf11874c353ec6edb8b718f4b224d8ae76ac03a0b272333cd4dc45fcfc3d732" }, "downloads": -1, "filename": "pygears-0.1.tar.gz", "has_sig": false, "md5_digest": "0aee922e55e54c204799a1f58272ea75", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 90391, "upload_time": "2018-09-05T17:48:34", "url": "https://files.pythonhosted.org/packages/0e/91/bfe4f0ea15e65af6b4b91b3c8086162338c2db1d7a3778197e7bd990be71/pygears-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "5d1ab1eae4cf2e9cf54b697fa850615a", "sha256": "f4a1d4c60c976afd3a8553a783149ca48d82fa6c1a349c8a4f4bb9281eade871" }, "downloads": -1, "filename": "pygears-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "5d1ab1eae4cf2e9cf54b697fa850615a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 201669, "upload_time": "2018-10-07T11:41:00", "url": "https://files.pythonhosted.org/packages/cd/e7/825ccd678ed1d8f22d10cdc12855c5bf0822b20e1161711890d92efaa421/pygears-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5796cbe114e9c139bcf1d9671fd97a66", "sha256": "3b7cb1520ef7ea63d1442c7d85e9095cca6b74038904be79e8649ebd5f6a2d55" }, "downloads": -1, "filename": "pygears-0.1.1.tar.gz", "has_sig": false, "md5_digest": "5796cbe114e9c139bcf1d9671fd97a66", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 101442, "upload_time": "2018-10-07T11:41:02", "url": "https://files.pythonhosted.org/packages/ec/c2/fccaa328fa4a72aa46b2599d3a9fcb87d520cd143990ac42a4911df4de63/pygears-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "b3f855320d24a1094f3777a0949fa7df", "sha256": "0a8cf1d01e1337d771c571cd9298841f8f3bb50f1bc7d1477747ae51ca856e01" }, "downloads": -1, "filename": "pygears-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b3f855320d24a1094f3777a0949fa7df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 209440, "upload_time": "2018-10-28T21:18:48", "url": "https://files.pythonhosted.org/packages/a1/03/730e8f9ffa4c3cc65e8fe9ddcb55789bd5598a972e0162721726a08a0a08/pygears-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b67ae3ff25fffc0e2ced2b4f89376790", "sha256": "dce8cf537533476f2f5cc6a53049c3c7a091211f619cb205627a685fb02b82f9" }, "downloads": -1, "filename": "pygears-0.1.2.tar.gz", "has_sig": false, "md5_digest": "b67ae3ff25fffc0e2ced2b4f89376790", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 109048, "upload_time": "2018-10-28T21:18:50", "url": "https://files.pythonhosted.org/packages/4e/21/8dbe5bddd00828dcf4e5a12a9a18cab4a2cecf9deb3f13519a283b25f9bd/pygears-0.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b3f855320d24a1094f3777a0949fa7df", "sha256": "0a8cf1d01e1337d771c571cd9298841f8f3bb50f1bc7d1477747ae51ca856e01" }, "downloads": -1, "filename": "pygears-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b3f855320d24a1094f3777a0949fa7df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 209440, "upload_time": "2018-10-28T21:18:48", "url": "https://files.pythonhosted.org/packages/a1/03/730e8f9ffa4c3cc65e8fe9ddcb55789bd5598a972e0162721726a08a0a08/pygears-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b67ae3ff25fffc0e2ced2b4f89376790", "sha256": "dce8cf537533476f2f5cc6a53049c3c7a091211f619cb205627a685fb02b82f9" }, "downloads": -1, "filename": "pygears-0.1.2.tar.gz", "has_sig": false, "md5_digest": "b67ae3ff25fffc0e2ced2b4f89376790", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 109048, "upload_time": "2018-10-28T21:18:50", "url": "https://files.pythonhosted.org/packages/4e/21/8dbe5bddd00828dcf4e5a12a9a18cab4a2cecf9deb3f13519a283b25f9bd/pygears-0.1.2.tar.gz" } ] }