{ "info": { "author": "WebFPGA", "author_email": "support@webfpga.io", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# webfpga/cli\n[![PyPI version](https://badge.fury.io/py/webfpga.svg)](https://badge.fury.io/py/webfpga)\n\n**Python migration is complete! This repository is feature-complete with the web\nIDE.**\n\nWelcome to the official command-line utility for WebFPGA compatible devices.\nIf you are unfamiliar with WebFPGA, please checkout the homepage\n([webfpga.io](https://webfpga.io)) or our Kickstarter\n([webfpga.io/kickstarter](https://webfpga.io/kickstarter)).\n\nThis utility provides access to the official backend for Verilog synthesis.\nIt also provides flashing capability for the official WebFPGA family of\nboards ([store.webfpga.io](https://store.webfpga.io)). You are free to use\nbitstreams sourced from our tools, Lattice's iCECube, or IceStorm. They\nshould all work.\n\n## Installation\n```console\n$ pip install webfpga\n$ webfpga --help\nUsage: webfpga [OPTIONS] COMMAND [ARGS]...\n\nOptions:\n --help Show this message and exit.\n\nCommands:\n flash Flash the first connected WebFPGA device\n synth Synthesize one or more input Verilog files and save the bitstream\n```\n\n## Example\nThe utility is fairly simply to use once installed. Simply\nsynthesize one or more Verilog source files to produce a bitstream.\nThen, feed that bitstream into `webfpga flash` to load the binary\nonto your local device. E.g.\n`webfpga synth input.v -o bitstream.bin && webfpga flash bitstream.bin`.\nBy default, `webfpga synth` will save the bitstream as `bitstream.bin`, but\nyou can use `-o` to specify a different filename.\n\n```console\n$ curl -O https://beta.webfpga.io/static/WF_blinky.v\n$ webfpga synth WF_blinky.v\nWebFPGA CLI v0.3\n\nConnecting to remote synthesis engine...\n200 {\"status\":\"ok\"} \n\nAttempting synthesis (saving to bitstream.bin)...\n - WF_blinky.v\n\n... verbose output omitted ...\n\npurging build directory...\nsynthesis complete!\n\n$ webfpga flash bitstream.bin\nryan@mu2 ~/cli $ ./webfpga flash bitstream.bin \nWebFPGA CLI v0.3\n\nOpening USB device...\n\nPreparing device for flashing...\nAT: Hi\nAPI: C_WEBUSB+\nAPR: 000921\nFound programmer.\nChecking for FPGA module and its flash configuration...\nAPWE: wren\nAMQ: SA016WHEe\n\nErasing device...\nAMBE: DONE\nAMQ: SA016WHEE\n\nFlashing device...\nAMW: OK\nAMWD: 0 3e 0 3e\nRESPONSE => 62 \n```\n\n## IceStorm Example.\nIf you would like to produce logic with Yosys, IceStorm, and friends\n— then please check out\n[webfpga_icestorm_examples](https://github.com/webfpga/webfpga_icestorm_examples).\nOnce you have produced a bitstream, simply run `webfpga flash bitstream.bin`.\n\n## What is a compressed bitstream?\nFPGA bitstreams are typically full of contiguous zeroes. Therefore,\ncompression on the host and decompression in the device's firmware\nmakes perfect sense. Flashing speeds are about 20x faster when using\ncompressed bitstreams.\n\nRight now, the device's firmware expects compressed bitstreams. WebFPGA\ndoesn't support uncompressed, raw bitstreams (such as ones outputted\nfrom iCECube/IceStorm tools.) These compressed bitstreams are chunked\ninto sub-64-byte chunks that fit into standard USB control transfer frames.\n\nBut don't fret! Our flashing utility automatically detects uncompressed\nbitstreams and transparently compresses them before transferring them.\nBitstreams that originate from the official WebFPGA backend arrive\npre-compressed.\n\n## Development\nSoon, `webfpga compress-bitstream` will be exposed as a command-line utility,\nallowing users to compress bitstreams, store them, and flash them. WebFPGA\nuses a variant of `compress-bitstream` on the official backend.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/webfpga/cli", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "webfpga", "package_url": "https://pypi.org/project/webfpga/", "platform": "", "project_url": "https://pypi.org/project/webfpga/", "project_urls": { "Homepage": "https://github.com/webfpga/cli" }, "release_url": "https://pypi.org/project/webfpga/0.3.2/", "requires_dist": [ "pyusb (>=1.0.2)", "click (>=7.0)", "requests (>=2.22.0)", "websockets (>=8.0.2)", "colorama (>=0.4.1)", "termcolor (>=1.1.0)" ], "requires_python": "", "summary": "Official WebFPGA Command-line Utility", "version": "0.3.2" }, "last_serial": 5853569, "releases": { "0.0.4": [ { "comment_text": "", "digests": { "md5": "f4c4c5eeb5a0a6423c92d7b9bebc8775", "sha256": "1a9981a63f26f4589477a62a20e3f6c859a3106972ff3602e990ece6efacea86" }, "downloads": -1, "filename": "webfpga-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "f4c4c5eeb5a0a6423c92d7b9bebc8775", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10984, "upload_time": "2019-09-18T10:22:57", "url": "https://files.pythonhosted.org/packages/85/08/ceda1ada84f7c4439098b53cfbfa75767a32ff8d0ad03e7e30b9dfd6c859/webfpga-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "84063d8ac8bbf31428b68ae5edc3cd0d", "sha256": "bf796caf46242577f395b04081daa546ef19f36db3bb57d8e8e4c527e3a7c987" }, "downloads": -1, "filename": "webfpga-0.0.4.tar.gz", "has_sig": false, "md5_digest": "84063d8ac8bbf31428b68ae5edc3cd0d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9998, "upload_time": "2019-09-18T10:23:01", "url": "https://files.pythonhosted.org/packages/5c/0b/b3503b1fdb77bf91d90522b9eb216df0a29f482f3580d1f1381bdc64407b/webfpga-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "af62bb6958323bf2510dd91d5c9d1ed9", "sha256": "85cae98c7037d10653a8bf08def374379fb5af8de001aa3b66f07309185075c6" }, "downloads": -1, "filename": "webfpga-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "af62bb6958323bf2510dd91d5c9d1ed9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10894, "upload_time": "2019-09-19T02:09:11", "url": "https://files.pythonhosted.org/packages/76/14/49769002cd52718eb34dbe9e92f49f2bbe3e037c862f51aeb780d5114c97/webfpga-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "06c8fcdee1c3bc8c7c9267e06424c84d", "sha256": "1d839aa4e7300fc4e9d3cca4dc7165ae1f87aaf33e4520dd46fb0bba146a061e" }, "downloads": -1, "filename": "webfpga-0.0.5.tar.gz", "has_sig": false, "md5_digest": "06c8fcdee1c3bc8c7c9267e06424c84d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10175, "upload_time": "2019-09-19T02:09:12", "url": "https://files.pythonhosted.org/packages/44/02/8b99a57bd3a7cb3857b73ace06fbc15ed66630cc2d0c6c3913a29ecd3f80/webfpga-0.0.5.tar.gz" } ], "0.1": [ { "comment_text": "", "digests": { "md5": "eb976f9bfeb751420640aa964847d348", "sha256": "abb4d6e47309aae075d05c151f2332544d0a3ac4af5c03e53519c630bc5c5645" }, "downloads": -1, "filename": "webfpga-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "eb976f9bfeb751420640aa964847d348", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2162, "upload_time": "2019-08-14T04:01:05", "url": "https://files.pythonhosted.org/packages/f3/1d/d815b86e0541beb428d271b47977d37c05e8d76634d54282cdd411cbf989/webfpga-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ca4a4c5c469c70be58e615a84763bb6f", "sha256": "1cc674edbfecaffd78d206736e0f842578eef55cb2fa808c6b671d2ae09a63f8" }, "downloads": -1, "filename": "webfpga-0.1.tar.gz", "has_sig": false, "md5_digest": "ca4a4c5c469c70be58e615a84763bb6f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1014, "upload_time": "2019-08-14T04:01:07", "url": "https://files.pythonhosted.org/packages/75/65/c38355cdb60a597928fcfea724634b2c4e36bed3668d3c045a94157f4cec/webfpga-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "f8a7a4f4ba054003cfbe49c7e9e9bc59", "sha256": "6da231fc493aa8fae347c20fae10509c13225249f560d68302460a236fd31e89" }, "downloads": -1, "filename": "webfpga-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "f8a7a4f4ba054003cfbe49c7e9e9bc59", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2864, "upload_time": "2019-09-18T08:05:28", "url": "https://files.pythonhosted.org/packages/ba/f4/c027706892e97fdcbc47a5e5c53795e03aefbb2ddfb069fc3fb0738b5a52/webfpga-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8c03beab63e6108c87e2f76e1765eef9", "sha256": "9149a66a0875ebaed239d49b383543431550e0c9b2b4373d6fd34f6164ad0679" }, "downloads": -1, "filename": "webfpga-0.2.tar.gz", "has_sig": false, "md5_digest": "8c03beab63e6108c87e2f76e1765eef9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1754, "upload_time": "2019-09-18T08:05:29", "url": "https://files.pythonhosted.org/packages/8d/47/bd83bacd86930f9371ad65d2209de6f20d773fff358a000c452d2a6d8aaf/webfpga-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "0b3d00cede1f3b6e8260361c7f904223", "sha256": "7477805e4ab478bba87bee162708871498715ff26c6e124161279adab627bdc8" }, "downloads": -1, "filename": "webfpga-0.3-py3.7.egg", "has_sig": false, "md5_digest": "0b3d00cede1f3b6e8260361c7f904223", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 16643, "upload_time": "2019-09-18T09:52:28", "url": "https://files.pythonhosted.org/packages/fa/cf/4f595557cecbae9f7d0eb6c0726e9d384fbcdfdc9be000da20e0fc182997/webfpga-0.3-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "40ac7f059fd54642f6e1238bf15a7cce", "sha256": "1b9c1be9fe2cebcd7acadca232f3cc9da683f8e421cd3f17de8e8083c5ff37d7" }, "downloads": -1, "filename": "webfpga-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "40ac7f059fd54642f6e1238bf15a7cce", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10766, "upload_time": "2019-09-18T09:52:25", "url": "https://files.pythonhosted.org/packages/c3/9f/4351ae2f612cd5f8211ea1dc91e92b9e2262b17a49e51b8c774a3923f2be/webfpga-0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c8526e029aafb7891bdf1c44e1dba4f7", "sha256": "54ac53e2ec0a54a543b7982c93a60c2afafc722c7b5cbe607979d684f8b00ee2" }, "downloads": -1, "filename": "webfpga-0.3.tar.gz", "has_sig": false, "md5_digest": "c8526e029aafb7891bdf1c44e1dba4f7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9846, "upload_time": "2019-09-18T09:52:30", "url": "https://files.pythonhosted.org/packages/c1/1e/56cae79b87d1f15d35ae7e50dd2d95c0918eaf7f175fdfd26ebc13346380/webfpga-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "cc10cd5a9d3b4c0c90686fc442d36b0b", "sha256": "2c1c241dbcd9f3d0198099fb91fc3d237946f4175e80d2f1d08e7749d300d868" }, "downloads": -1, "filename": "webfpga-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "cc10cd5a9d3b4c0c90686fc442d36b0b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10982, "upload_time": "2019-09-18T10:25:03", "url": "https://files.pythonhosted.org/packages/8c/ba/92287e289f12a8126f4b9d43ccd91384aacb38e8e4ffde241c2540a557ac/webfpga-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aaf4dfa4aeab39dcc7b369f27a5b9dee", "sha256": "728e02c5d3360309fb8e4adf174c6e3b3ecfd8a1b34fa6f5e8188d588812b16e" }, "downloads": -1, "filename": "webfpga-0.3.1.tar.gz", "has_sig": false, "md5_digest": "aaf4dfa4aeab39dcc7b369f27a5b9dee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9996, "upload_time": "2019-09-18T10:25:05", "url": "https://files.pythonhosted.org/packages/0e/cd/cbd2fdd9877003785a213da5f537b0b4ba5eef583c75e2ea5a51f6a50108/webfpga-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "d8cc99034cd41ab62dba32dd5b8eb6a9", "sha256": "25690f25f42c3882497909a5d47c457d8fedea9f94349927d06168d6a45190b7" }, "downloads": -1, "filename": "webfpga-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d8cc99034cd41ab62dba32dd5b8eb6a9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10893, "upload_time": "2019-09-19T02:10:12", "url": "https://files.pythonhosted.org/packages/1e/dd/fb6b1aa28f3e4a85a76657667375fb34ada69dda874451b73367a3e51615/webfpga-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f170a14ee79dad025b7045b06463d072", "sha256": "962842ac4921888a1170ad6f19a6c90b41b6d50bddc2f8881fbcdfb689ef0d1f" }, "downloads": -1, "filename": "webfpga-0.3.2.tar.gz", "has_sig": false, "md5_digest": "f170a14ee79dad025b7045b06463d072", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10177, "upload_time": "2019-09-19T02:10:15", "url": "https://files.pythonhosted.org/packages/49/2e/fbf2ef341200e51cd308b6db3c63648d1d5d3f16cbffbd4668700157ba54/webfpga-0.3.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d8cc99034cd41ab62dba32dd5b8eb6a9", "sha256": "25690f25f42c3882497909a5d47c457d8fedea9f94349927d06168d6a45190b7" }, "downloads": -1, "filename": "webfpga-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d8cc99034cd41ab62dba32dd5b8eb6a9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10893, "upload_time": "2019-09-19T02:10:12", "url": "https://files.pythonhosted.org/packages/1e/dd/fb6b1aa28f3e4a85a76657667375fb34ada69dda874451b73367a3e51615/webfpga-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f170a14ee79dad025b7045b06463d072", "sha256": "962842ac4921888a1170ad6f19a6c90b41b6d50bddc2f8881fbcdfb689ef0d1f" }, "downloads": -1, "filename": "webfpga-0.3.2.tar.gz", "has_sig": false, "md5_digest": "f170a14ee79dad025b7045b06463d072", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10177, "upload_time": "2019-09-19T02:10:15", "url": "https://files.pythonhosted.org/packages/49/2e/fbf2ef341200e51cd308b6db3c63648d1d5d3f16cbffbd4668700157ba54/webfpga-0.3.2.tar.gz" } ] }