diff --git a/.gitignore b/.gitignore index e572595..b98fe02 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,6 @@ docs/source/* !docs/source/configurator/ !docs/source/index.rst !docs/source/support.rst -!docs/source/platform-api.rst !docs/source/tutorial-intro-chipflow-platform.rst # Misc diff --git a/docs/source/conf.py b/docs/source/conf.py index 1c0670b..347d924 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -20,7 +20,7 @@ # copy in the doc sources from our repos repo_list = copy_docs(repos) -# add our repos to path +# add our repos to path for autodoc to import modules for r in repo_list: print(f"copy_docs: Adding {str(r)} to sys.path") sys.path.append(str(r)) @@ -35,7 +35,7 @@ .. toctree:: :maxdepth: 3 - chipflow-lib/autoapi/chipflow/index + /chipflow-lib/autoapi/chipflow/index """) # Update chipflow-lib/index.rst to point to the platform-api.rst outside chipflow-lib/ @@ -74,6 +74,7 @@ 'sphinx_design', ] + rst_prolog = """ .. role:: amaranth diff --git a/pdm.lock b/pdm.lock index 5722ca0..cc4b019 100644 --- a/pdm.lock +++ b/pdm.lock @@ -5,7 +5,7 @@ groups = ["default"] strategy = [] lock_version = "4.5.0" -content_hash = "sha256:ad4feefa03bbfa322c22bc78d36543381eb6e56af95282302331334c4cb2da20" +content_hash = "sha256:9c15c8b79f8efb9dfe38cccc513de93039c57bb770e42f1e5b3a08a7387a69d3" [[metadata.targets]] requires_python = ">=3.12,<3.13" @@ -20,6 +20,96 @@ files = [ {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"}, ] +[[package]] +name = "amaranth" +version = "0.5.8" +requires_python = "~=3.8" +summary = "Amaranth hardware definition language" +dependencies = [ + "Jinja2~=3.0", + "importlib-resources; python_version < \"3.9\"", + "jschon~=0.11.1", + "pyvcd<0.5,>=0.2.2", +] +files = [ + {file = "amaranth-0.5.8-py3-none-any.whl", hash = "sha256:6c32bd3422c700d246904032c1252f0a84225d2bdf9e26de4bc7df2ec83a8b39"}, + {file = "amaranth-0.5.8.tar.gz", hash = "sha256:a9d6221fdb002614e82ac3603d245827829f279e8eb5fc543c948ea3609328ea"}, +] + +[[package]] +name = "amaranth-boards" +version = "0.1.dev259" +requires_python = "~=3.9" +git = "https://github.com/amaranth-lang/amaranth-boards" +revision = "7e24efe2f6e95afddd0c1b56f1a9423c48caa472" +summary = "Board and connector definitions for Amaranth HDL" +dependencies = [ + "amaranth<0.7,>=0.5", +] + +[[package]] +name = "amaranth-soc" +version = "0.1a1.dev24" +requires_python = "~=3.9" +git = "https://github.com/amaranth-lang/amaranth-soc" +revision = "5c43cf58f15d9cd9c69ff83c97997708d386b2dc" +summary = "System on Chip toolkit for Amaranth HDL" +dependencies = [ + "amaranth<0.6,>=0.5", +] + +[[package]] +name = "amaranth-stdio" +version = "0" +requires_python = "~=3.9" +git = "https://github.com/amaranth-lang/amaranth-stdio" +revision = "618a13fb7108f69197d698df4d64c203553deaae" +summary = "Industry standard I/O for Amaranth HDL" +dependencies = [ + "amaranth<0.6,>=0.5", +] + +[[package]] +name = "amaranth-yosys" +version = "0.50.0.0.post118" +requires_python = "~=3.8" +summary = "Specialized WebAssembly build of Yosys used by Amaranth HDL" +dependencies = [ + "importlib-resources>=1.4; python_version < \"3.9\"", + "wasmtime<40,>=1", +] +files = [ + {file = "amaranth_yosys-0.50.0.0.post118-py3-none-any.whl", hash = "sha256:aae658e96fbad4010dc4f9963fa2a135629525f3803bd925e9bd4ad3e5f028c8"}, +] + +[[package]] +name = "amaranth" +version = "0.5.8" +extras = ["builtin-yosys"] +requires_python = "~=3.8" +summary = "Amaranth hardware definition language" +dependencies = [ + "amaranth-yosys>=0.40", + "amaranth==0.5.8", +] +files = [ + {file = "amaranth-0.5.8-py3-none-any.whl", hash = "sha256:6c32bd3422c700d246904032c1252f0a84225d2bdf9e26de4bc7df2ec83a8b39"}, + {file = "amaranth-0.5.8.tar.gz", hash = "sha256:a9d6221fdb002614e82ac3603d245827829f279e8eb5fc543c948ea3609328ea"}, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +requires_python = ">=3.8" +summary = "Reusable constraint types to use with typing.Annotated" +dependencies = [ + "typing-extensions>=4.0.0; python_version < \"3.9\"", +] +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + [[package]] name = "anyio" version = "4.11.0" @@ -49,6 +139,16 @@ files = [ {file = "astroid-4.0.2.tar.gz", hash = "sha256:ac8fb7ca1c08eb9afec91ccc23edbd8ac73bb22cbdd7da1d488d9fb8d6579070"}, ] +[[package]] +name = "attrs" +version = "25.4.0" +requires_python = ">=3.9" +summary = "Classes Without Boilerplate" +files = [ + {file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"}, + {file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"}, +] + [[package]] name = "babel" version = "2.17.0" @@ -112,6 +212,31 @@ files = [ {file = "charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a"}, ] +[[package]] +name = "chipflow-lib" +version = "0.3.1" +requires_python = "<3.14,>=3.12" +git = "https://github.com/chipflow/chipflow-lib" +ref = "main" +revision = "674623036008540284dada5aa5b05bee8138a828" +summary = "ChipFlow common tools." +dependencies = [ + "amaranth-boards @ git+https://github.com/amaranth-lang/amaranth-boards", + "amaranth-soc @ git+https://github.com/amaranth-lang/amaranth-soc", + "amaranth[builtin-yosys]<0.7,>=0.5", + "doit>=0.36.0", + "halo>=0.0.31", + "jsonschema>=4.8.0", + "pydantic>=2.11", + "python-dotenv>=1.0.1", + "requests>=2.20", + "tomli>=2.0.1", + "yowasp-nextpnr-ecp5>=0.7", + "yowasp-runtime", + "yowasp-yosys>=0.55.0.3.post946.dev0", + "ziglang==0.11.0", +] + [[package]] name = "click" version = "8.3.0" @@ -125,6 +250,16 @@ files = [ {file = "click-8.3.0.tar.gz", hash = "sha256:e7b8232224eba16f4ebe410c25ced9f7875cb5f3263ffc93cc3e8da705e229c4"}, ] +[[package]] +name = "cloudpickle" +version = "3.1.2" +requires_python = ">=3.8" +summary = "Pickler class to extend the standard pickle.Pickler functionality" +files = [ + {file = "cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a"}, + {file = "cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414"}, +] + [[package]] name = "colorama" version = "0.4.6" @@ -145,6 +280,20 @@ files = [ {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, ] +[[package]] +name = "doit" +version = "0.36.0" +requires_python = ">=3.8" +summary = "doit - Automation Tool" +dependencies = [ + "cloudpickle", + "importlib-metadata>=4.4", +] +files = [ + {file = "doit-0.36.0-py3-none-any.whl", hash = "sha256:ebc285f6666871b5300091c26eafdff3de968a6bd60ea35dd1e3fc6f2e32479a"}, + {file = "doit-0.36.0.tar.gz", hash = "sha256:71d07ccc9514cb22fe59d98999577665eaab57e16f644d04336ae0b4bae234bc"}, +] + [[package]] name = "furo" version = "2024.8.6" @@ -171,6 +320,23 @@ files = [ {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, ] +[[package]] +name = "halo" +version = "0.0.31" +requires_python = ">=3.4" +summary = "Beautiful terminal spinners in Python" +dependencies = [ + "backports-shutil-get-terminal-size>=1.0.0; python_version < \"3.3\"", + "colorama>=0.3.9", + "log-symbols>=0.0.14", + "six>=1.12.0", + "spinners>=0.0.24", + "termcolor>=1.1.0", +] +files = [ + {file = "halo-0.0.31.tar.gz", hash = "sha256:7b67a3521ee91d53b7152d4ee3452811e1d2a6321975137762eb3d70063cc9d6"}, +] + [[package]] name = "idna" version = "3.11" @@ -191,6 +357,33 @@ files = [ {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, ] +[[package]] +name = "importlib-metadata" +version = "8.7.0" +requires_python = ">=3.9" +summary = "Read metadata from Python packages" +dependencies = [ + "typing-extensions>=3.6.4; python_version < \"3.8\"", + "zipp>=3.20", +] +files = [ + {file = "importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd"}, + {file = "importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000"}, +] + +[[package]] +name = "importlib-resources" +version = "6.5.2" +requires_python = ">=3.9" +summary = "Read resources from Python packages" +dependencies = [ + "zipp>=3.1.0; python_version < \"3.10\"", +] +files = [ + {file = "importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec"}, + {file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"}, +] + [[package]] name = "jinja2" version = "3.1.6" @@ -227,6 +420,48 @@ files = [ {file = "json5-0.12.1.tar.gz", hash = "sha256:b2743e77b3242f8d03c143dd975a6ec7c52e2f2afe76ed934e53503dd4ad4990"}, ] +[[package]] +name = "jsonschema" +version = "4.25.1" +requires_python = ">=3.9" +summary = "An implementation of JSON Schema validation for Python" +dependencies = [ + "attrs>=22.2.0", + "jsonschema-specifications>=2023.03.6", + "referencing>=0.28.4", + "rpds-py>=0.7.1", +] +files = [ + {file = "jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63"}, + {file = "jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85"}, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +requires_python = ">=3.9" +summary = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +dependencies = [ + "referencing>=0.31.0", +] +files = [ + {file = "jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe"}, + {file = "jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d"}, +] + +[[package]] +name = "log-symbols" +version = "0.0.14" +summary = "Colored symbols for various log levels for Python" +dependencies = [ + "colorama>=0.3.9", + "enum34==1.1.6; python_version < \"3.4\"", +] +files = [ + {file = "log_symbols-0.0.14-py3-none-any.whl", hash = "sha256:4952106ff8b605ab7d5081dd2c7e6ca7374584eff7086f499c06edd1ce56dcca"}, + {file = "log_symbols-0.0.14.tar.gz", hash = "sha256:cf0bbc6fe1a8e53f0d174a716bc625c4f87043cc21eb55dd8a740cfe22680556"}, +] + [[package]] name = "markdown-it-py" version = "3.0.0" @@ -283,6 +518,19 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] +[[package]] +name = "minerva" +version = "0.1.dev144" +requires_python = "~=3.9" +git = "https://github.com/minerva-cpu/minerva" +revision = "c3373e01fda2f77c0ee6bb6b6894f7cffd3ff596" +summary = "A 32-bit RISC-V soft processor" +dependencies = [ + "amaranth-soc @ git+https://github.com/amaranth-lang/amaranth-soc", + "amaranth[builtin-yosys]<0.6,>=0.5", + "yowasp-yosys", +] + [[package]] name = "myst-parser" version = "4.0.1" @@ -311,6 +559,58 @@ files = [ {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, ] +[[package]] +name = "platformdirs" +version = "4.5.1" +requires_python = ">=3.10" +summary = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +files = [ + {file = "platformdirs-4.5.1-py3-none-any.whl", hash = "sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31"}, + {file = "platformdirs-4.5.1.tar.gz", hash = "sha256:61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda"}, +] + +[[package]] +name = "pydantic" +version = "2.12.5" +requires_python = ">=3.9" +summary = "Data validation using Python type hints" +dependencies = [ + "annotated-types>=0.6.0", + "pydantic-core==2.41.5", + "typing-extensions>=4.14.1", + "typing-inspection>=0.4.2", +] +files = [ + {file = "pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d"}, + {file = "pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49"}, +] + +[[package]] +name = "pydantic-core" +version = "2.41.5" +requires_python = ">=3.9" +summary = "Core functionality for Pydantic validation and serialization" +dependencies = [ + "typing-extensions>=4.14.1", +] +files = [ + {file = "pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7"}, + {file = "pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5"}, + {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c"}, + {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294"}, + {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1"}, + {file = "pydantic_core-2.41.5-cp312-cp312-win32.whl", hash = "sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d"}, + {file = "pydantic_core-2.41.5-cp312-cp312-win_amd64.whl", hash = "sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815"}, + {file = "pydantic_core-2.41.5-cp312-cp312-win_arm64.whl", hash = "sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3"}, + {file = "pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e"}, +] + [[package]] name = "pygments" version = "2.19.2" @@ -321,6 +621,26 @@ files = [ {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, ] +[[package]] +name = "python-dotenv" +version = "1.2.1" +requires_python = ">=3.9" +summary = "Read key-value pairs from a .env file and set them as environment variables" +files = [ + {file = "python_dotenv-1.2.1-py3-none-any.whl", hash = "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61"}, + {file = "python_dotenv-1.2.1.tar.gz", hash = "sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6"}, +] + +[[package]] +name = "pyvcd" +version = "0.4.1" +requires_python = ">=3.7" +summary = "Python VCD file support" +files = [ + {file = "pyvcd-0.4.1-py2.py3-none-any.whl", hash = "sha256:3a4c71d4dce741f1155a2ed11a6278390a0816293068f6162ad9658d20f75578"}, + {file = "pyvcd-0.4.1.tar.gz", hash = "sha256:dc6275e95a7949b8236086ab2e6d03afede73441243ec5109c9ea89077f3d696"}, +] + [[package]] name = "pyyaml" version = "6.0.3" @@ -352,6 +672,21 @@ files = [ {file = "quickjs-1.19.4.tar.gz", hash = "sha256:1205953abc24ff757f4a795304d5d61e4bf1e555c9ef6ec96a132d4b95535484"}, ] +[[package]] +name = "referencing" +version = "0.37.0" +requires_python = ">=3.10" +summary = "JSON Referencing + Python" +dependencies = [ + "attrs>=22.2.0", + "rpds-py>=0.7.0", + "typing-extensions>=4.4.0; python_version < \"3.13\"", +] +files = [ + {file = "referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231"}, + {file = "referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8"}, +] + [[package]] name = "requests" version = "2.32.5" @@ -378,6 +713,40 @@ files = [ {file = "rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c"}, ] +[[package]] +name = "rpds-py" +version = "0.30.0" +requires_python = ">=3.10" +summary = "Python bindings to Rust's persistent data structures (rpds)" +files = [ + {file = "rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad"}, + {file = "rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51"}, + {file = "rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5"}, + {file = "rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e"}, + {file = "rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394"}, + {file = "rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf"}, + {file = "rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b"}, + {file = "rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e"}, + {file = "rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84"}, +] + +[[package]] +name = "six" +version = "1.17.0" +requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +summary = "Python 2 and 3 compatibility utilities" +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + [[package]] name = "sniffio" version = "1.3.1" @@ -662,6 +1031,18 @@ files = [ {file = "sphinxext_rediraffe-0.3.0.tar.gz", hash = "sha256:f319b3ccb7c3c3b6f63ffa6fd3eeb171b6d272df55075a9e84364394f391f507"}, ] +[[package]] +name = "spinners" +version = "0.0.24" +summary = "Spinners for terminals" +dependencies = [ + "enum34==1.1.6; python_version < \"3.4\"", +] +files = [ + {file = "spinners-0.0.24-py3-none-any.whl", hash = "sha256:2fa30d0b72c9650ad12bbe031c9943b8d441e41b4f5602b0ec977a19f3290e98"}, + {file = "spinners-0.0.24.tar.gz", hash = "sha256:1eb6aeb4781d72ab42ed8a01dcf20f3002bf50740d7154d12fb8c9769bf9e27f"}, +] + [[package]] name = "starlette" version = "0.50.0" @@ -676,6 +1057,34 @@ files = [ {file = "starlette-0.50.0.tar.gz", hash = "sha256:a2a17b22203254bcbc2e1f926d2d55f3f9497f769416b3190768befe598fa3ca"}, ] +[[package]] +name = "termcolor" +version = "3.2.0" +requires_python = ">=3.10" +summary = "ANSI color formatting for output in terminal" +files = [ + {file = "termcolor-3.2.0-py3-none-any.whl", hash = "sha256:a10343879eba4da819353c55cb8049b0933890c2ebf9ad5d3ecd2bb32ea96ea6"}, + {file = "termcolor-3.2.0.tar.gz", hash = "sha256:610e6456feec42c4bcd28934a8c87a06c3fa28b01561d46aa09a9881b8622c58"}, +] + +[[package]] +name = "tomli" +version = "2.3.0" +requires_python = ">=3.8" +summary = "A lil' TOML parser" +files = [ + {file = "tomli-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac"}, + {file = "tomli-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22"}, + {file = "tomli-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f"}, + {file = "tomli-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52"}, + {file = "tomli-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8"}, + {file = "tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6"}, + {file = "tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876"}, + {file = "tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878"}, + {file = "tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b"}, + {file = "tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549"}, +] + [[package]] name = "typing-extensions" version = "4.15.0" @@ -686,6 +1095,19 @@ files = [ {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, ] +[[package]] +name = "typing-inspection" +version = "0.4.2" +requires_python = ">=3.9" +summary = "Runtime typing introspection tools" +dependencies = [ + "typing-extensions>=4.12.0", +] +files = [ + {file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"}, + {file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"}, +] + [[package]] name = "urllib3" version = "2.5.0" @@ -711,6 +1133,29 @@ files = [ {file = "uvicorn-0.38.0.tar.gz", hash = "sha256:fd97093bdd120a2609fc0d3afe931d4d4ad688b6e75f0f929fde1bc36fe0e91d"}, ] +[[package]] +name = "wasmtime" +version = "39.0.0" +requires_python = ">=3.9" +summary = "A WebAssembly runtime powered by Wasmtime" +dependencies = [ + "importlib-resources>=5.10", +] +files = [ + {file = "wasmtime-39.0.0-py3-none-android_26_arm64_v8a.whl", hash = "sha256:8ddd8905b7786b791bae5413d86c42e89e2f846bdbc66b307a1d56841bf97b2b"}, + {file = "wasmtime-39.0.0-py3-none-android_26_x86_64.whl", hash = "sha256:1b699b59a443f4688b49f2e4d19895b08783ca1a0151c4009e5fa6e06766c869"}, + {file = "wasmtime-39.0.0-py3-none-any.whl", hash = "sha256:d5e60ffb196bac6e96f4f7c796aa592e647179ff8aa7da97b3c77a40a59dfde7"}, + {file = "wasmtime-39.0.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:78bd4965b66d98ffae444784fcd70c0390c59fb0a04813c5526731a8bc80c029"}, + {file = "wasmtime-39.0.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:24525b09e077f67311310503b0e5d08d9887f4eb79ac1b9ffe5cb5c348f8a412"}, + {file = "wasmtime-39.0.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:bc5a9dfeeb692877bb5c38439e11253d1553a9d2631e8421552f9bba04af6360"}, + {file = "wasmtime-39.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:b1572becb900e50f63c604fba53d10ce58877d122c802f6302e07dbcb4dd8ca6"}, + {file = "wasmtime-39.0.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e82d4b1a406cd34c19bd3c531084347f0fc7a0b4b4393530e833c9eaad459bbc"}, + {file = "wasmtime-39.0.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:adb94db5b013ebcbd27fb891015de22e21352c5a7a3b28d3d08fc627bdb082f4"}, + {file = "wasmtime-39.0.0-py3-none-win_amd64.whl", hash = "sha256:b3db32e65660bc3f245636b2919455af69bd8e754458bc18a5126565b0cd3d9a"}, + {file = "wasmtime-39.0.0-py3-none-win_arm64.whl", hash = "sha256:d4254bae165b71d1dd344dbec3b465206467319d17220d60b3efefb72a5483a8"}, + {file = "wasmtime-39.0.0.tar.gz", hash = "sha256:30a27221b3fac84bc6247b34339ff6f417b989728513fa4b957a26742651ff7c"}, +] + [[package]] name = "watchfiles" version = "1.1.1" @@ -757,6 +1202,31 @@ files = [ {file = "websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee"}, ] +[[package]] +name = "yowasp-nextpnr-ecp5" +version = "0.9.0.0.post686" +summary = "nextpnr-ecp5 FPGA place and route tool" +dependencies = [ + "yowasp-runtime~=1.1", +] +files = [ + {file = "yowasp_nextpnr_ecp5-0.9.0.0.post686-py3-none-any.whl", hash = "sha256:7a00778285c7c08fb85062665c2c10090490dbe75afca098e062b4e3ff6889f2"}, +] + +[[package]] +name = "yowasp-runtime" +version = "1.82" +requires_python = "~=3.8" +summary = "Common runtime for YoWASP packages" +dependencies = [ + "importlib-resources; python_version < \"3.9\"", + "platformdirs<5,>=3.0", + "wasmtime<40,>=21.0.0", +] +files = [ + {file = "yowasp_runtime-1.82-py3-none-any.whl", hash = "sha256:fe45c7322e2ff3e9f543fa97e28ba7af126109b9ffc74bbf95edbe971da11d81"}, +] + [[package]] name = "yowasp-wavedrom" version = "3.5.0.8" @@ -769,3 +1239,42 @@ dependencies = [ files = [ {file = "yowasp_wavedrom-3.5.0.8-py3-none-any.whl", hash = "sha256:f5e6250e42dc7a93648b196e121ddeb72965f70620a18579ade2e9723cc5a65e"}, ] + +[[package]] +name = "yowasp-yosys" +version = "0.60.0.0.post1055" +requires_python = "~=3.9" +summary = "Yosys Open SYnthesis Suite" +dependencies = [ + "click", + "yowasp-runtime~=1.12", +] +files = [ + {file = "yowasp_yosys-0.60.0.0.post1055-py3-none-any.whl", hash = "sha256:90645bc9952a87096d913c2a64641426d1dd0699428f3bbb432fd16eb5075bbf"}, +] + +[[package]] +name = "ziglang" +version = "0.11.0" +requires_python = "~=3.5" +summary = " Zig is a general-purpose programming language and toolchain for\nmaintaining robust, optimal, and reusable software." +files = [ + {file = "ziglang-0.11.0-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:bd046eeab97ad51048575768f6dae10468b3a4449f4467ed61dae621faf6ee55"}, + {file = "ziglang-0.11.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:038b95cac9adef0c6dce9b72bdad895a0e4e0654c77c4a8f84fe79d2909a366e"}, + {file = "ziglang-0.11.0-py3-none-manylinux_2_12_i686.manylinux2010_i686.musllinux_1_1_i686.whl", hash = "sha256:4f848c8cca520cb12357cfa3d303bf1149a30566f4c1e5999284dbdf921cc2b8"}, + {file = "ziglang-0.11.0-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl", hash = "sha256:45e8116428267e20529b9ee43a7e7364791c1a092845d2143b248a1dbf6760b0"}, + {file = "ziglang-0.11.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:d6372bada34714a5395539cc4d76e9cc6062739cee5ce9949a250f7c525ceb94"}, + {file = "ziglang-0.11.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:5fe81f91fd872fc32ed0f82807df6c680a82cbea56a9f24f818e9da299049022"}, + {file = "ziglang-0.11.0-py3-none-win32.whl", hash = "sha256:97ac4312a358d2a4ba2c153fdb1827caf6bc158501a468ebd6a554b50edee42e"}, + {file = "ziglang-0.11.0-py3-none-win_amd64.whl", hash = "sha256:a7edc7020e7ffbbb3af3a40c17a9bda65d5a65132ff933e153ffa80d8f5ad731"}, +] + +[[package]] +name = "zipp" +version = "3.23.0" +requires_python = ">=3.9" +summary = "Backport of pathlib-compatible object wrapper for zip files" +files = [ + {file = "zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e"}, + {file = "zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166"}, +] diff --git a/pyproject.toml b/pyproject.toml index 32ee942..2e64eaa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,6 +23,10 @@ dependencies = [ "sphinxext-rediraffe>=0.2.7", "sphinx-autoapi>=3.6.0", "jschon>=0.11.1", + # Required for autodoc to import chipflow_digital_ip modules + "chipflow-lib @ git+https://github.com/chipflow/chipflow-lib@main", + "amaranth-stdio @ git+https://github.com/amaranth-lang/amaranth-stdio", + "minerva @ git+https://github.com/minerva-cpu/minerva", ] [build-system] diff --git a/tools/copy_docs.py b/tools/copy_docs.py index 01d0afb..e39048b 100755 --- a/tools/copy_docs.py +++ b/tools/copy_docs.py @@ -127,6 +127,56 @@ def copy_docs(repos: List[Tuple[str, str]]) -> List[Path]: platform_api_path.write_text(platform_api_content, encoding='utf-8') print(f"Replaced {platform_api_path} with custom version") + # Fix heading levels in chipflow-toml-guide.rst + # The vendor file has project_name, clock_domains, process, package as top-level + # headings (===) but they should be subsections (^^^) + toml_guide_path = root_path / 'docs/source/chipflow-lib/chipflow-toml-guide.rst' + if toml_guide_path.exists(): + content = toml_guide_path.read_text(encoding='utf-8') + # Fix heading levels for config options that should be subsections + # These use === but should use ^^^ to be nested under their parent sections + replacements = [ + ('project_name\n============', 'project_name\n^^^^^^^^^^^^'), + ('clock_domains\n=============', 'clock_domains\n^^^^^^^^^^^^^'), + ('process\n=======', 'process\n^^^^^^^'), + ('package\n=======', 'package\n^^^^^^^'), + ] + for old, new in replacements: + content = content.replace(old, new) + # Also rename the document title to be more descriptive + content = content.replace( + 'Intro to ``chipflow.toml``\n==========================', + '``chipflow.toml`` Reference\n===========================' + ) + toml_guide_path.write_text(content, encoding='utf-8') + print(f"Fixed heading levels in {toml_guide_path}") + + # Fix cross-references in using-pin-signatures.rst to link to autoapi docs + pin_sig_path = root_path / 'docs/source/chipflow-lib/using-pin-signatures.rst' + if pin_sig_path.exists(): + content = pin_sig_path.read_text(encoding='utf-8') + # Add cross-references for Pin Signatures section (plain text to :py:class:) + # These are in the "Available Pin Signatures" list + sig_replacements = [ + ('``UARTSignature()``', ':py:class:`~chipflow.platform.UARTSignature`'), + ('``GPIOSignature(pin_count)``', ':py:class:`~chipflow.platform.GPIOSignature`'), + ('``SPISignature()``', ':py:class:`~chipflow.platform.SPISignature`'), + ('``I2CSignature()``', ':py:class:`~chipflow.platform.I2CSignature`'), + ('``QSPIFlashSignature()``', ':py:class:`~chipflow.platform.QSPIFlashSignature`'), + ('``JTAGSignature()``', ':py:class:`~chipflow.platform.JTAGSignature`'), + ('``IOModelOptions``', ':py:class:`~chipflow.platform.IOModelOptions`'), + ('``SoftwareDriverSignature``', ':py:class:`~chipflow.platform.SoftwareDriverSignature`'), + ('``attach_data()``', ':py:func:`~chipflow.platform.attach_data`'), + ('``SoftwareBuild``', ':py:class:`~chipflow.platform.SoftwareBuild`'), + # Fix existing broken :class: references to use full path + (':class:`Sky130DriveMode`', ':py:class:`~chipflow.platform.Sky130DriveMode`'), + (':class:`IOTripPoint`', ':py:class:`~chipflow.platform.IOTripPoint`'), + ] + for old, new in sig_replacements: + content = content.replace(old, new) + pin_sig_path.write_text(content, encoding='utf-8') + print(f"Fixed cross-references in {pin_sig_path}") + print("Documentation copy completed successfully") return repo_list