From 7a436b2a616425d3c34a5e35d4fe83be084699f2 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Fri, 8 Nov 2024 22:19:46 +0000 Subject: [PATCH] update adf2fcedd2c39740b2e15b8ad2023e03e7018144 --- .nojekyll | 0 ChangeLog/index.html | 142 + Dependency.html | 325 + Doc-License.html | 480 + FileTypes/index.html | 183 + Glossary.html | 172 + Installation.html | 191 + License.html | 271 + ProjectModel/Design.html | 253 + ProjectModel/File.html | 214 + ProjectModel/FileSet.html | 258 + ProjectModel/Project.html | 222 + ProjectModel/VHDLLibrary.html | 212 + ProjectModel/index.html | 183 + ...f9243f959d9735394983761252229243eccd9b.svg | 107 + ...5f34905a9826c3550a2f44827ab194b424a3f4.svg | 74 + ...1bad2aaa4998f19490347f9dc5f699ad95d910.svg | 44 + ...01f1a23652a20058589004cf5e3ab7e38368eb.svg | 14 + ...550c16f92750cc47272903aa95c97c1e2e4309.svg | 62 + ...a024d9257b5211666150428e6bdd1974d17c0e.svg | 74 + ...8f21c51285e3f048582ac72e05f4070bc2b96f.svg | 44 + ...b2cd91bf26a8808a2c960f1786c0a7a54669df.svg | 74 + ...14c6ce1fe31843275f13e2d92423d5bdc2e013.svg | 29 + ...bd0fbc566a31d13204092d61c984342ef287eb.svg | 29 + ...791d6a399f01c6376ae906ef13be5b33db0b8f.svg | 44 + ...257f86e6def8ee1bfdfc519e300b1b98b5e0c2.svg | 74 + ...9e88fbb68685ad76b4c747e4ef5d27ab2c12b2.svg | 29 + ...d2a8dfc687f1972d2021130744de9e07798c22.svg | 74 + ...5a0dfab96618683ed9f0bd0c77dcb95404da45.svg | 65 + ...76049c961575561e7d04db1ed9b7cc64b0566e.svg | 59 + ...61eedb6a225a46278f0eb14d2c1321141d570e.svg | 113 + ...950c398ed2bdd8248160de6f8b627acfaed07d.svg | 14 + ...448ad8166b7759d4b745954f3e241eb6b8d2b4.svg | 29 + ...e63eb1c0b617b245fab387c6c983d1eab483df.svg | 29 + ...2c233d6c59a0ffbe58233b9deac75dd12e64ec.svg | 29 + ...31e52b2b5533a8be0519fea209585022ec1d45.svg | 74 + ...71897ef28b655acbefaa5352f939c4e866bf69.svg | 29 + ...709432d815c5427bdd7303490558cef529763d.svg | 44 + ...aeb1afbcdcbd514e4c28d429e15ee502f00af8.svg | 74 + ...d0f08278e0eae6f81baebd2027bbe8202f6bf7.svg | 44 + ...1c162a07f4b92989793599dc029258614e016a.svg | 14 + ...de2c77f206dc9b6fc4594998ae2d25dbd66799.svg | 95 + ...7998c3fd93f5754f6a9cbdd84c347d69f2c76b.svg | 29 + ...5ed92ab65a6d7e5224967cd7e645ee42d31f1a.svg | 74 + ...54c05b08965e1f81e0f9a1b4039977863dcaae.svg | 14 + ...8bfdae24e22314f3795645447df56aa5568cc5.svg | 44 + ...5221d8c717a30f4bc6bd9ca49f694a8ff88de3.svg | 74 + ...859f0836d231ee858129b156bfe2b5f874b232.svg | 29 + ...834e3dc0c7ee68ea78d9f2835d3418a4ff62ad.svg | 29 + ...e6e371cb1242e0edc787b4770386d72d87c6b0.svg | 44 + ...a02e76e4786f2aa8cb3d2a408649926b18b57e.svg | 74 + ...5e5dd07189d5bcb95d80074c385bd2bbb3696e.svg | 44 + ...854232a473eb8dd6fc90ad9bfd6a78f805e93f.svg | 89 + ...30ee97ccc1f5765c407abe8b71636ede92b32a.svg | 95 + ...ed64fe5da60a0c72f478118e885fe7f3c2a9e6.svg | 116 + ...03768b021e347214ee8b66f50d9e31ad4a214f.svg | 44 + ...8b1121538b024b9213b2244693ac542c1d9894.svg | 29 + ...c645db73f5b0ca0eec97c6df5ecd23a04508ab.svg | 14 + ...7859a2ff9920e828190939860919619c89131b.svg | 101 + ...9a9bcd42331e8c61a993d2105259161f9a6d49.svg | 101 + ...f74149210d494f5db1005a002fc72d8a7ea450.svg | 80 + ...c6af87c8802895de7278f0f98e85fa673110cc.svg | 74 + ...b9d25ffcae6c015a47ec0565c301d4c2559a93.svg | 29 + ...a1a9ddb9d1c201e76ab22f30da98983bd5872c.svg | 59 + ...d4320ce0a252ffadfa085b60029d88f48af02a.svg | 29 + ...a228c5c1b0700c8dcdb038a7c9d665508b3d23.svg | 74 + ...7db2dbc61bc7e40a37a46c0dbafeb1fb369c6a.svg | 29 + ...db48ffc1454392bcd9ec0e7eb38c417007ded1.svg | 29 + ...455d8dbea2c399cf15f42bb05461428e00d503.svg | 74 + ...db9a9452d280fd4f77d2402f53bf4ded1df738.svg | 44 + ...ab0e0bbbbfa1d71c9f44b872b54d8b464474cb.svg | 14 + ...5e3344fc2254ad13585e2d0cbe3d6ebd32902e.svg | 44 + ...dc00d125bbbe22b751bb62b32db29a03f9b439.svg | 29 + ...318bb7b1f8427e111d5ddb9dbbd2756f98a9d6.svg | 116 + ...2ec0f2c059b1f11939fbf9590d952c09fe2ef1.svg | 20 + ...09690d100a49a67aff0983ee680bdfcab8c470.svg | 29 + ...d98a163021e56f15c82f15e0669b1800b8c071.svg | 74 + ...a62bdd54001858a4bf4b47abb19adc78011090.svg | 29 + ...c50a5f701fd191e214b6c28b9701e18e75cd98.svg | 89 + ...b1d9c2f1cb38d85861ecf755d1ff5167617126.svg | 29 + ...7724f665a569d4cb4ce4914a715a4e0d65027f.svg | 14 + ...b352b0961c213cabef2f192d4067ce222e551a.svg | 74 + ...08cface702ecb89d277d5889be7765f34ef864.svg | 44 + ...848d7ae24872d29f30c2a03e7ee2b1d6b3cfbf.svg | 29 + ...9fcdd8136f51822f99c685283bf6daa4097492.svg | 44 + ...25469c0f06651de3dd05d9094b4cebde2676e7.svg | 44 + _images/logo_on_light.svg | 10 + _modules/index.html | 145 + _modules/pyEDAA/ProjectModel.html | 2286 +++++ .../pyEDAA/ProjectModel/Altera/Quartus.html | 188 + _modules/pyEDAA/ProjectModel/Attributes.html | 197 + _modules/pyEDAA/ProjectModel/GHDL.html | 180 + .../ProjectModel/Intel/QuartusPrime.html | 188 + .../ProjectModel/MentorGraphics/ModelSim.html | 196 + .../MentorGraphics/QuestaSim.html | 196 + _modules/pyEDAA/ProjectModel/OSVVM.html | 336 + _modules/pyEDAA/ProjectModel/Verilog.html | 180 + _modules/pyEDAA/ProjectModel/Xilinx/ISE.html | 188 + .../pyEDAA/ProjectModel/Xilinx/Vivado.html | 372 + _sources/ChangeLog/index.rst.txt | 12 + _sources/Dependency.rst.txt | 172 + _sources/Doc-License.rst.txt | 353 + _sources/FileTypes/index.rst.txt | 50 + _sources/Glossary.rst.txt | 45 + _sources/Installation.rst.txt | 60 + _sources/License.rst.txt | 140 + _sources/ProjectModel/Design.rst.txt | 108 + _sources/ProjectModel/File.rst.txt | 69 + _sources/ProjectModel/FileSet.rst.txt | 113 + _sources/ProjectModel/Project.rst.txt | 77 + _sources/ProjectModel/VHDLLibrary.rst.txt | 67 + _sources/ProjectModel/index.rst.txt | 43 + _sources/coverage/index.rst.txt | 4 + _sources/genindex.rst.txt | 4 + _sources/index.rst.txt | 186 + _sources/py-modindex.rst.txt | 4 + _sources/pyEDAA.ProjectModel/index.rst.txt | 8 + ...pyEDAA.ProjectModel.Altera.Quartus.rst.txt | 36 + .../pyEDAA.ProjectModel.Altera.rst.txt | 20 + .../pyEDAA.ProjectModel.Attributes.rst.txt | 26 + .../pyEDAA.ProjectModel.GHDL.rst.txt | 26 + ...AA.ProjectModel.Intel.QuartusPrime.rst.txt | 36 + .../pyEDAA.ProjectModel.Intel.rst.txt | 20 + ...ojectModel.MentorGraphics.ModelSim.rst.txt | 46 + ...jectModel.MentorGraphics.QuestaSim.rst.txt | 46 + ...pyEDAA.ProjectModel.MentorGraphics.rst.txt | 21 + .../pyEDAA.ProjectModel.OSVVM.rst.txt | 26 + .../pyEDAA.ProjectModel.VHDL.rst.txt | 12 + .../pyEDAA.ProjectModel.Verilog.rst.txt | 26 + .../pyEDAA.ProjectModel.Xilinx.ISE.rst.txt | 36 + .../pyEDAA.ProjectModel.Xilinx.Vivado.rst.txt | 106 + .../pyEDAA.ProjectModel.Xilinx.rst.txt | 21 + .../pyEDAA.ProjectModel.rst.txt | 502 ++ _sources/typing/index.rst.txt | 4 + _static/alabaster.css | 663 ++ _static/basic.css | 914 ++ _static/custom.css | 1 + _static/doctools.js | 149 + _static/documentation_options.js | 13 + _static/favicon.svg | 65 + _static/file.png | Bin 0 -> 286 bytes _static/github-banner.svg | 5 + _static/graphviz.css | 12 + _static/language_data.js | 192 + _static/logo_on_dark.svg | 10 + _static/logo_on_light.svg | 10 + _static/minus.png | Bin 0 -> 90 bytes _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 85 + _static/searchtools.js | 632 ++ _static/sphinx_highlight.js | 154 + coverage/class_index.html | 324 + coverage/coverage_html_cb_6fb7b396.js | 733 ++ coverage/favicon_32_cb_58284776.png | Bin 0 -> 1732 bytes coverage/function_index.html | 1893 ++++ coverage/index.html | 138 + coverage/keybd_closed_cb_ce680311.png | Bin 0 -> 9004 bytes coverage/status.json | 1 + coverage/style_cb_8e611ae1.css | 337 + .../z_bb657af29d23493a_Attributes_py.html | 152 + coverage/z_bb657af29d23493a___init___py.html | 1967 ++++ coverage/z_f31a6c1cb708999d_Vivado_py.html | 303 + genindex.html | 2486 +++++ index.html | 208 + objects.inv | Bin 0 -> 5799 bytes py-modindex.html | 234 + pyEDAA.ProjectModel/index.html | 1258 +++ .../pyEDAA.ProjectModel.Altera.Quartus.html | 581 ++ .../pyEDAA.ProjectModel.Altera.html | 246 + .../pyEDAA.ProjectModel.Attributes.html | 232 + .../pyEDAA.ProjectModel.GHDL.html | 391 + ...yEDAA.ProjectModel.Intel.QuartusPrime.html | 581 ++ .../pyEDAA.ProjectModel.Intel.html | 246 + ....ProjectModel.MentorGraphics.ModelSim.html | 764 ++ ...ProjectModel.MentorGraphics.QuestaSim.html | 764 ++ .../pyEDAA.ProjectModel.MentorGraphics.html | 318 + .../pyEDAA.ProjectModel.OSVVM.html | 391 + .../pyEDAA.ProjectModel.VHDL.html | 201 + .../pyEDAA.ProjectModel.Verilog.html | 391 + .../pyEDAA.ProjectModel.Xilinx.ISE.html | 580 ++ .../pyEDAA.ProjectModel.Xilinx.Vivado.html | 1740 ++++ .../pyEDAA.ProjectModel.Xilinx.html | 391 + pyEDAA.ProjectModel/pyEDAA.ProjectModel.html | 7964 +++++++++++++++++ search.html | 157 + searchindex.js | 1 + .../ProjectModel/Altera/Quartus.py.html | 106 + .../ProjectModel/Altera/__init__.py.html | 78 + .../pyEDAA/ProjectModel/Attributes.py.html | 123 + typing/html/pyEDAA/ProjectModel/GHDL.py.html | 95 + .../ProjectModel/Intel/QuartusPrime.py.html | 106 + .../ProjectModel/Intel/__init__.py.html | 78 + .../MentorGraphics/ModelSim.py.html | 117 + .../MentorGraphics/QuestaSim.py.html | 117 + .../MentorGraphics/__init__.py.html | 78 + typing/html/pyEDAA/ProjectModel/OSVVM.py.html | 427 + typing/html/pyEDAA/ProjectModel/VHDL.py.html | 16 + .../html/pyEDAA/ProjectModel/Verilog.py.html | 95 + .../pyEDAA/ProjectModel/Xilinx/ISE.py.html | 106 + .../pyEDAA/ProjectModel/Xilinx/Vivado.py.html | 493 + .../ProjectModel/Xilinx/__init__.py.html | 78 + .../html/pyEDAA/ProjectModel/__init__.py.html | 4021 +++++++++ typing/index.html | 104 + typing/mypy-html.css | 104 + 203 files changed, 49284 insertions(+) create mode 100644 .nojekyll create mode 100644 ChangeLog/index.html create mode 100644 Dependency.html create mode 100644 Doc-License.html create mode 100644 FileTypes/index.html create mode 100644 Glossary.html create mode 100644 Installation.html create mode 100644 License.html create mode 100644 ProjectModel/Design.html create mode 100644 ProjectModel/File.html create mode 100644 ProjectModel/FileSet.html create mode 100644 ProjectModel/Project.html create mode 100644 ProjectModel/VHDLLibrary.html create mode 100644 ProjectModel/index.html create mode 100644 _images/inheritance-02f9243f959d9735394983761252229243eccd9b.svg create mode 100644 _images/inheritance-045f34905a9826c3550a2f44827ab194b424a3f4.svg create mode 100644 _images/inheritance-051bad2aaa4998f19490347f9dc5f699ad95d910.svg create mode 100644 _images/inheritance-0b01f1a23652a20058589004cf5e3ab7e38368eb.svg create mode 100644 _images/inheritance-0d550c16f92750cc47272903aa95c97c1e2e4309.svg create mode 100644 _images/inheritance-1da024d9257b5211666150428e6bdd1974d17c0e.svg create mode 100644 _images/inheritance-1f8f21c51285e3f048582ac72e05f4070bc2b96f.svg create mode 100644 _images/inheritance-1fb2cd91bf26a8808a2c960f1786c0a7a54669df.svg create mode 100644 _images/inheritance-2914c6ce1fe31843275f13e2d92423d5bdc2e013.svg create mode 100644 _images/inheritance-29bd0fbc566a31d13204092d61c984342ef287eb.svg create mode 100644 _images/inheritance-2b791d6a399f01c6376ae906ef13be5b33db0b8f.svg create mode 100644 _images/inheritance-30257f86e6def8ee1bfdfc519e300b1b98b5e0c2.svg create mode 100644 _images/inheritance-329e88fbb68685ad76b4c747e4ef5d27ab2c12b2.svg create mode 100644 _images/inheritance-32d2a8dfc687f1972d2021130744de9e07798c22.svg create mode 100644 _images/inheritance-335a0dfab96618683ed9f0bd0c77dcb95404da45.svg create mode 100644 _images/inheritance-3376049c961575561e7d04db1ed9b7cc64b0566e.svg create mode 100644 _images/inheritance-3561eedb6a225a46278f0eb14d2c1321141d570e.svg create mode 100644 _images/inheritance-37950c398ed2bdd8248160de6f8b627acfaed07d.svg create mode 100644 _images/inheritance-3b448ad8166b7759d4b745954f3e241eb6b8d2b4.svg create mode 100644 _images/inheritance-3ee63eb1c0b617b245fab387c6c983d1eab483df.svg create mode 100644 _images/inheritance-402c233d6c59a0ffbe58233b9deac75dd12e64ec.svg create mode 100644 _images/inheritance-4531e52b2b5533a8be0519fea209585022ec1d45.svg create mode 100644 _images/inheritance-4d71897ef28b655acbefaa5352f939c4e866bf69.svg create mode 100644 _images/inheritance-4e709432d815c5427bdd7303490558cef529763d.svg create mode 100644 _images/inheritance-4eaeb1afbcdcbd514e4c28d429e15ee502f00af8.svg create mode 100644 _images/inheritance-55d0f08278e0eae6f81baebd2027bbe8202f6bf7.svg create mode 100644 _images/inheritance-561c162a07f4b92989793599dc029258614e016a.svg create mode 100644 _images/inheritance-59de2c77f206dc9b6fc4594998ae2d25dbd66799.svg create mode 100644 _images/inheritance-5f7998c3fd93f5754f6a9cbdd84c347d69f2c76b.svg create mode 100644 _images/inheritance-615ed92ab65a6d7e5224967cd7e645ee42d31f1a.svg create mode 100644 _images/inheritance-6354c05b08965e1f81e0f9a1b4039977863dcaae.svg create mode 100644 _images/inheritance-638bfdae24e22314f3795645447df56aa5568cc5.svg create mode 100644 _images/inheritance-665221d8c717a30f4bc6bd9ca49f694a8ff88de3.svg create mode 100644 _images/inheritance-67859f0836d231ee858129b156bfe2b5f874b232.svg create mode 100644 _images/inheritance-69834e3dc0c7ee68ea78d9f2835d3418a4ff62ad.svg create mode 100644 _images/inheritance-70e6e371cb1242e0edc787b4770386d72d87c6b0.svg create mode 100644 _images/inheritance-72a02e76e4786f2aa8cb3d2a408649926b18b57e.svg create mode 100644 _images/inheritance-735e5dd07189d5bcb95d80074c385bd2bbb3696e.svg create mode 100644 _images/inheritance-74854232a473eb8dd6fc90ad9bfd6a78f805e93f.svg create mode 100644 _images/inheritance-7930ee97ccc1f5765c407abe8b71636ede92b32a.svg create mode 100644 _images/inheritance-7ded64fe5da60a0c72f478118e885fe7f3c2a9e6.svg create mode 100644 _images/inheritance-8103768b021e347214ee8b66f50d9e31ad4a214f.svg create mode 100644 _images/inheritance-828b1121538b024b9213b2244693ac542c1d9894.svg create mode 100644 _images/inheritance-86c645db73f5b0ca0eec97c6df5ecd23a04508ab.svg create mode 100644 _images/inheritance-887859a2ff9920e828190939860919619c89131b.svg create mode 100644 _images/inheritance-8d9a9bcd42331e8c61a993d2105259161f9a6d49.svg create mode 100644 _images/inheritance-97f74149210d494f5db1005a002fc72d8a7ea450.svg create mode 100644 _images/inheritance-9dc6af87c8802895de7278f0f98e85fa673110cc.svg create mode 100644 _images/inheritance-9fb9d25ffcae6c015a47ec0565c301d4c2559a93.svg create mode 100644 _images/inheritance-a6a1a9ddb9d1c201e76ab22f30da98983bd5872c.svg create mode 100644 _images/inheritance-a6d4320ce0a252ffadfa085b60029d88f48af02a.svg create mode 100644 _images/inheritance-aaa228c5c1b0700c8dcdb038a7c9d665508b3d23.svg create mode 100644 _images/inheritance-b07db2dbc61bc7e40a37a46c0dbafeb1fb369c6a.svg create mode 100644 _images/inheritance-b2db48ffc1454392bcd9ec0e7eb38c417007ded1.svg create mode 100644 _images/inheritance-b9455d8dbea2c399cf15f42bb05461428e00d503.svg create mode 100644 _images/inheritance-c0db9a9452d280fd4f77d2402f53bf4ded1df738.svg create mode 100644 _images/inheritance-c1ab0e0bbbbfa1d71c9f44b872b54d8b464474cb.svg create mode 100644 _images/inheritance-c45e3344fc2254ad13585e2d0cbe3d6ebd32902e.svg create mode 100644 _images/inheritance-c9dc00d125bbbe22b751bb62b32db29a03f9b439.svg create mode 100644 _images/inheritance-d0318bb7b1f8427e111d5ddb9dbbd2756f98a9d6.svg create mode 100644 _images/inheritance-dd2ec0f2c059b1f11939fbf9590d952c09fe2ef1.svg create mode 100644 _images/inheritance-de09690d100a49a67aff0983ee680bdfcab8c470.svg create mode 100644 _images/inheritance-e1d98a163021e56f15c82f15e0669b1800b8c071.svg create mode 100644 _images/inheritance-e7a62bdd54001858a4bf4b47abb19adc78011090.svg create mode 100644 _images/inheritance-e8c50a5f701fd191e214b6c28b9701e18e75cd98.svg create mode 100644 _images/inheritance-ecb1d9c2f1cb38d85861ecf755d1ff5167617126.svg create mode 100644 _images/inheritance-ed7724f665a569d4cb4ce4914a715a4e0d65027f.svg create mode 100644 _images/inheritance-eeb352b0961c213cabef2f192d4067ce222e551a.svg create mode 100644 _images/inheritance-ef08cface702ecb89d277d5889be7765f34ef864.svg create mode 100644 _images/inheritance-f0848d7ae24872d29f30c2a03e7ee2b1d6b3cfbf.svg create mode 100644 _images/inheritance-f19fcdd8136f51822f99c685283bf6daa4097492.svg create mode 100644 _images/inheritance-f525469c0f06651de3dd05d9094b4cebde2676e7.svg create mode 100644 _images/logo_on_light.svg create mode 100644 _modules/index.html create mode 100644 _modules/pyEDAA/ProjectModel.html create mode 100644 _modules/pyEDAA/ProjectModel/Altera/Quartus.html create mode 100644 _modules/pyEDAA/ProjectModel/Attributes.html create mode 100644 _modules/pyEDAA/ProjectModel/GHDL.html create mode 100644 _modules/pyEDAA/ProjectModel/Intel/QuartusPrime.html create mode 100644 _modules/pyEDAA/ProjectModel/MentorGraphics/ModelSim.html create mode 100644 _modules/pyEDAA/ProjectModel/MentorGraphics/QuestaSim.html create mode 100644 _modules/pyEDAA/ProjectModel/OSVVM.html create mode 100644 _modules/pyEDAA/ProjectModel/Verilog.html create mode 100644 _modules/pyEDAA/ProjectModel/Xilinx/ISE.html create mode 100644 _modules/pyEDAA/ProjectModel/Xilinx/Vivado.html create mode 100644 _sources/ChangeLog/index.rst.txt create mode 100644 _sources/Dependency.rst.txt create mode 100644 _sources/Doc-License.rst.txt create mode 100644 _sources/FileTypes/index.rst.txt create mode 100644 _sources/Glossary.rst.txt create mode 100644 _sources/Installation.rst.txt create mode 100644 _sources/License.rst.txt create mode 100644 _sources/ProjectModel/Design.rst.txt create mode 100644 _sources/ProjectModel/File.rst.txt create mode 100644 _sources/ProjectModel/FileSet.rst.txt create mode 100644 _sources/ProjectModel/Project.rst.txt create mode 100644 _sources/ProjectModel/VHDLLibrary.rst.txt create mode 100644 _sources/ProjectModel/index.rst.txt create mode 100644 _sources/coverage/index.rst.txt create mode 100644 _sources/genindex.rst.txt create mode 100644 _sources/index.rst.txt create mode 100644 _sources/py-modindex.rst.txt create mode 100644 _sources/pyEDAA.ProjectModel/index.rst.txt create mode 100644 _sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.Quartus.rst.txt create mode 100644 _sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.rst.txt create mode 100644 _sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Attributes.rst.txt create mode 100644 _sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.GHDL.rst.txt create mode 100644 _sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.QuartusPrime.rst.txt create mode 100644 _sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.rst.txt create mode 100644 _sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.ModelSim.rst.txt create mode 100644 _sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.QuestaSim.rst.txt create mode 100644 _sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.rst.txt create mode 100644 _sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.OSVVM.rst.txt create mode 100644 _sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.VHDL.rst.txt create mode 100644 _sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Verilog.rst.txt create mode 100644 _sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.ISE.rst.txt create mode 100644 _sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.Vivado.rst.txt create mode 100644 _sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.rst.txt create mode 100644 _sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.rst.txt create mode 100644 _sources/typing/index.rst.txt create mode 100644 _static/alabaster.css create mode 100644 _static/basic.css create mode 100644 _static/custom.css create mode 100644 _static/doctools.js create mode 100644 _static/documentation_options.js create mode 100644 _static/favicon.svg create mode 100644 _static/file.png create mode 100644 _static/github-banner.svg create mode 100644 _static/graphviz.css create mode 100644 _static/language_data.js create mode 100644 _static/logo_on_dark.svg create mode 100644 _static/logo_on_light.svg create mode 100644 _static/minus.png create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/searchtools.js create mode 100644 _static/sphinx_highlight.js create mode 100644 coverage/class_index.html create mode 100644 coverage/coverage_html_cb_6fb7b396.js create mode 100644 coverage/favicon_32_cb_58284776.png create mode 100644 coverage/function_index.html create mode 100644 coverage/index.html create mode 100644 coverage/keybd_closed_cb_ce680311.png create mode 100644 coverage/status.json create mode 100644 coverage/style_cb_8e611ae1.css create mode 100644 coverage/z_bb657af29d23493a_Attributes_py.html create mode 100644 coverage/z_bb657af29d23493a___init___py.html create mode 100644 coverage/z_f31a6c1cb708999d_Vivado_py.html create mode 100644 genindex.html create mode 100644 index.html create mode 100644 objects.inv create mode 100644 py-modindex.html create mode 100644 pyEDAA.ProjectModel/index.html create mode 100644 pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.Quartus.html create mode 100644 pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.html create mode 100644 pyEDAA.ProjectModel/pyEDAA.ProjectModel.Attributes.html create mode 100644 pyEDAA.ProjectModel/pyEDAA.ProjectModel.GHDL.html create mode 100644 pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.QuartusPrime.html create mode 100644 pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.html create mode 100644 pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.ModelSim.html create mode 100644 pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.QuestaSim.html create mode 100644 pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.html create mode 100644 pyEDAA.ProjectModel/pyEDAA.ProjectModel.OSVVM.html create mode 100644 pyEDAA.ProjectModel/pyEDAA.ProjectModel.VHDL.html create mode 100644 pyEDAA.ProjectModel/pyEDAA.ProjectModel.Verilog.html create mode 100644 pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.ISE.html create mode 100644 pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.Vivado.html create mode 100644 pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.html create mode 100644 pyEDAA.ProjectModel/pyEDAA.ProjectModel.html create mode 100644 search.html create mode 100644 searchindex.js create mode 100644 typing/html/pyEDAA/ProjectModel/Altera/Quartus.py.html create mode 100644 typing/html/pyEDAA/ProjectModel/Altera/__init__.py.html create mode 100644 typing/html/pyEDAA/ProjectModel/Attributes.py.html create mode 100644 typing/html/pyEDAA/ProjectModel/GHDL.py.html create mode 100644 typing/html/pyEDAA/ProjectModel/Intel/QuartusPrime.py.html create mode 100644 typing/html/pyEDAA/ProjectModel/Intel/__init__.py.html create mode 100644 typing/html/pyEDAA/ProjectModel/MentorGraphics/ModelSim.py.html create mode 100644 typing/html/pyEDAA/ProjectModel/MentorGraphics/QuestaSim.py.html create mode 100644 typing/html/pyEDAA/ProjectModel/MentorGraphics/__init__.py.html create mode 100644 typing/html/pyEDAA/ProjectModel/OSVVM.py.html create mode 100644 typing/html/pyEDAA/ProjectModel/VHDL.py.html create mode 100644 typing/html/pyEDAA/ProjectModel/Verilog.py.html create mode 100644 typing/html/pyEDAA/ProjectModel/Xilinx/ISE.py.html create mode 100644 typing/html/pyEDAA/ProjectModel/Xilinx/Vivado.py.html create mode 100644 typing/html/pyEDAA/ProjectModel/Xilinx/__init__.py.html create mode 100644 typing/html/pyEDAA/ProjectModel/__init__.py.html create mode 100644 typing/index.html create mode 100644 typing/mypy-html.css diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/ChangeLog/index.html b/ChangeLog/index.html new file mode 100644 index 00000000..3890d43a --- /dev/null +++ b/ChangeLog/index.html @@ -0,0 +1,142 @@ + + + + + + + + ChangeLog — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

ChangeLog

+
+

Upcoming Release

+
    +
  • tbd

  • +
+
+
+

01.09.2021

+

pyEDAA.ProjectModel was split from pyIPCMI (v1.1.6) as an independent Python package.

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/Dependency.html b/Dependency.html new file mode 100644 index 00000000..9adb422c --- /dev/null +++ b/Dependency.html @@ -0,0 +1,325 @@ + + + + + + + + Dependency — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Dependency

+ + + + + + + + + + + +

Libraries.io

Requires.io

Libraries.io status for latest release

Requires.io

+
+

pyEDAA.ProjectModel Package

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Package

Version

License

Dependencies

pyTooling

≥7.0

Apache License, 2.0

None

pyVHDLModel

≥0.27.1

Apache License, 2.0

+

pySVModel

≥0.3.1

Apache License, 2.0

+

pySystemRDLModel

≥0.1.0

Apache License, 2.0

+
+
+
+

Unit Testing / Coverage / Type Checking (Optional)

+

Additional Python packages needed for testing, code coverage collection and static type checking. These packages are +only needed for developers or on a CI server, thus sub-dependencies are not evaluated further.

+

Manually Installing Test Requirements

+

Use the tests/requirements.txt file to install all dependencies via pip3. The file will recursively install +the mandatory dependencies too.

+
pip3 install -U -r tests/requirements.txt
+
+
+

Dependency List

+
+
+

Sphinx Documentation (Optional)

+

Additional Python packages needed for documentation generation. These packages are only needed for developers or on a +CI server, thus sub-dependencies are not evaluated further.

+

Manually Installing Documentation Requirements

+

Use the doc/requirements.txt file to install all dependencies via pip3. The file will recursively install +the mandatory dependencies too.

+
pip3 install -U -r doc/requirements.txt
+
+
+

Dependency List

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Package

Version

License

Dependencies

pyTooling

≥7.0

Apache License, 2.0

None

Sphinx

≥8.1

BSD 3-Clause

Not yet evaluated.

sphinx_btd_theme

≥0.5.2

MIT

Not yet evaluated.

!! sphinx_fontawesome

≥0.0.6

GPL 2.0

Not yet evaluated.

sphinx_autodoc_typehints

≥2.5

MIT

Not yet evaluated.

+
+
+

Packaging (Optional)

+

Additional Python packages needed for installation package generation. These packages are only needed for developers or +on a CI server, thus sub-dependencies are not evaluated further.

+

Manually Installing Packaging Requirements

+

Use the build/requirements.txt file to install all dependencies via pip3. The file will recursively +install the mandatory dependencies too.

+
pip3 install -U -r build/requirements.txt
+
+
+

Dependency List

+ + + + + + + + + + + + + + + + + + + + +

Package

Version

License

Dependencies

pyTooling

≥7.0

Apache License, 2.0

None

wheel

≥0.44

MIT

Not yet evaluated.

+
+
+

Publishing (CI-Server only)

+

Additional Python packages needed for publishing the generated installation package to e.g, PyPI or any equivalent +services. These packages are only needed for maintainers or on a CI server, thus sub-dependencies are not evaluated +further.

+

Manually Installing Publishing Requirements

+

Use the dist/requirements.txt file to install all dependencies via pip3. The file will recursively +install the mandatory dependencies too.

+
pip3 install -U -r dist/requirements.txt
+
+
+

Dependency List

+ + + + + + + + + + + + + + + + + + + + +

Package

Version

License

Dependencies

wheel

≥0.44

MIT

Not yet evaluated.

Twine

≥5.1

Apache License, 2.0

Not yet evaluated.

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/Doc-License.html b/Doc-License.html new file mode 100644 index 00000000..975ff2e4 --- /dev/null +++ b/Doc-License.html @@ -0,0 +1,480 @@ + + + + + + + + Creative Commons Attribution 4.0 International — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ + +
+

Attention

+

This CC BY 4.0 license applies only to the documentation of this project.

+
+
+

Creative Commons Attribution 4.0 International

+

Creative Commons Corporation (“Creative Commons”) is not a law firm and does not +provide legal services or legal advice. Distribution of Creative Commons public +licenses does not create a lawyer-client or other relationship. Creative Commons +makes its licenses and related information available on an “as-is” basis. +Creative Commons gives no warranties regarding its licenses, any material +licensed under their terms and conditions, or any related information. Creative +Commons disclaims all liability for damages resulting from their use to the +fullest extent possible.

+ +

:xlarge:`Creative Commons Attribution 4.0 International Public License`

+

By exercising the Licensed Rights (defined below), You accept and agree to be +bound by the terms and conditions of this Creative Commons Attribution 4.0 +International Public License (“Public License”). To the extent this Public +License may be interpreted as a contract, You are granted the Licensed Rights +in consideration of Your acceptance of these terms and conditions, and the +Licensor grants You such rights in consideration of benefits the Licensor +receives from making the Licensed Material available under these terms and +conditions.

+
+

Section 1 – Definitions.

+
    +
  1. Adapted Material means material subject to Copyright and Similar +Rights that is derived from or based upon the Licensed Material and in +which the Licensed Material is translated, altered, arranged, transformed, or +otherwise modified in a manner requiring permission under the Copyright and +Similar Rights held by the Licensor. For purposes of this Public License, +where the Licensed Material is a musical work, performance, or sound +recording, Adapted Material is always produced where the Licensed Material +is synched in timed relation with a moving image.

  2. +
  3. Adapter’s License means the license You apply to Your Copyright and +Similar Rights in Your contributions to Adapted Material in accordance with +the terms and conditions of this Public License.

  4. +
  5. Copyright and Similar Rights means copyright and/or similar rights +closely related to copyright including, without limitation, performance, +broadcast, sound recording, and Sui Generis Database Rights, without regard +to how the rights are labeled or categorized. For purposes of this Public +License, the rights specified in Section 2(b)(1)-(2) are not Copyright and +Similar Rights.

  6. +
  7. Effective Technological Measures means those measures that, in the +absence of proper authority, may not be circumvented under laws fulfilling +obligations under Article 11 of the WIPO Copyright Treaty adopted on +December 20, 1996, and/or similar international agreements.

  8. +
  9. Exceptions and Limitations means fair use, fair dealing, and/or any +other exception or limitation to Copyright and Similar Rights that applies to +Your use of the Licensed Material.

  10. +
  11. Licensed Material means the artistic or literary work, database, or +other material to which the Licensor applied this Public License.

  12. +
  13. Licensed Rights means the rights granted to You subject to the terms +and conditions of this Public License, which are limited to all Copyright and +Similar Rights that apply to Your use of the Licensed Material and that the +Licensor has authority to license.

  14. +
  15. Licensor means the individual(s) or entity(ies) granting rights under +this Public License.

  16. +
  17. Share means to provide material to the public by any means or process +that requires permission under the Licensed Rights, such as reproduction, +public display, public performance, distribution, dissemination, +communication, or importation, and to make material available to the public +including in ways that members of the public may access the material from a +place and at a time individually chosen by them.

  18. +
  19. Sui Generis Database Rights means rights other than copyright +resulting from Directive 96/9/EC of the European Parliament and of the +Council of 11 March 1996 on the legal protection of databases, as amended +and/or succeeded, as well as other essentially equivalent rights anywhere +in the world.

  20. +
  21. You means the individual or entity exercising the Licensed Rights +under this Public License. Your has a corresponding meaning.

  22. +
+
+
+

Section 2 – Scope.

+
    +
  1. License grant.

    +
      +
    1. Subject to the terms and conditions of this Public License, the Licensor +hereby grants You a worldwide, royalty-free, non-sublicensable, +non-exclusive, irrevocable license to exercise the Licensed Rights in the +Licensed Material to:

      +
      +
        +
      1. reproduce and Share the Licensed Material, in whole or in part; and

      2. +
      3. produce, reproduce, and Share Adapted Material.

      4. +
      +
      +
    2. +
    3. :underline:`Exceptions and Limitations.` For the avoidance of doubt, where +Exceptions and Limitations apply to Your use, this Public License does not +apply, and You do not need to comply with its terms and conditions.

    4. +
    5. :underline:`Term.` The term of this Public License is specified in Section 6(a).

    6. +
    7. :underline:`Media and formats`; :underline:`technical modifications allowed.` The Licensor +authorizes You to exercise the Licensed Rights in all media and formats +whether now known or hereafter created, and to make technical +modifications necessary to do so. The Licensor waives and/or agrees not to +assert any right or authority to forbid You from making technical +modifications necessary to exercise the Licensed Rights, including +technical modifications necessary to circumvent Effective Technological +Measures. For purposes of this Public License, simply making modifications +authorized by this Section 2(a)(4) never produces Adapted Material.

    8. +
    9. :underline:`Downstream recipients.`

      +
      +
        +
      1. :underline:`Offer from the Licensor – Licensed Material.` Every recipient of +the Licensed Material automatically receives an offer from the +Licensor to exercise the Licensed Rights under the terms and +conditions of this Public License.

      2. +
      3. :underline:`No downstream restrictions.` You may not offer or impose any +additional or different terms or conditions on, or apply any Effective +Technological Measures to, the Licensed Material if doing so restricts +exercise of the Licensed Rights by any recipient of the Licensed +Material.

      4. +
      +
      +
    10. +
    11. :underline:`No endorsement.` Nothing in this Public License constitutes or may +be construed as permission to assert or imply that You are, or that Your +use of the Licensed Material is, connected with, or sponsored, endorsed, +or granted official status by, the Licensor or others designated to +receive attribution as provided in Section 3(a)(1)(A)(i).

    12. +
    +
  2. +
  3. Other rights.

    +
      +
    1. Moral rights, such as the right of integrity, are not licensed under this +Public License, nor are publicity, privacy, and/or other similar +personality rights; however, to the extent possible, the Licensor waives +and/or agrees not to assert any such rights held by the Licensor to the +limited extent necessary to allow You to exercise the Licensed Rights, but +not otherwise.

    2. +
    3. Patent and trademark rights are not licensed under this Public License.

    4. +
    5. To the extent possible, the Licensor waives any right to collect royalties +from You for the exercise of the Licensed Rights, whether directly or +through a collecting society under any voluntary or waivable statutory or +compulsory licensing scheme. In all other cases the Licensor expressly +reserves any right to collect such royalties.

    6. +
    +
  4. +
+
+
+

Section 3 – License Conditions.

+

Your exercise of the Licensed Rights is expressly made subject to the following conditions.

+
    +
  1. Attribution.

    +
      +
    1. If You Share the Licensed Material (including in modified form), You must:

      +
      +
        +
      1. retain the following if it is supplied by the Licensor with the +Licensed Material:

      2. +
      +
      +
        +
      1. identification of the creator(s) of the Licensed Material and any +others designated to receive attribution, in any reasonable manner +requested by the Licensor (including by pseudonym if designated);

      2. +
      3. a copyright notice;

      4. +
      5. a notice that refers to this Public License;

      6. +
      7. a notice that refers to the disclaimer of warranties;

      8. +
      9. a URI or hyperlink to the Licensed Material to the extent reasonably +practicable;

      10. +
      +
      +
        +
      1. indicate if You modified the Licensed Material and retain an +indication of any previous modifications; and

      2. +
      3. indicate the Licensed Material is licensed under this Public License, +and include the text of, or the URI or hyperlink to, this Public +License.

      4. +
      +
      +
    2. +
    3. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner +based on the medium, means, and context in which You Share the Licensed +Material. For example, it may be reasonable to satisfy the conditions by +providing a URI or hyperlink to a resource that includes the required +information.

    4. +
    5. If requested by the Licensor, You must remove any of the information +required by Section 3(a)(1)(A) to the extent reasonably practicable.

    6. +
    7. If You Share Adapted Material You produce, the Adapter’s License You apply +must not prevent recipients of the Adapted Material from complying with +this Public License.

    8. +
    +
  2. +
+
+
+

Section 4 – Sui Generis Database Rights.

+

Where the Licensed Rights include Sui Generis Database Rights that apply to Your +use of the Licensed Material:

+
    +
  1. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, +reuse, reproduce, and Share all or a substantial portion of the contents of +the database;

  2. +
  3. if You include all or a substantial portion of the database contents in a +database in which You have Sui Generis Database Rights, then the database +in which You have Sui Generis Database Rights (but not its individual +contents) is Adapted Material; and

  4. +
  5. You must comply with the conditions in Section 3(a) if You Share all or a +substantial portion of the contents of the database.

  6. +
+

For the avoidance of doubt, this Section 4 supplements and does not replace +Your obligations under this Public License where the Licensed Rights include +other Copyright and Similar Rights.

+
+
+

Section 5 – Disclaimer of Warranties and Limitation of Liability.

+
    +
  1. Unless otherwise separately undertaken by the Licensor, to the extent +possible, the Licensor offers the Licensed Material as-is and as-available, +and makes no representations or warranties of any kind concerning the +Licensed Material, whether express, implied, statutory, or other. This +includes, without limitation, warranties of title, merchantability, +fitness for a particular purpose, non-infringement, absence of latent or +other defects, accuracy, or the presence or absence of errors, whether or +not known or discoverable. Where disclaimers of warranties are not allowed +in full or in part, this disclaimer may not apply to You.

  2. +
  3. To the extent possible, in no event will the Licensor be liable to You +on any legal theory (including, without limitation, negligence) or +otherwise for any direct, special, indirect, incidental, consequential, +punitive, exemplary, or other losses, costs, expenses, or damages arising +out of this Public License or use of the Licensed Material, even if the +Licensor has been advised of the possibility of such losses, costs, expenses, +or damages. Where a limitation of liability is not allowed in full or in +part, this limitation may not apply to You.

  4. +
  5. The disclaimer of warranties and limitation of liability provided above +shall be interpreted in a manner that, to the extent possible, most +closely approximates an absolute disclaimer and waiver of all liability.

  6. +
+
+
+

Section 6 – Term and Termination.

+
    +
  1. This Public License applies for the term of the Copyright and Similar Rights +licensed here. However, if You fail to comply with this Public License, then +Your rights under this Public License terminate automatically.

  2. +
  3. Where Your right to use the Licensed Material has terminated under +Section 6(a), it reinstates:

    +
      +
    1. automatically as of the date the violation is cured, provided it is cured +within 30 days of Your discovery of the violation; or

    2. +
    3. upon express reinstatement by the Licensor.

    4. +
    +

    For the avoidance of doubt, this Section 6(b) does not affect any right the +Licensor may have to seek remedies for Your violations of this Public License.

    +
  4. +
  5. For the avoidance of doubt, the Licensor may also offer the Licensed Material +under separate terms or conditions or stop distributing the Licensed Material +at any time; however, doing so will not terminate this Public License.

  6. +
  7. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.

  8. +
+
+
+

Section 7 – Other Terms and Conditions.

+
    +
  1. The Licensor shall not be bound by any additional or different terms or +conditions communicated by You unless expressly agreed.

  2. +
  3. Any arrangements, understandings, or agreements regarding the Licensed +Material not stated herein are separate from and independent of the terms +and conditions of this Public License.

  4. +
+
+
+

Section 8 – Interpretation.

+
    +
  1. For the avoidance of doubt, this Public License does not, and shall not be +interpreted to, reduce, limit, restrict, or impose conditions on any use of +the Licensed Material that could lawfully be made without permission under +this Public License.

  2. +
  3. To the extent possible, if any provision of this Public License is deemed +unenforceable, it shall be automatically reformed to the minimum extent +necessary to make it enforceable. If the provision cannot be reformed, it +shall be severed from this Public License without affecting the +enforceability of the remaining terms and conditions.

  4. +
  5. No term or condition of this Public License will be waived and no failure to +comply consented to unless expressly agreed to by the Licensor.

  6. +
  7. Nothing in this Public License constitutes or may be interpreted as a +limitation upon, or waiver of, any privileges and immunities that apply to +the Licensor or You, including from the legal processes of any jurisdiction +or authority.

  8. +
+
+

Creative Commons is not a party to its public licenses. Notwithstanding, +Creative Commons may elect to apply one of its public licenses to material it +publishes and in those instances will be considered the “Licensor.” Except for +the limited purpose of indicating that material is shared under a Creative +Commons public license or as otherwise permitted by the Creative Commons +policies published at creativecommons.org/policies, +Creative Commons does not authorize the use of the trademark “Creative Commons” +or any other trademark or logo of Creative Commons without its prior written +consent including, without limitation, in connection with any unauthorized +modifications to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For the +avoidance of doubt, this paragraph does not form part of the public licenses.

+

Creative Commons may be contacted at creativecommons.org

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/FileTypes/index.html b/FileTypes/index.html new file mode 100644 index 00000000..1c42a6f9 --- /dev/null +++ b/FileTypes/index.html @@ -0,0 +1,183 @@ + + + + + + + + File Types — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

File Types

+

Design Goals

+

TBD

+
+

Content Types

+
+        graph TD;
+  HRC[HumanReadableContent] --> XMLC[XMLContent];
+  HRC --> YAMLC[YAMLContent];
+  HRC --> JSONC[JSONContent];
+  HRC --> INIC[INIContent];
+  HRC --> TOMLC[TOMLContent];
+  HRC --> TCLC[TCLContent] --> SDCC[SDCContent];
+    
+
+

Overall Hierarchy

+
+        graph TD;
+  File-->TextFile;
+  File-->LogFile;
+  File-->XMLFile;
+  File--->SourceFile;
+  File-->ConstraintFile;
+  File-->ProjectFile;
+  File-->SettingFile;
+  SourceFile-->HDLSourceFile;
+  SourceFile-->NetlistFile;
+  NetlistFile-->EDIFNetlistFile;
+  HDLSourceFile-->VHDLSourceFile;
+  HDLSourceFile-->VerilogSourceFile;
+  HDLSourceFile-->SystemVerilogSourceFile;
+  SourceFile-->PythonSourceFile;
+  PythonSourceFile-->CocotbSourceFile
+  SourceFile-->CSourceFile;
+  SourceFile-->CppSourceFile;
+    
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/Glossary.html b/Glossary.html new file mode 100644 index 00000000..e2c0aded --- /dev/null +++ b/Glossary.html @@ -0,0 +1,172 @@ + + + + + + + + Glossary — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Glossary

+
+
LRM

Language Reference Manual is the name given to IEEE Standard documents defining Hardware Description Languages:

+ +
+
base-class

An ancestor class for other derived classes.

+
+
File

A representation of a physical file.

+
+
FileSet

A group of files.

+
+
Default fileset

If no fileset is specified, the pre-existing fileset named default is used to group files.

+
+
VHDLLibrary

A namespace in VHDL to group and organize VHDL design units (entity, package, configuration, context).

+
+
Design

A …

+
+
Project

A …

+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/Installation.html b/Installation.html new file mode 100644 index 00000000..0a612a6c --- /dev/null +++ b/Installation.html @@ -0,0 +1,191 @@ + + + + + + + + Installation/Updates — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Installation/Updates

+
+

Note

+

Python ≥3.7 is required for this package due to problems with meta classes and +__getattr__ in Python 3.6.

+
+
+

Using PIP

+
+

Installation from PyPI using PIP

+
pip3 install pyEDAA.ProjectModel
+
+
+
+
+

Updating from PyPI using PIP

+
pip3 install -U pyEDAA.ProjectModel
+
+
+
+
+

Uninstallation using PIP

+
pip3 uninstall pyEDAA.ProjectModel
+
+
+
+
+

Installation from local directory using PIP

+
pip3 install .
+
+
+
+
+
+

Using setup.py (legacy)

+

See sections above on how to use PIP.

+
+

Installation using setup.py

+
setup.py install
+
+
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/License.html b/License.html new file mode 100644 index 00000000..12599e3f --- /dev/null +++ b/License.html @@ -0,0 +1,271 @@ + + + + + + + + Apache License 2.0 — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Note

+

This is a local copy of the Apache License Version 2.0.

+
+
+

Attention

+

This Apache License, 2.0 applies to all source and configuration files of project, except documentation.

+
+
+

Apache License 2.0

+

Version 2.0, January 2004

+

:xlarge:`TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION`

+
+

1. Definitions.

+

“License” shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.

+

“Licensor” shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.

+

“Legal Entity” shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that +entity. For the purposes of this definition, “control” means (i) the power, direct or indirect, to cause the direction or management of such entity, whether +by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.

+

“You” (or “Your”) shall mean an individual or Legal Entity exercising permissions granted by this License.

+

“Source” form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and +configuration files.

+

“Object” form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object +code, generated documentation, and conversions to other media types.

+

“Work” shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is +included in or attached to the work (an example is provided in the Appendix below).

+

“Derivative Works” shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

+

“Contribution” shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative +Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to +submit on behalf of the copyright owner. For the purposes of this definition, “submitted” means any form of electronic, verbal, or written communication +sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue +tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is +conspicuously marked or otherwise designated in writing by the copyright owner as “Not a Contribution.”

+

“Contributor” shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work.

+
+ +
+

3. Grant of Patent License.

+

Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such +license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of +their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim +or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then +any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.

+
+
+

4. Redistribution.

+

You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions:

+
    +
  • You must give any other recipients of the Work or Derivative Works a copy of this License; and

  • +
  • You must cause any modified files to carry prominent notices stating that You changed the files; and

  • +
  • You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source +form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and

  • +
  • If the Work includes a “NOTICE” text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the +Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE +file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, +alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.

  • +
+

You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise +complies with the conditions stated in this License.

+
+
+

5. Submission of Contributions.

+

Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any +separate license agreement you may have executed with Licensor regarding such Contributions.

+
+
+

6. Trademarks.

+

This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable +and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.

+
+
+

7. Disclaimer of Warranty.

+

Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an “AS IS” BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, +MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and +assume any risks associated with Your exercise of permissions under this License.

+
+
+

8. Limitation of Liability.

+

In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or +consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages +for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been +advised of the possibility of such damages.

+
+
+

9. Accepting Warranty or Additional Liability.

+

While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other +liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole +responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

+
+

:xlarge:`Appendix: How to apply the Apache License to your work`

+

To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets “[]” replaced with your own identifying +information. (Don’t include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or +class name and description of purpose be included on the same “printed page” as the copyright notice for easier identification within third-party archives.

+
Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/ProjectModel/Design.html b/ProjectModel/Design.html new file mode 100644 index 00000000..d686aa48 --- /dev/null +++ b/ProjectModel/Design.html @@ -0,0 +1,253 @@ + + + + + + + + Design — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Design

+

Generic description of an EDA design.

+
+

Todo

+

Write documentation.

+
+

Class Relationship

+
+        graph TD;
+  Project --> Design;
+  Design  --> VHDLLibrary;
+  Design  --> FileSet;
+  VHDLLibrary --> File;
+  FileSet --> File
+
+  style Design fill:#ee9b00
+    
+

Condensed definition of class Design

+
@export
+class Design:
+  _name:                  str
+  _project:               Nullable['Project']
+  _directory:             Nullable[Path]
+  _fileSets:              Dict[str, FileSet]
+  _defaultFileSet:        Nullable[FileSet]
+  _vhdlLibraries:         Dict[str, VHDLLibrary]
+  _vhdlVersion:           VHDLVersion
+  _verilogVersion:        VerilogVersion
+  _svVersion:             SystemVerilogVersion
+  _externalVHDLLibraries: List
+
+  def __init__(
+    self,
+    name: str,
+    directory: Path = Path("."),
+    project: 'Project' = None,
+    vhdlVersion: VHDLVersion = None,
+    verilogVersion: VerilogVersion = None,
+    svVersion: SystemVerilogVersion = None
+  ):
+
+  @property
+  def Name(self) -> str:
+
+  @property
+  def Project(self) -> Nullable['Project']:
+  @Project.setter
+  def Project(self, value: 'Project') -> None:
+
+  @property
+  def Directory(self) -> Path:
+  @Directory.setter
+  def Directory(self, value: Path) -> None:
+
+  @property
+  def ResolvedPath(self) -> Path:
+
+  @property
+  def DefaultFileSet(self) -> FileSet:
+  @DefaultFileSet.setter
+  def DefaultFileSet(self, value: Union[str, FileSet]) -> None:
+
+  @property
+  def FileSets(self) -> Dict[str, FileSet]:
+
+  def Files(self, fileType: FileType = FileTypes.Any, fileSet: Union[str, FileSet] = None) -> Generator[File, None, None]:
+
+  @property
+  def VHDLLibraries(self) -> List[VHDLLibrary]:
+
+  @property
+  def VHDLVersion(self) -> VHDLVersion:
+  @VHDLVersion.setter
+  def VHDLVersion(self, value: VHDLVersion) -> None:
+
+  @property
+  def VerilogVersion(self) -> VerilogVersion:
+  @VerilogVersion.setter
+  def VerilogVersion(self, value: VerilogVersion) -> None:
+
+  @property
+  def SVVersion(self) -> SystemVerilogVersion:
+  @SVVersion.setter
+  def SVVersion(self, value: SystemVerilogVersion) -> None:
+
+  @property
+  def ExternalVHDLLibraries(self) -> List:
+
+  def AddFileSet(self, fileSet: FileSet) -> None:
+
+  def AddFileSets(self, fileSets: Iterable[FileSet]) -> None:
+
+  def AddFile(self, file: File) -> None:
+
+  def AddFiles(self, files: Iterable[File]) -> None:
+
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/ProjectModel/File.html b/ProjectModel/File.html new file mode 100644 index 00000000..f700e4e4 --- /dev/null +++ b/ProjectModel/File.html @@ -0,0 +1,214 @@ + + + + + + + + File — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

File

+

Generic description of a file in EDA design.

+
+

Todo

+

Write documentation.

+
+

Class Relationship

+
+        graph TD;
+  Project --> Design;
+  Design  --> VHDLLibrary;
+  Design  --> FileSet;
+  VHDLLibrary --> File;
+  FileSet --> File
+
+  style File fill:#ee9b00
+    
+

Condensed definition of class File

+
@export
+class File(metaclass=FileType):
+  _path:     Path
+  _project:  Nullable['Project']
+  _design:   Nullable['Design']
+  _fileSet:  Nullable['FileSet']
+
+  def __init__(
+    self,
+    path: Path,
+    project: 'Project' = None,
+    design: 'Design' = None,
+    fileSet: 'FileSet' = None
+  ):
+
+  @property
+  def FileType(self) -> 'FileType':
+
+  @property
+  def Path(self) -> Path:
+
+  @property
+  def ResolvedPath(self) -> Path:
+
+  @property
+  def Project(self) -> Nullable['Project']:
+  @Project.setter
+  def Project(self, value: 'Project') -> None:
+
+  @property
+  def Design(self) -> Nullable['Design']:
+  @Design.setter
+  def Design(self, value: 'Design') -> None:
+
+  @property
+  def FileSet(self) -> Nullable['FileSet']:
+  @FileSet.setter
+  def FileSet(self, value: 'FileSet') -> None:
+
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/ProjectModel/FileSet.html b/ProjectModel/FileSet.html new file mode 100644 index 00000000..5e28e198 --- /dev/null +++ b/ProjectModel/FileSet.html @@ -0,0 +1,258 @@ + + + + + + + + FileSet — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

FileSet

+

Generic description of an EDA file set (group of files).

+
+

Todo

+

Write documentation.

+
+

Class Relationship

+
+        graph TD;
+  Project --> Design;
+  Design  --> VHDLLibrary;
+  Design  --> FileSet;
+  VHDLLibrary --> File;
+  FileSet --> File
+
+  style FileSet fill:#ee9b00
+    
+

Condensed definition of class FileSet

+
@export
+class FileSet:
+  _name:        str
+  _project:     Nullable['Project']
+  _design:      Nullable['Design']
+  _directory:   Nullable[Path]
+  _parent:      Nullable['FileSet']
+  _fileSets:    Dict[str, 'FileSet']
+  _files:       List[File]
+
+  _vhdlLibrary:     'VHDLLibrary'
+  _vhdlVersion:     VHDLVersion
+  _verilogVersion:  VerilogVersion
+  _svVersion:       SystemVerilogVersion
+
+  def __init__(
+    self,
+    name: str,
+    directory: Path = Path("."),
+    project: 'Project' = None,
+    design: 'Design' = None,
+    parent: Nullable['FileSet'] = None,
+    vhdlLibrary: Union[str, 'VHDLLibrary'] = None,
+    vhdlVersion: VHDLVersion = None,
+    verilogVersion: VerilogVersion = None,
+    svVersion: SystemVerilogVersion = None
+  ):
+
+  @property
+  def Name(self) -> str:
+
+  @property
+  def Project(self) -> Nullable['Project']:
+  @Project.setter
+  def Project(self, value: 'Project') -> None:
+
+  @property
+  def Design(self) -> Nullable['Design']:
+  @Design.setter
+  def Design(self, value: 'Design') -> None:
+
+  @property
+  def Directory(self) -> Path:
+  @Directory.setter
+  def Directory(self, value: Path) -> None:
+
+  @property
+  def ResolvedPath(self) -> Path:
+
+  @property
+  def Parent(self) -> Nullable['FileSet']:
+  @Parent.setter
+  def Parent(self, value: 'FileSet') -> None:
+
+  @property
+  def FileSets(self) -> Dict[str, 'FileSet']:
+
+  def Files(self, fileType: FileType = FileTypes.Any, fileSet: Union[str, 'FileSet'] = None) -> Generator[File, None, None]:
+
+  def AddFile(self, file: File) -> None:
+
+  def AddFiles(self, files: Iterable[File]) -> None:
+
+  @property
+  def VHDLLibrary(self) -> 'VHDLLibrary':
+  @VHDLLibrary.setter
+  def VHDLLibrary(self, value: 'VHDLLibrary') -> None:
+
+  @property
+  def VHDLVersion(self) -> VHDLVersion:
+  @VHDLVersion.setter
+  def VHDLVersion(self, value: VHDLVersion) -> None:
+
+  @property
+  def VerilogVersion(self) -> VerilogVersion:
+  @VerilogVersion.setter
+  def VerilogVersion(self, value: VerilogVersion) -> None:
+
+  @property
+  def SVVersion(self) -> SystemVerilogVersion:
+  @SVVersion.setter
+  def SVVersion(self, value: SystemVerilogVersion) -> None:
+
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/ProjectModel/Project.html b/ProjectModel/Project.html new file mode 100644 index 00000000..9cce4464 --- /dev/null +++ b/ProjectModel/Project.html @@ -0,0 +1,222 @@ + + + + + + + + Project — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Project

+

Generic description of an EDA project.

+
+

Todo

+

Write documentation.

+
+

Class Relationship

+
+        graph TD;
+  Project --> Design;
+  Design  --> VHDLLibrary;
+  Design  --> FileSet;
+  VHDLLibrary --> File;
+  FileSet --> File
+
+  style Project fill:#ee9b00
+    
+

Condensed definition of class Project

+
@export
+class Project:
+  _name:                  str
+  _rootDirectory:         Nullable[Path]
+  _designs:               Dict[str, Design]
+  _vhdlVersion:           VHDLVersion
+  _verilogVersion:        VerilogVersion
+  _svVersion:             SystemVerilogVersion
+
+  def __init__(
+    self,
+    name: str,
+    rootDirectory: Path = Path("."),
+    vhdlVersion: VHDLVersion = None,
+    verilogVersion: VerilogVersion = None,
+    svVersion: SystemVerilogVersion = None
+  ):
+
+  @property
+  def Name(self) -> str:
+
+  @property
+  def RootDirectory(self) -> Path:
+  @RootDirectory.setter
+  def RootDirectory(self, value: Path) -> None:
+
+  @property
+  def ResolvedPath(self) -> Path:
+
+  @property
+  def Designs(self) -> Dict[str, Design]:
+
+  @property
+  def VHDLVersion(self) -> VHDLVersion:
+  @VHDLVersion.setter
+  def VHDLVersion(self, value: VHDLVersion) -> None:
+
+  @property
+  def VerilogVersion(self) -> VerilogVersion:
+  @VerilogVersion.setter
+  def VerilogVersion(self, value: VerilogVersion) -> None:
+
+  @property
+  def SVVersion(self) -> SystemVerilogVersion:
+  @SVVersion.setter
+  def SVVersion(self, value: SystemVerilogVersion) -> None:
+
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/ProjectModel/VHDLLibrary.html b/ProjectModel/VHDLLibrary.html new file mode 100644 index 00000000..3aa44874 --- /dev/null +++ b/ProjectModel/VHDLLibrary.html @@ -0,0 +1,212 @@ + + + + + + + + VHDL Library — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

VHDL Library

+

Generic description of a VHDL library (group of VHDL files containing VHDL primary units).

+
+

Todo

+

Write documentation.

+
+

Class Relationship

+
+        graph TD;
+  Project --> Design;
+  Design  --> VHDLLibrary;
+  Design  --> FileSet;
+  VHDLLibrary --> File;
+  FileSet --> File
+
+  style VHDLLibrary fill:#ee9b00
+    
+

Condensed definition of class VHDLLibrary

+
@export
+class VHDLLibrary:
+  _name:        str
+  _project:     Nullable['Project']
+  _design:      Nullable['Design']
+  _files:       List[File]
+  _vhdlVersion: VHDLVersion
+
+  def __init__(
+    self,
+    name: str,
+    project: 'Project' = None,
+    design: 'Design' = None,
+    vhdlVersion: VHDLVersion = None
+  ):
+
+  @property
+  def Name(self) -> str:
+
+  @property
+  def Project(self) -> Nullable['Project']:
+  @Project.setter
+  def Project(self, value: 'Project'):
+
+  @property
+  def Design(self) -> Nullable['Design']:
+  @Design.setter
+  def Design(self, value: 'Design'):
+
+  @property
+  def Files(self) -> Generator[File, None, None]:
+
+  @property
+  def VHDLVersion(self) -> VHDLVersion:
+  @VHDLVersion.setter
+  def VHDLVersion(self, value: VHDLVersion) -> None:
+
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/ProjectModel/index.html b/ProjectModel/index.html new file mode 100644 index 00000000..15fb5321 --- /dev/null +++ b/ProjectModel/index.html @@ -0,0 +1,183 @@ + + + + + + + + Project Model — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Project Model

+

Design Goals

+
    +
  • Clearly named classes that model the semantics of an EDA project.

  • +
  • Child objects shall have a reference to their parent.

  • +
+

Overall Hierarchy

+

An EDA project contains one or multiple variants of a EDA design. +A design then has at least one but usually multiple file sets to group source files and apply settings or attributes to that group.

+
+        graph TD;
+  Project-->Design_A;
+  Project-->Design_B;
+  Design_A-->VHDLLibrary_LA;
+  Design_A-->FileSet_DefaultA;
+  Design_A-->FileSet_A1;
+  Design_A-->FileSet_A2;
+  FileSet_A2-->FileSet_3
+  Design_B-->VHDLLibrary_LB;
+  Design_B-->FileSet_DefaultB;
+  Design_B-->FileSet_B1;
+  Design_B-->FileSet_B2;
+  FileSet_B2-->FileSet_3
+    

Elements of the Project Model

+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_images/inheritance-02f9243f959d9735394983761252229243eccd9b.svg b/_images/inheritance-02f9243f959d9735394983761252229243eccd9b.svg new file mode 100644 index 00000000..9669939c --- /dev/null +++ b/_images/inheritance-02f9243f959d9735394983761252229243eccd9b.svg @@ -0,0 +1,107 @@ + + +inheritance346c88fc38 + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + +HDLSourceFile + + +HDLSourceFile + + + + + +VerilogBaseFile + + +VerilogBaseFile + + + + + +HDLSourceFile->VerilogBaseFile + + + + + +SourceFile->HDLSourceFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +HumanReadableContent->VerilogBaseFile + + + + + +VerilogSourceFile + + +VerilogSourceFile + + + + + +VerilogBaseFile->VerilogSourceFile + + + + + +VerilogMixIn + +VerilogMixIn + + + +VerilogMixIn->VerilogSourceFile + + + + + +VerilogSourceFile->VerilogSourceFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-045f34905a9826c3550a2f44827ab194b424a3f4.svg b/_images/inheritance-045f34905a9826c3550a2f44827ab194b424a3f4.svg new file mode 100644 index 00000000..0014b48c --- /dev/null +++ b/_images/inheritance-045f34905a9826c3550a2f44827ab194b424a3f4.svg @@ -0,0 +1,74 @@ + + +inheritance395c582a70 + + +File + + +File + + + + + +ProjectFile + + +ProjectFile + + + + + +File->ProjectFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +TCLContent + + +TCLContent + + + + + +HumanReadableContent->TCLContent + + + + + +OSVVMProjectFile + + +OSVVMProjectFile + + + + + +ProjectFile->OSVVMProjectFile + + + + + +TCLContent->OSVVMProjectFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-051bad2aaa4998f19490347f9dc5f699ad95d910.svg b/_images/inheritance-051bad2aaa4998f19490347f9dc5f699ad95d910.svg new file mode 100644 index 00000000..82cf8f72 --- /dev/null +++ b/_images/inheritance-051bad2aaa4998f19490347f9dc5f699ad95d910.svg @@ -0,0 +1,44 @@ + + +inheritance38ff41b4f8 + + +File + + +File + + + + + +LogFile + + +LogFile + + + + + +File->LogFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +HumanReadableContent->LogFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-0b01f1a23652a20058589004cf5e3ab7e38368eb.svg b/_images/inheritance-0b01f1a23652a20058589004cf5e3ab7e38368eb.svg new file mode 100644 index 00000000..62a14f9a --- /dev/null +++ b/_images/inheritance-0b01f1a23652a20058589004cf5e3ab7e38368eb.svg @@ -0,0 +1,14 @@ + + +inheritance76eed77688 + + +Project + + +Project + + + + + \ No newline at end of file diff --git a/_images/inheritance-0d550c16f92750cc47272903aa95c97c1e2e4309.svg b/_images/inheritance-0d550c16f92750cc47272903aa95c97c1e2e4309.svg new file mode 100644 index 00000000..66df7564 --- /dev/null +++ b/_images/inheritance-0d550c16f92750cc47272903aa95c97c1e2e4309.svg @@ -0,0 +1,62 @@ + + +inheritance0642508b41 + + +ConstraintFile + + +ConstraintFile + + + + + +ConstraintFile->ConstraintFile + + + + + +File + + +File + + + + + +File->ConstraintFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +HumanReadableContent->ConstraintFile + + + + + +VivadoFileMixIn + +VivadoFileMixIn + + + +VivadoFileMixIn->ConstraintFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-1da024d9257b5211666150428e6bdd1974d17c0e.svg b/_images/inheritance-1da024d9257b5211666150428e6bdd1974d17c0e.svg new file mode 100644 index 00000000..e2d61d8f --- /dev/null +++ b/_images/inheritance-1da024d9257b5211666150428e6bdd1974d17c0e.svg @@ -0,0 +1,74 @@ + + +inheritance00cd175873 + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + +HDLSourceFile + + +HDLSourceFile + + + + + +VerilogBaseFile + + +VerilogBaseFile + + + + + +HDLSourceFile->VerilogBaseFile + + + + + +SourceFile->HDLSourceFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +HumanReadableContent->VerilogBaseFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-1f8f21c51285e3f048582ac72e05f4070bc2b96f.svg b/_images/inheritance-1f8f21c51285e3f048582ac72e05f4070bc2b96f.svg new file mode 100644 index 00000000..1d7aa9f2 --- /dev/null +++ b/_images/inheritance-1f8f21c51285e3f048582ac72e05f4070bc2b96f.svg @@ -0,0 +1,44 @@ + + +inheritanceb6ea453a07 + + +File + + +File + + + + + +ProjectFile + + +ProjectFile + + + + + +File->ProjectFile + + + + + +ISEProjectFile + + +ISEProjectFile + + + + + +ProjectFile->ISEProjectFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-1fb2cd91bf26a8808a2c960f1786c0a7a54669df.svg b/_images/inheritance-1fb2cd91bf26a8808a2c960f1786c0a7a54669df.svg new file mode 100644 index 00000000..ab449a67 --- /dev/null +++ b/_images/inheritance-1fb2cd91bf26a8808a2c960f1786c0a7a54669df.svg @@ -0,0 +1,74 @@ + + +inheritancee3f3389572 + + +File + + +File + + + + + +WaveformConfigFile + + +WaveformConfigFile + + + + + +File->WaveformConfigFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +TCLContent + + +TCLContent + + + + + +HumanReadableContent->TCLContent + + + + + +WaveDoFile + + +WaveDoFile + + + + + +TCLContent->WaveDoFile + + + + + +WaveformConfigFile->WaveDoFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-2914c6ce1fe31843275f13e2d92423d5bdc2e013.svg b/_images/inheritance-2914c6ce1fe31843275f13e2d92423d5bdc2e013.svg new file mode 100644 index 00000000..3153431a --- /dev/null +++ b/_images/inheritance-2914c6ce1fe31843275f13e2d92423d5bdc2e013.svg @@ -0,0 +1,29 @@ + + +inheritance2016aad402 + + +File + + +File + + + + + +WaveformConfigFile + + +WaveformConfigFile + + + + + +File->WaveformConfigFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-29bd0fbc566a31d13204092d61c984342ef287eb.svg b/_images/inheritance-29bd0fbc566a31d13204092d61c984342ef287eb.svg new file mode 100644 index 00000000..07a63d29 --- /dev/null +++ b/_images/inheritance-29bd0fbc566a31d13204092d61c984342ef287eb.svg @@ -0,0 +1,29 @@ + + +inheritancecfec5b17ae + + +HumanReadableContent + + +HumanReadableContent + + + + + +JSONContent + + +JSONContent + + + + + +HumanReadableContent->JSONContent + + + + + \ No newline at end of file diff --git a/_images/inheritance-2b791d6a399f01c6376ae906ef13be5b33db0b8f.svg b/_images/inheritance-2b791d6a399f01c6376ae906ef13be5b33db0b8f.svg new file mode 100644 index 00000000..f6902497 --- /dev/null +++ b/_images/inheritance-2b791d6a399f01c6376ae906ef13be5b33db0b8f.svg @@ -0,0 +1,44 @@ + + +inheritancef5edb30dd4 + + +HumanReadableContent + + +HumanReadableContent + + + + + +TCLContent + + +TCLContent + + + + + +HumanReadableContent->TCLContent + + + + + +SDCContent + + +SDCContent + + + + + +TCLContent->SDCContent + + + + + \ No newline at end of file diff --git a/_images/inheritance-30257f86e6def8ee1bfdfc519e300b1b98b5e0c2.svg b/_images/inheritance-30257f86e6def8ee1bfdfc519e300b1b98b5e0c2.svg new file mode 100644 index 00000000..815e4960 --- /dev/null +++ b/_images/inheritance-30257f86e6def8ee1bfdfc519e300b1b98b5e0c2.svg @@ -0,0 +1,74 @@ + + +inheritance41f7f21b1e + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + +HDLSourceFile + + +HDLSourceFile + + + + + +VHDLSourceFile + + +VHDLSourceFile + + + + + +HDLSourceFile->VHDLSourceFile + + + + + +SourceFile->HDLSourceFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +HumanReadableContent->VHDLSourceFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-329e88fbb68685ad76b4c747e4ef5d27ab2c12b2.svg b/_images/inheritance-329e88fbb68685ad76b4c747e4ef5d27ab2c12b2.svg new file mode 100644 index 00000000..b6cd9e45 --- /dev/null +++ b/_images/inheritance-329e88fbb68685ad76b4c747e4ef5d27ab2c12b2.svg @@ -0,0 +1,29 @@ + + +inheritancee7e42b3f56 + + +HumanReadableContent + + +HumanReadableContent + + + + + +INIContent + + +INIContent + + + + + +HumanReadableContent->INIContent + + + + + \ No newline at end of file diff --git a/_images/inheritance-32d2a8dfc687f1972d2021130744de9e07798c22.svg b/_images/inheritance-32d2a8dfc687f1972d2021130744de9e07798c22.svg new file mode 100644 index 00000000..36f87ab1 --- /dev/null +++ b/_images/inheritance-32d2a8dfc687f1972d2021130744de9e07798c22.svg @@ -0,0 +1,74 @@ + + +inheritancedd44e13911 + + +File + + +File + + + + + +SettingFile + + +SettingFile + + + + + +File->SettingFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +INIContent + + +INIContent + + + + + +HumanReadableContent->INIContent + + + + + +ModelSimINIFile + + +ModelSimINIFile + + + + + +INIContent->ModelSimINIFile + + + + + +SettingFile->ModelSimINIFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-335a0dfab96618683ed9f0bd0c77dcb95404da45.svg b/_images/inheritance-335a0dfab96618683ed9f0bd0c77dcb95404da45.svg new file mode 100644 index 00000000..d066e389 --- /dev/null +++ b/_images/inheritance-335a0dfab96618683ed9f0bd0c77dcb95404da45.svg @@ -0,0 +1,65 @@ + + +inheritancef75ad2c3da + + +ConstraintFile + + +ConstraintFile + + + + + +UCFConstraintFile + + +UCFConstraintFile + + + + + +ConstraintFile->UCFConstraintFile + + + + + +File + + +File + + + + + +File->ConstraintFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +HumanReadableContent->ConstraintFile + + + + + +HumanReadableContent->UCFConstraintFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-3376049c961575561e7d04db1ed9b7cc64b0566e.svg b/_images/inheritance-3376049c961575561e7d04db1ed9b7cc64b0566e.svg new file mode 100644 index 00000000..c30059dc --- /dev/null +++ b/_images/inheritance-3376049c961575561e7d04db1ed9b7cc64b0566e.svg @@ -0,0 +1,59 @@ + + +inheritance92148f3f42 + + +EDIFNetlistFile + + +EDIFNetlistFile + + + + + +NetlistFile + + +NetlistFile + + + + + +NetlistFile->EDIFNetlistFile + + + + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + +SourceFile->NetlistFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-3561eedb6a225a46278f0eb14d2c1321141d570e.svg b/_images/inheritance-3561eedb6a225a46278f0eb14d2c1321141d570e.svg new file mode 100644 index 00000000..c31908d8 --- /dev/null +++ b/_images/inheritance-3561eedb6a225a46278f0eb14d2c1321141d570e.svg @@ -0,0 +1,113 @@ + + +inheritance9bf3180884 + + +ConstraintFile + + +ConstraintFile + + + + + +ConstraintFile->ConstraintFile + + + + + +XDCConstraintFile + + +XDCConstraintFile + + + + + +ConstraintFile->XDCConstraintFile + + + + + +File + + +File + + + + + +File->ConstraintFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +HumanReadableContent->ConstraintFile + + + + + +TCLContent + + +TCLContent + + + + + +HumanReadableContent->TCLContent + + + + + +VivadoFileMixIn + +VivadoFileMixIn + + + +VivadoFileMixIn->ConstraintFile + + + + + +SDCContent + + +SDCContent + + + + + +SDCContent->XDCConstraintFile + + + + + +TCLContent->SDCContent + + + + + \ No newline at end of file diff --git a/_images/inheritance-37950c398ed2bdd8248160de6f8b627acfaed07d.svg b/_images/inheritance-37950c398ed2bdd8248160de6f8b627acfaed07d.svg new file mode 100644 index 00000000..639d7050 --- /dev/null +++ b/_images/inheritance-37950c398ed2bdd8248160de6f8b627acfaed07d.svg @@ -0,0 +1,14 @@ + + +inheritance2bb1a068e1 + + +FileSet + + +FileSet + + + + + \ No newline at end of file diff --git a/_images/inheritance-3b448ad8166b7759d4b745954f3e241eb6b8d2b4.svg b/_images/inheritance-3b448ad8166b7759d4b745954f3e241eb6b8d2b4.svg new file mode 100644 index 00000000..4188ce2b --- /dev/null +++ b/_images/inheritance-3b448ad8166b7759d4b745954f3e241eb6b8d2b4.svg @@ -0,0 +1,29 @@ + + +inheritance6b912cd543 + + +ExtendedType + + +ExtendedType + + + + + +FileType + + +FileType + + + + + +ExtendedType->FileType + + + + + \ No newline at end of file diff --git a/_images/inheritance-3ee63eb1c0b617b245fab387c6c983d1eab483df.svg b/_images/inheritance-3ee63eb1c0b617b245fab387c6c983d1eab483df.svg new file mode 100644 index 00000000..d178dfe3 --- /dev/null +++ b/_images/inheritance-3ee63eb1c0b617b245fab387c6c983d1eab483df.svg @@ -0,0 +1,29 @@ + + +inheritancef168d890ab + + +File + + +File + + + + + +SimulationAnalysisFile + + +SimulationAnalysisFile + + + + + +File->SimulationAnalysisFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-402c233d6c59a0ffbe58233b9deac75dd12e64ec.svg b/_images/inheritance-402c233d6c59a0ffbe58233b9deac75dd12e64ec.svg new file mode 100644 index 00000000..abcbf21c --- /dev/null +++ b/_images/inheritance-402c233d6c59a0ffbe58233b9deac75dd12e64ec.svg @@ -0,0 +1,29 @@ + + +inheritanceed0cac69b5 + + +HumanReadableContent + + +HumanReadableContent + + + + + +TCLContent + + +TCLContent + + + + + +HumanReadableContent->TCLContent + + + + + \ No newline at end of file diff --git a/_images/inheritance-4531e52b2b5533a8be0519fea209585022ec1d45.svg b/_images/inheritance-4531e52b2b5533a8be0519fea209585022ec1d45.svg new file mode 100644 index 00000000..666636f7 --- /dev/null +++ b/_images/inheritance-4531e52b2b5533a8be0519fea209585022ec1d45.svg @@ -0,0 +1,74 @@ + + +inheritance8623fb0b60 + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +PythonContent + + +PythonContent + + + + + +HumanReadableContent->PythonContent + + + + + +PythonSourceFile + + +PythonSourceFile + + + + + +PythonContent->PythonSourceFile + + + + + +SourceFile->PythonSourceFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-4d71897ef28b655acbefaa5352f939c4e866bf69.svg b/_images/inheritance-4d71897ef28b655acbefaa5352f939c4e866bf69.svg new file mode 100644 index 00000000..5464c922 --- /dev/null +++ b/_images/inheritance-4d71897ef28b655acbefaa5352f939c4e866bf69.svg @@ -0,0 +1,29 @@ + + +inheritancec446185a1f + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-4e709432d815c5427bdd7303490558cef529763d.svg b/_images/inheritance-4e709432d815c5427bdd7303490558cef529763d.svg new file mode 100644 index 00000000..93e1e4f3 --- /dev/null +++ b/_images/inheritance-4e709432d815c5427bdd7303490558cef529763d.svg @@ -0,0 +1,44 @@ + + +inheritancec51f3ee98f + + +CSourceFile + + +CSourceFile + + + + + +SourceFile + + +SourceFile + + + + + +SourceFile->CSourceFile + + + + + +File + + +File + + + + + +File->SourceFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-4eaeb1afbcdcbd514e4c28d429e15ee502f00af8.svg b/_images/inheritance-4eaeb1afbcdcbd514e4c28d429e15ee502f00af8.svg new file mode 100644 index 00000000..078ecc2c --- /dev/null +++ b/_images/inheritance-4eaeb1afbcdcbd514e4c28d429e15ee502f00af8.svg @@ -0,0 +1,74 @@ + + +inheritancef1add86bcc + + +File + + +File + + + + + +ProjectFile + + +ProjectFile + + + + + +File->ProjectFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +TCLContent + + +TCLContent + + + + + +HumanReadableContent->TCLContent + + + + + +QuartusProjectFile + + +QuartusProjectFile + + + + + +ProjectFile->QuartusProjectFile + + + + + +TCLContent->QuartusProjectFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-55d0f08278e0eae6f81baebd2027bbe8202f6bf7.svg b/_images/inheritance-55d0f08278e0eae6f81baebd2027bbe8202f6bf7.svg new file mode 100644 index 00000000..c212a1ac --- /dev/null +++ b/_images/inheritance-55d0f08278e0eae6f81baebd2027bbe8202f6bf7.svg @@ -0,0 +1,44 @@ + + +inheritance4744132666 + + +CppSourceFile + + +CppSourceFile + + + + + +SourceFile + + +SourceFile + + + + + +SourceFile->CppSourceFile + + + + + +File + + +File + + + + + +File->SourceFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-561c162a07f4b92989793599dc029258614e016a.svg b/_images/inheritance-561c162a07f4b92989793599dc029258614e016a.svg new file mode 100644 index 00000000..1902860e --- /dev/null +++ b/_images/inheritance-561c162a07f4b92989793599dc029258614e016a.svg @@ -0,0 +1,14 @@ + + +inheritance050071eba9 + + +File + + +File + + + + + \ No newline at end of file diff --git a/_images/inheritance-59de2c77f206dc9b6fc4594998ae2d25dbd66799.svg b/_images/inheritance-59de2c77f206dc9b6fc4594998ae2d25dbd66799.svg new file mode 100644 index 00000000..d21eaf83 --- /dev/null +++ b/_images/inheritance-59de2c77f206dc9b6fc4594998ae2d25dbd66799.svg @@ -0,0 +1,95 @@ + + +inheritance848a6cff49 + + +ConstraintFile + + +ConstraintFile + + + + + +SDCConstraintFile + + +SDCConstraintFile + + + + + +ConstraintFile->SDCConstraintFile + + + + + +File + + +File + + + + + +File->ConstraintFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +HumanReadableContent->ConstraintFile + + + + + +TCLContent + + +TCLContent + + + + + +HumanReadableContent->TCLContent + + + + + +SDCContent + + +SDCContent + + + + + +SDCContent->SDCConstraintFile + + + + + +TCLContent->SDCContent + + + + + \ No newline at end of file diff --git a/_images/inheritance-5f7998c3fd93f5754f6a9cbdd84c347d69f2c76b.svg b/_images/inheritance-5f7998c3fd93f5754f6a9cbdd84c347d69f2c76b.svg new file mode 100644 index 00000000..2cfbfee1 --- /dev/null +++ b/_images/inheritance-5f7998c3fd93f5754f6a9cbdd84c347d69f2c76b.svg @@ -0,0 +1,29 @@ + + +inheritance428d64af2e + + +File + + +File + + + + + +SimulationRunFile + + +SimulationRunFile + + + + + +File->SimulationRunFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-615ed92ab65a6d7e5224967cd7e645ee42d31f1a.svg b/_images/inheritance-615ed92ab65a6d7e5224967cd7e645ee42d31f1a.svg new file mode 100644 index 00000000..cf6a54d6 --- /dev/null +++ b/_images/inheritance-615ed92ab65a6d7e5224967cd7e645ee42d31f1a.svg @@ -0,0 +1,74 @@ + + +inheritance19876c50ec + + +File + + +File + + + + + +XMLFile + + +XMLFile + + + + + +File->XMLFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +XMLContent + + +XMLContent + + + + + +HumanReadableContent->XMLContent + + + + + +IPCoreDescriptionFile + + +IPCoreDescriptionFile + + + + + +XMLFile->IPCoreDescriptionFile + + + + + +XMLContent->XMLFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-6354c05b08965e1f81e0f9a1b4039977863dcaae.svg b/_images/inheritance-6354c05b08965e1f81e0f9a1b4039977863dcaae.svg new file mode 100644 index 00000000..0118a1bc --- /dev/null +++ b/_images/inheritance-6354c05b08965e1f81e0f9a1b4039977863dcaae.svg @@ -0,0 +1,14 @@ + + +inheritancee231accfb7 + + +HumanReadableContent + + +HumanReadableContent + + + + + \ No newline at end of file diff --git a/_images/inheritance-638bfdae24e22314f3795645447df56aa5568cc5.svg b/_images/inheritance-638bfdae24e22314f3795645447df56aa5568cc5.svg new file mode 100644 index 00000000..87cec0dc --- /dev/null +++ b/_images/inheritance-638bfdae24e22314f3795645447df56aa5568cc5.svg @@ -0,0 +1,44 @@ + + +inheritance0642508b41 + + +ConstraintFile + + +ConstraintFile + + + + + +File + + +File + + + + + +File->ConstraintFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +HumanReadableContent->ConstraintFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-665221d8c717a30f4bc6bd9ca49f694a8ff88de3.svg b/_images/inheritance-665221d8c717a30f4bc6bd9ca49f694a8ff88de3.svg new file mode 100644 index 00000000..2f053fee --- /dev/null +++ b/_images/inheritance-665221d8c717a30f4bc6bd9ca49f694a8ff88de3.svg @@ -0,0 +1,74 @@ + + +inheritance773aae5477 + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +TCLContent + + +TCLContent + + + + + +HumanReadableContent->TCLContent + + + + + +TCLSourceFile + + +TCLSourceFile + + + + + +SourceFile->TCLSourceFile + + + + + +TCLContent->TCLSourceFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-67859f0836d231ee858129b156bfe2b5f874b232.svg b/_images/inheritance-67859f0836d231ee858129b156bfe2b5f874b232.svg new file mode 100644 index 00000000..68181590 --- /dev/null +++ b/_images/inheritance-67859f0836d231ee858129b156bfe2b5f874b232.svg @@ -0,0 +1,29 @@ + + +inheritancea8c26aaa07 + + +File + + +File + + + + + +WaveformExchangeFile + + +WaveformExchangeFile + + + + + +File->WaveformExchangeFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-69834e3dc0c7ee68ea78d9f2835d3418a4ff62ad.svg b/_images/inheritance-69834e3dc0c7ee68ea78d9f2835d3418a4ff62ad.svg new file mode 100644 index 00000000..6208693b --- /dev/null +++ b/_images/inheritance-69834e3dc0c7ee68ea78d9f2835d3418a4ff62ad.svg @@ -0,0 +1,29 @@ + + +inheritancec3a8a106bc + + +File + + +File + + + + + +SettingFile + + +SettingFile + + + + + +File->SettingFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-70e6e371cb1242e0edc787b4770386d72d87c6b0.svg b/_images/inheritance-70e6e371cb1242e0edc787b4770386d72d87c6b0.svg new file mode 100644 index 00000000..f2fad2cb --- /dev/null +++ b/_images/inheritance-70e6e371cb1242e0edc787b4770386d72d87c6b0.svg @@ -0,0 +1,44 @@ + + +inheritance89657d5962 + + +File + + +File + + + + + +ProjectFile + + +ProjectFile + + + + + +File->ProjectFile + + + + + +ModelSimProjectFile + + +ModelSimProjectFile + + + + + +ProjectFile->ModelSimProjectFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-72a02e76e4786f2aa8cb3d2a408649926b18b57e.svg b/_images/inheritance-72a02e76e4786f2aa8cb3d2a408649926b18b57e.svg new file mode 100644 index 00000000..5e6f8307 --- /dev/null +++ b/_images/inheritance-72a02e76e4786f2aa8cb3d2a408649926b18b57e.svg @@ -0,0 +1,74 @@ + + +inheritance731a03aa99 + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +SystemRDLSourceFile + + +SystemRDLSourceFile + + + + + +HumanReadableContent->SystemRDLSourceFile + + + + + +RDLSourceFile + + +RDLSourceFile + + + + + +RDLSourceFile->SystemRDLSourceFile + + + + + +SourceFile->RDLSourceFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-735e5dd07189d5bcb95d80074c385bd2bbb3696e.svg b/_images/inheritance-735e5dd07189d5bcb95d80074c385bd2bbb3696e.svg new file mode 100644 index 00000000..385709c2 --- /dev/null +++ b/_images/inheritance-735e5dd07189d5bcb95d80074c385bd2bbb3696e.svg @@ -0,0 +1,44 @@ + + +inheritance89657d5962 + + +File + + +File + + + + + +ProjectFile + + +ProjectFile + + + + + +File->ProjectFile + + + + + +ModelSimProjectFile + + +ModelSimProjectFile + + + + + +ProjectFile->ModelSimProjectFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-74854232a473eb8dd6fc90ad9bfd6a78f805e93f.svg b/_images/inheritance-74854232a473eb8dd6fc90ad9bfd6a78f805e93f.svg new file mode 100644 index 00000000..5a0bad6c --- /dev/null +++ b/_images/inheritance-74854232a473eb8dd6fc90ad9bfd6a78f805e93f.svg @@ -0,0 +1,89 @@ + + +inheritance6043fe5f7c + + +CocotbPythonFile + + +CocotbPythonFile + + + + + +PythonSourceFile + + +PythonSourceFile + + + + + +PythonSourceFile->CocotbPythonFile + + + + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +PythonContent + + +PythonContent + + + + + +HumanReadableContent->PythonContent + + + + + +PythonContent->PythonSourceFile + + + + + +SourceFile->PythonSourceFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-7930ee97ccc1f5765c407abe8b71636ede92b32a.svg b/_images/inheritance-7930ee97ccc1f5765c407abe8b71636ede92b32a.svg new file mode 100644 index 00000000..04015f1d --- /dev/null +++ b/_images/inheritance-7930ee97ccc1f5765c407abe8b71636ede92b32a.svg @@ -0,0 +1,95 @@ + + +inheritance848a6cff49 + + +ConstraintFile + + +ConstraintFile + + + + + +SDCConstraintFile + + +SDCConstraintFile + + + + + +ConstraintFile->SDCConstraintFile + + + + + +File + + +File + + + + + +File->ConstraintFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +HumanReadableContent->ConstraintFile + + + + + +TCLContent + + +TCLContent + + + + + +HumanReadableContent->TCLContent + + + + + +SDCContent + + +SDCContent + + + + + +SDCContent->SDCConstraintFile + + + + + +TCLContent->SDCContent + + + + + \ No newline at end of file diff --git a/_images/inheritance-7ded64fe5da60a0c72f478118e885fe7f3c2a9e6.svg b/_images/inheritance-7ded64fe5da60a0c72f478118e885fe7f3c2a9e6.svg new file mode 100644 index 00000000..d56492e4 --- /dev/null +++ b/_images/inheritance-7ded64fe5da60a0c72f478118e885fe7f3c2a9e6.svg @@ -0,0 +1,116 @@ + + +inheritanceec1fb6feb6 + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + +HDLSourceFile + + +HDLSourceFile + + + + + +VerilogBaseFile + + +VerilogBaseFile + + + + + +HDLSourceFile->VerilogBaseFile + + + + + +SourceFile->HDLSourceFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +HumanReadableContent->VerilogBaseFile + + + + + +SystemVerilogBaseFile + + +SystemVerilogBaseFile + + + + + +SystemVerilogSourceFile + + +SystemVerilogSourceFile + + + + + +SystemVerilogBaseFile->SystemVerilogSourceFile + + + + + +VerilogBaseFile->SystemVerilogBaseFile + + + + + +SystemVerilogMixIn + +SystemVerilogMixIn + + + +SystemVerilogMixIn->SystemVerilogSourceFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-8103768b021e347214ee8b66f50d9e31ad4a214f.svg b/_images/inheritance-8103768b021e347214ee8b66f50d9e31ad4a214f.svg new file mode 100644 index 00000000..cfb6e402 --- /dev/null +++ b/_images/inheritance-8103768b021e347214ee8b66f50d9e31ad4a214f.svg @@ -0,0 +1,44 @@ + + +inheritance95fd0655f8 + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + +HDLSourceFile + + +HDLSourceFile + + + + + +SourceFile->HDLSourceFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-828b1121538b024b9213b2244693ac542c1d9894.svg b/_images/inheritance-828b1121538b024b9213b2244693ac542c1d9894.svg new file mode 100644 index 00000000..eedf6902 --- /dev/null +++ b/_images/inheritance-828b1121538b024b9213b2244693ac542c1d9894.svg @@ -0,0 +1,29 @@ + + +inheritance82ec5146b0 + + +File + + +File + + + + + +WaveformDatabaseFile + + +WaveformDatabaseFile + + + + + +File->WaveformDatabaseFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-86c645db73f5b0ca0eec97c6df5ecd23a04508ab.svg b/_images/inheritance-86c645db73f5b0ca0eec97c6df5ecd23a04508ab.svg new file mode 100644 index 00000000..d856d5ac --- /dev/null +++ b/_images/inheritance-86c645db73f5b0ca0eec97c6df5ecd23a04508ab.svg @@ -0,0 +1,14 @@ + + +inheritance12f794fece + + +VHDLLibrary + + +VHDLLibrary + + + + + \ No newline at end of file diff --git a/_images/inheritance-887859a2ff9920e828190939860919619c89131b.svg b/_images/inheritance-887859a2ff9920e828190939860919619c89131b.svg new file mode 100644 index 00000000..e5440e37 --- /dev/null +++ b/_images/inheritance-887859a2ff9920e828190939860919619c89131b.svg @@ -0,0 +1,101 @@ + + +inheritance79e52f7147 + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + +HDLSourceFile + + +HDLSourceFile + + + + + +VerilogBaseFile + + +VerilogBaseFile + + + + + +HDLSourceFile->VerilogBaseFile + + + + + +SourceFile->HDLSourceFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +HumanReadableContent->VerilogBaseFile + + + + + +VerilogHeaderFile + + +VerilogHeaderFile + + + + + +VerilogBaseFile->VerilogHeaderFile + + + + + +VerilogMixIn + +VerilogMixIn + + + +VerilogMixIn->VerilogHeaderFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-8d9a9bcd42331e8c61a993d2105259161f9a6d49.svg b/_images/inheritance-8d9a9bcd42331e8c61a993d2105259161f9a6d49.svg new file mode 100644 index 00000000..34e28bdb --- /dev/null +++ b/_images/inheritance-8d9a9bcd42331e8c61a993d2105259161f9a6d49.svg @@ -0,0 +1,101 @@ + + +inheritance346c88fc38 + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + +HDLSourceFile + + +HDLSourceFile + + + + + +VerilogBaseFile + + +VerilogBaseFile + + + + + +HDLSourceFile->VerilogBaseFile + + + + + +SourceFile->HDLSourceFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +HumanReadableContent->VerilogBaseFile + + + + + +VerilogSourceFile + + +VerilogSourceFile + + + + + +VerilogBaseFile->VerilogSourceFile + + + + + +VerilogMixIn + +VerilogMixIn + + + +VerilogMixIn->VerilogSourceFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-97f74149210d494f5db1005a002fc72d8a7ea450.svg b/_images/inheritance-97f74149210d494f5db1005a002fc72d8a7ea450.svg new file mode 100644 index 00000000..4a700574 --- /dev/null +++ b/_images/inheritance-97f74149210d494f5db1005a002fc72d8a7ea450.svg @@ -0,0 +1,80 @@ + + +inheritance41f7f21b1e + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + +HDLSourceFile + + +HDLSourceFile + + + + + +VHDLSourceFile + + +VHDLSourceFile + + + + + +HDLSourceFile->VHDLSourceFile + + + + + +SourceFile->HDLSourceFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +HumanReadableContent->VHDLSourceFile + + + + + +VHDLSourceFile->VHDLSourceFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-9dc6af87c8802895de7278f0f98e85fa673110cc.svg b/_images/inheritance-9dc6af87c8802895de7278f0f98e85fa673110cc.svg new file mode 100644 index 00000000..96421ea3 --- /dev/null +++ b/_images/inheritance-9dc6af87c8802895de7278f0f98e85fa673110cc.svg @@ -0,0 +1,74 @@ + + +inheritancedd44e13911 + + +File + + +File + + + + + +SettingFile + + +SettingFile + + + + + +File->SettingFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +INIContent + + +INIContent + + + + + +HumanReadableContent->INIContent + + + + + +ModelSimINIFile + + +ModelSimINIFile + + + + + +INIContent->ModelSimINIFile + + + + + +SettingFile->ModelSimINIFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-9fb9d25ffcae6c015a47ec0565c301d4c2559a93.svg b/_images/inheritance-9fb9d25ffcae6c015a47ec0565c301d4c2559a93.svg new file mode 100644 index 00000000..50e21ad1 --- /dev/null +++ b/_images/inheritance-9fb9d25ffcae6c015a47ec0565c301d4c2559a93.svg @@ -0,0 +1,29 @@ + + +inheritance894b32eda3 + + +File + + +File + + + + + +SimulationStartFile + + +SimulationStartFile + + + + + +File->SimulationStartFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-a6a1a9ddb9d1c201e76ab22f30da98983bd5872c.svg b/_images/inheritance-a6a1a9ddb9d1c201e76ab22f30da98983bd5872c.svg new file mode 100644 index 00000000..db2e9551 --- /dev/null +++ b/_images/inheritance-a6a1a9ddb9d1c201e76ab22f30da98983bd5872c.svg @@ -0,0 +1,59 @@ + + +inheritance1655942053 + + +File + + +File + + + + + +XMLFile + + +XMLFile + + + + + +File->XMLFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +XMLContent + + +XMLContent + + + + + +HumanReadableContent->XMLContent + + + + + +XMLContent->XMLFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-a6d4320ce0a252ffadfa085b60029d88f48af02a.svg b/_images/inheritance-a6d4320ce0a252ffadfa085b60029d88f48af02a.svg new file mode 100644 index 00000000..634971fe --- /dev/null +++ b/_images/inheritance-a6d4320ce0a252ffadfa085b60029d88f48af02a.svg @@ -0,0 +1,29 @@ + + +inheritancec2c0e419d2 + + +HumanReadableContent + + +HumanReadableContent + + + + + +XMLContent + + +XMLContent + + + + + +HumanReadableContent->XMLContent + + + + + \ No newline at end of file diff --git a/_images/inheritance-aaa228c5c1b0700c8dcdb038a7c9d665508b3d23.svg b/_images/inheritance-aaa228c5c1b0700c8dcdb038a7c9d665508b3d23.svg new file mode 100644 index 00000000..addf38ff --- /dev/null +++ b/_images/inheritance-aaa228c5c1b0700c8dcdb038a7c9d665508b3d23.svg @@ -0,0 +1,74 @@ + + +inheritance8736a6858e + + +File + + +File + + + + + +XMLFile + + +XMLFile + + + + + +File->XMLFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +XMLContent + + +XMLContent + + + + + +HumanReadableContent->XMLContent + + + + + +IPCoreInstantiationFile + + +IPCoreInstantiationFile + + + + + +XMLFile->IPCoreInstantiationFile + + + + + +XMLContent->XMLFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-b07db2dbc61bc7e40a37a46c0dbafeb1fb369c6a.svg b/_images/inheritance-b07db2dbc61bc7e40a37a46c0dbafeb1fb369c6a.svg new file mode 100644 index 00000000..92a0ace0 --- /dev/null +++ b/_images/inheritance-b07db2dbc61bc7e40a37a46c0dbafeb1fb369c6a.svg @@ -0,0 +1,29 @@ + + +inheritancef90e69562f + + +Attribute + + +Attribute + + + + + +KeyValueAttribute + + +KeyValueAttribute + + + + + +Attribute->KeyValueAttribute + + + + + \ No newline at end of file diff --git a/_images/inheritance-b2db48ffc1454392bcd9ec0e7eb38c417007ded1.svg b/_images/inheritance-b2db48ffc1454392bcd9ec0e7eb38c417007ded1.svg new file mode 100644 index 00000000..a89b6658 --- /dev/null +++ b/_images/inheritance-b2db48ffc1454392bcd9ec0e7eb38c417007ded1.svg @@ -0,0 +1,29 @@ + + +inheritance3034704fcc + + +File + + +File + + + + + +SimulationElaborationFile + + +SimulationElaborationFile + + + + + +File->SimulationElaborationFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-b9455d8dbea2c399cf15f42bb05461428e00d503.svg b/_images/inheritance-b9455d8dbea2c399cf15f42bb05461428e00d503.svg new file mode 100644 index 00000000..7a77307f --- /dev/null +++ b/_images/inheritance-b9455d8dbea2c399cf15f42bb05461428e00d503.svg @@ -0,0 +1,74 @@ + + +inheritancee3f3389572 + + +File + + +File + + + + + +WaveformConfigFile + + +WaveformConfigFile + + + + + +File->WaveformConfigFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +TCLContent + + +TCLContent + + + + + +HumanReadableContent->TCLContent + + + + + +WaveDoFile + + +WaveDoFile + + + + + +TCLContent->WaveDoFile + + + + + +WaveformConfigFile->WaveDoFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-c0db9a9452d280fd4f77d2402f53bf4ded1df738.svg b/_images/inheritance-c0db9a9452d280fd4f77d2402f53bf4ded1df738.svg new file mode 100644 index 00000000..2371b58e --- /dev/null +++ b/_images/inheritance-c0db9a9452d280fd4f77d2402f53bf4ded1df738.svg @@ -0,0 +1,44 @@ + + +inheritancebfe6088a00 + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + +RDLSourceFile + + +RDLSourceFile + + + + + +SourceFile->RDLSourceFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-c1ab0e0bbbbfa1d71c9f44b872b54d8b464474cb.svg b/_images/inheritance-c1ab0e0bbbbfa1d71c9f44b872b54d8b464474cb.svg new file mode 100644 index 00000000..ba3ffae2 --- /dev/null +++ b/_images/inheritance-c1ab0e0bbbbfa1d71c9f44b872b54d8b464474cb.svg @@ -0,0 +1,14 @@ + + +inheritance3952958544 + + +Design + + +Design + + + + + \ No newline at end of file diff --git a/_images/inheritance-c45e3344fc2254ad13585e2d0cbe3d6ebd32902e.svg b/_images/inheritance-c45e3344fc2254ad13585e2d0cbe3d6ebd32902e.svg new file mode 100644 index 00000000..84f993fc --- /dev/null +++ b/_images/inheritance-c45e3344fc2254ad13585e2d0cbe3d6ebd32902e.svg @@ -0,0 +1,44 @@ + + +inheritance787d52f91d + + +File + + +File + + + + + +WaveformExchangeFile + + +WaveformExchangeFile + + + + + +File->WaveformExchangeFile + + + + + +ValueChangeDumpFile + + +ValueChangeDumpFile + + + + + +WaveformExchangeFile->ValueChangeDumpFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-c9dc00d125bbbe22b751bb62b32db29a03f9b439.svg b/_images/inheritance-c9dc00d125bbbe22b751bb62b32db29a03f9b439.svg new file mode 100644 index 00000000..63032757 --- /dev/null +++ b/_images/inheritance-c9dc00d125bbbe22b751bb62b32db29a03f9b439.svg @@ -0,0 +1,29 @@ + + +inheritance4df4ad03ac + + +Attribute + + +Attribute + + + + + +UsedInAttribute + + +UsedInAttribute + + + + + +Attribute->UsedInAttribute + + + + + \ No newline at end of file diff --git a/_images/inheritance-d0318bb7b1f8427e111d5ddb9dbbd2756f98a9d6.svg b/_images/inheritance-d0318bb7b1f8427e111d5ddb9dbbd2756f98a9d6.svg new file mode 100644 index 00000000..485fd959 --- /dev/null +++ b/_images/inheritance-d0318bb7b1f8427e111d5ddb9dbbd2756f98a9d6.svg @@ -0,0 +1,116 @@ + + +inheritanced402fed384 + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + +HDLSourceFile + + +HDLSourceFile + + + + + +VerilogBaseFile + + +VerilogBaseFile + + + + + +HDLSourceFile->VerilogBaseFile + + + + + +SourceFile->HDLSourceFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +HumanReadableContent->VerilogBaseFile + + + + + +SystemVerilogBaseFile + + +SystemVerilogBaseFile + + + + + +SystemVerilogHeaderFile + + +SystemVerilogHeaderFile + + + + + +SystemVerilogBaseFile->SystemVerilogHeaderFile + + + + + +VerilogBaseFile->SystemVerilogBaseFile + + + + + +SystemVerilogMixIn + +SystemVerilogMixIn + + + +SystemVerilogMixIn->SystemVerilogHeaderFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-dd2ec0f2c059b1f11939fbf9590d952c09fe2ef1.svg b/_images/inheritance-dd2ec0f2c059b1f11939fbf9590d952c09fe2ef1.svg new file mode 100644 index 00000000..0b313cf5 --- /dev/null +++ b/_images/inheritance-dd2ec0f2c059b1f11939fbf9590d952c09fe2ef1.svg @@ -0,0 +1,20 @@ + + +inheritance050071eba9 + + +File + + +File + + + + + +File->File + + + + + \ No newline at end of file diff --git a/_images/inheritance-de09690d100a49a67aff0983ee680bdfcab8c470.svg b/_images/inheritance-de09690d100a49a67aff0983ee680bdfcab8c470.svg new file mode 100644 index 00000000..a0ac6ebe --- /dev/null +++ b/_images/inheritance-de09690d100a49a67aff0983ee680bdfcab8c470.svg @@ -0,0 +1,29 @@ + + +inheritance874f3aac8d + + +HumanReadableContent + + +HumanReadableContent + + + + + +PythonContent + + +PythonContent + + + + + +HumanReadableContent->PythonContent + + + + + \ No newline at end of file diff --git a/_images/inheritance-e1d98a163021e56f15c82f15e0669b1800b8c071.svg b/_images/inheritance-e1d98a163021e56f15c82f15e0669b1800b8c071.svg new file mode 100644 index 00000000..f804d649 --- /dev/null +++ b/_images/inheritance-e1d98a163021e56f15c82f15e0669b1800b8c071.svg @@ -0,0 +1,74 @@ + + +inheritance2c8c1aae6f + + +File + + +File + + + + + +ProjectFile + + +ProjectFile + + + + + +File->ProjectFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +XMLContent + + +XMLContent + + + + + +HumanReadableContent->XMLContent + + + + + +VivadoProjectFile + + +VivadoProjectFile + + + + + +ProjectFile->VivadoProjectFile + + + + + +XMLContent->VivadoProjectFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-e7a62bdd54001858a4bf4b47abb19adc78011090.svg b/_images/inheritance-e7a62bdd54001858a4bf4b47abb19adc78011090.svg new file mode 100644 index 00000000..743b47d4 --- /dev/null +++ b/_images/inheritance-e7a62bdd54001858a4bf4b47abb19adc78011090.svg @@ -0,0 +1,29 @@ + + +inheritanceadcfb8a705 + + +HumanReadableContent + + +HumanReadableContent + + + + + +YAMLContent + + +YAMLContent + + + + + +HumanReadableContent->YAMLContent + + + + + \ No newline at end of file diff --git a/_images/inheritance-e8c50a5f701fd191e214b6c28b9701e18e75cd98.svg b/_images/inheritance-e8c50a5f701fd191e214b6c28b9701e18e75cd98.svg new file mode 100644 index 00000000..0e1e5cc2 --- /dev/null +++ b/_images/inheritance-e8c50a5f701fd191e214b6c28b9701e18e75cd98.svg @@ -0,0 +1,89 @@ + + +inheritanceabba61bec2 + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + +HDLSourceFile + + +HDLSourceFile + + + + + +VerilogBaseFile + + +VerilogBaseFile + + + + + +HDLSourceFile->VerilogBaseFile + + + + + +SourceFile->HDLSourceFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +HumanReadableContent->VerilogBaseFile + + + + + +SystemVerilogBaseFile + + +SystemVerilogBaseFile + + + + + +VerilogBaseFile->SystemVerilogBaseFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-ecb1d9c2f1cb38d85861ecf755d1ff5167617126.svg b/_images/inheritance-ecb1d9c2f1cb38d85861ecf755d1ff5167617126.svg new file mode 100644 index 00000000..7e8ede56 --- /dev/null +++ b/_images/inheritance-ecb1d9c2f1cb38d85861ecf755d1ff5167617126.svg @@ -0,0 +1,29 @@ + + +inheritance75c57dae97 + + +File + + +File + + + + + +ProjectFile + + +ProjectFile + + + + + +File->ProjectFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-ed7724f665a569d4cb4ce4914a715a4e0d65027f.svg b/_images/inheritance-ed7724f665a569d4cb4ce4914a715a4e0d65027f.svg new file mode 100644 index 00000000..74c28498 --- /dev/null +++ b/_images/inheritance-ed7724f665a569d4cb4ce4914a715a4e0d65027f.svg @@ -0,0 +1,14 @@ + + +inheritance2935b438b8 + + +Attribute + + +Attribute + + + + + \ No newline at end of file diff --git a/_images/inheritance-eeb352b0961c213cabef2f192d4067ce222e551a.svg b/_images/inheritance-eeb352b0961c213cabef2f192d4067ce222e551a.svg new file mode 100644 index 00000000..8f4fc383 --- /dev/null +++ b/_images/inheritance-eeb352b0961c213cabef2f192d4067ce222e551a.svg @@ -0,0 +1,74 @@ + + +inheritancef1add86bcc + + +File + + +File + + + + + +ProjectFile + + +ProjectFile + + + + + +File->ProjectFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +TCLContent + + +TCLContent + + + + + +HumanReadableContent->TCLContent + + + + + +QuartusProjectFile + + +QuartusProjectFile + + + + + +ProjectFile->QuartusProjectFile + + + + + +TCLContent->QuartusProjectFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-ef08cface702ecb89d277d5889be7765f34ef864.svg b/_images/inheritance-ef08cface702ecb89d277d5889be7765f34ef864.svg new file mode 100644 index 00000000..8b909ebd --- /dev/null +++ b/_images/inheritance-ef08cface702ecb89d277d5889be7765f34ef864.svg @@ -0,0 +1,44 @@ + + +inheritancef3693dc745 + + +File + + +File + + + + + +TextFile + + +TextFile + + + + + +File->TextFile + + + + + +HumanReadableContent + + +HumanReadableContent + + + + + +HumanReadableContent->TextFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-f0848d7ae24872d29f30c2a03e7ee2b1d6b3cfbf.svg b/_images/inheritance-f0848d7ae24872d29f30c2a03e7ee2b1d6b3cfbf.svg new file mode 100644 index 00000000..a165df39 --- /dev/null +++ b/_images/inheritance-f0848d7ae24872d29f30c2a03e7ee2b1d6b3cfbf.svg @@ -0,0 +1,29 @@ + + +inheritancec6bf2d3a2b + + +HumanReadableContent + + +HumanReadableContent + + + + + +TOMLContent + + +TOMLContent + + + + + +HumanReadableContent->TOMLContent + + + + + \ No newline at end of file diff --git a/_images/inheritance-f19fcdd8136f51822f99c685283bf6daa4097492.svg b/_images/inheritance-f19fcdd8136f51822f99c685283bf6daa4097492.svg new file mode 100644 index 00000000..f8d5de4e --- /dev/null +++ b/_images/inheritance-f19fcdd8136f51822f99c685283bf6daa4097492.svg @@ -0,0 +1,44 @@ + + +inheritancef584414420 + + +File + + +File + + + + + +SourceFile + + +SourceFile + + + + + +File->SourceFile + + + + + +NetlistFile + + +NetlistFile + + + + + +SourceFile->NetlistFile + + + + + \ No newline at end of file diff --git a/_images/inheritance-f525469c0f06651de3dd05d9094b4cebde2676e7.svg b/_images/inheritance-f525469c0f06651de3dd05d9094b4cebde2676e7.svg new file mode 100644 index 00000000..0bfd4105 --- /dev/null +++ b/_images/inheritance-f525469c0f06651de3dd05d9094b4cebde2676e7.svg @@ -0,0 +1,44 @@ + + +inheritancedcbf6aa15e + + +File + + +File + + + + + +WaveformExchangeFile + + +WaveformExchangeFile + + + + + +File->WaveformExchangeFile + + + + + +GHDLWaveformFile + + +GHDLWaveformFile + + + + + +WaveformExchangeFile->GHDLWaveformFile + + + + + \ No newline at end of file diff --git a/_images/logo_on_light.svg b/_images/logo_on_light.svg new file mode 100644 index 00000000..eac24d90 --- /dev/null +++ b/_images/logo_on_light.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/_modules/index.html b/_modules/index.html new file mode 100644 index 00000000..1218dc65 --- /dev/null +++ b/_modules/index.html @@ -0,0 +1,145 @@ + + + + + + + Overview: module code — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/pyEDAA/ProjectModel.html b/_modules/pyEDAA/ProjectModel.html new file mode 100644 index 00000000..06db4e04 --- /dev/null +++ b/_modules/pyEDAA/ProjectModel.html @@ -0,0 +1,2286 @@ + + + + + + + pyEDAA.ProjectModel — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for pyEDAA.ProjectModel

+# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+# Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture     #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""An abstract model of EDA tool projects."""
+__author__ =    "Patrick Lehmann"
+__email__ =     "Paebbels@gmail.com"
+__copyright__ = "2014-2024, Patrick Lehmann, Unai Martinez-Corral"
+__license__ =   "Apache License, Version 2.0"
+__version__ =   "0.5.0"
+__keywords__ =  ["eda project", "model", "abstract", "xilinx", "vivado", "osvvm", "file set", "file group", "test bench", "test harness"]
+
+from os.path import relpath as path_relpath
+from pathlib import Path as pathlib_Path
+from sys     import version_info
+from typing  import Dict, Union, Optional as Nullable, List, Iterable, Generator, Tuple, Any as typing_Any, Type, Set, Any
+
+from pyTooling.Common      import getFullyQualifiedName
+from pyTooling.Decorators  import export
+from pyTooling.MetaClasses import ExtendedType
+from pyTooling.Graph       import Graph, Vertex
+from pySVModel             import SystemVerilogVersion
+from pyVHDLModel           import VHDLVersion
+from pySystemRDLModel      import SystemRDLVersion
+
+
+
+[docs] +@export +class Attribute(metaclass=ExtendedType): + KEY: str + VALUE_TYPE: typing_Any + + @staticmethod + def resolve(obj: typing_Any, key: Type['Attribute']): + if isinstance(obj, File): + return obj._fileSet[key] + elif isinstance(obj, FileSet): + return obj._design[key] + elif isinstance(obj, Design): + return obj._project[key] + else: + raise Exception("Resolution error")
+ + + +
+[docs] +@export +class FileType(ExtendedType): + """ + A :term:`meta-class` to construct *FileType* classes. + + Modifications done by this meta-class: + * Register all classes of type :class:`FileType` or derived variants in a class field :attr:`FileType.FileTypes` in this meta-class. + """ + + FileTypes: Dict[str, 'FileType'] = {} #: Dictionary of all classes of type :class:`FileType` or derived variants + Any: 'FileType' + +
+[docs] + def __init__(cls, name: str, bases: Tuple[type, ...], dictionary: Dict[str, typing_Any], **kwargs): + super().__init__(name, bases, dictionary, **kwargs) + cls.Any = cls
+ + +
+[docs] + def __new__(cls, className, baseClasses, classMembers: Dict, *args, **kwargs): + fileType = super().__new__(cls, className, baseClasses, classMembers, *args, **kwargs) + cls.FileTypes[className] = fileType + return fileType
+ + + def __getattr__(cls, item) -> 'FileType': + if item[:2] != "__" and item[-2:] != "__": + return cls.FileTypes[item] + else: + return super().__getattribute__(item) + + def __contains__(cls, item) -> bool: + return issubclass(item, cls)
+ + + +
+[docs] +@export +class File(metaclass=FileType, slots=True): + """ + A :term:`File` represents a file in a design. This :term:`base-class` is used + for all derived file classes. + + A file can be created standalone and later associated to a fileset, design and + project. Or a fileset, design and/or project can be associated immediately + while creating a file. + + :arg path: Relative or absolute path to the file. + :arg project: Project the file is associated with. + :arg design: Design the file is associated with. + :arg fileSet: Fileset the file is associated with. + """ + + _path: pathlib_Path + _fileType: 'FileType' + _project: Nullable['Project'] + _design: Nullable['Design'] + _fileSet: Nullable['FileSet'] + _attributes: Dict[Type[Attribute], typing_Any] + +
+[docs] + def __init__( + self, + path: pathlib_Path, + project: Nullable["Project"] = None, + design: Nullable["Design"] = None, + fileSet: Nullable["FileSet"] = None + ): + self._fileType = getattr(FileTypes, self.__class__.__name__) + self._path = path + if project is not None: + self._project = project + self._design = design + if fileSet is not None: + self.FileSet = fileSet + elif design is not None: + self._project = design._project + self._design = design + self.FileSet = design.DefaultFileSet if fileSet is None else fileSet + elif fileSet is not None: + design = fileSet._design + if design is not None: + self._project = design._project + else: + self._project = None + self._design = design + self.FileSet = fileSet + else: + self._project = None + self._design = None + self._fileSet = None + + self._attributes = {} + self._registerAttributes()
+ + + def _registerAttributes(self) -> None: + pass + + @property + def FileType(self) -> 'FileType': + """Read-only property to return the file type of this file.""" + return self._fileType + + @property + def Path(self) -> pathlib_Path: + """Read-only property returning the path of this file.""" + return self._path + + # TODO: setter? + + @property + def ResolvedPath(self) -> pathlib_Path: + """Read-only property returning the resolved path of this file.""" + if self._path.is_absolute(): + return self._path.resolve() + elif self._fileSet is not None: + path = (self._fileSet.ResolvedPath / self._path).resolve() + + if path.is_absolute(): + return path + else: + # WORKAROUND: https://stackoverflow.com/questions/67452690/pathlib-path-relative-to-vs-os-path-relpath + return pathlib_Path(path_relpath(path, pathlib_Path.cwd())) + else: + # TODO: message and exception type + raise Exception("") + + @property + def Project(self) -> Nullable['Project']: + """Property setting or returning the project this file is used in.""" + return self._project + + @Project.setter + def Project(self, value: 'Project') -> None: + self._project = value + + if self._fileSet is None: + self._project.DefaultDesign.DefaultFileSet.AddFile(self) + + @property + def Design(self) -> Nullable['Design']: + """Property setting or returning the design this file is used in.""" + return self._design + + @Design.setter + def Design(self, value: 'Design') -> None: + self._design = value + + if self._fileSet is None: + self._design.DefaultFileSet.AddFile(self) + + if self._project is None: + self._project = value._project + elif self._project is not value._project: + raise Exception("The design's project is not identical to the already assigned project.") + + @property + def FileSet(self) -> Nullable['FileSet']: + """Property setting or returning the fileset this file is used in.""" + return self._fileSet + + @FileSet.setter + def FileSet(self, value: 'FileSet') -> None: + self._fileSet = value + value._files.append(self) + +
+[docs] + def Validate(self) -> None: + """Validate this file.""" + if self._path is None: + raise Exception("Validation: File has no path.") + try: + path = self.ResolvedPath + except Exception as ex: + raise Exception(f"Validation: File '{self._path}' could not compute resolved path.") from ex + if not path.exists(): + raise Exception(f"Validation: File '{self._path}' (={path}) does not exist.") + if not path.is_file(): + raise Exception(f"Validation: File '{self._path}' (={path}) is not a file.") + + if self._fileSet is None: + raise Exception(f"Validation: File '{self._path}' has no fileset.") + if self._design is None: + raise Exception(f"Validation: File '{self._path}' has no design.") + if self._project is None: + raise Exception(f"Validation: File '{self._path}' has no project.")
+ + +
+[docs] + def __len__(self) -> int: + """ + Returns number of attributes set on this file. + + :returns: The number if attributes set on this file. + """ + return len(self._attributes)
+ + +
+[docs] + def __getitem__(self, key: Type[Attribute]) -> Any: + """Index access for returning attributes on this file. + + :param key: The attribute type. + :returns: The attribute's value. + :raises TypeError: When parameter 'key' is not a subclass of Attribute. + """ + if not issubclass(key, Attribute): + raise TypeError("Parameter 'key' is not an 'Attribute'.") + + try: + return self._attributes[key] + except KeyError: + try: + return key.resolve(self, key) + except KeyError: + attribute = key() + self._attributes[key] = attribute + return attribute
+ + +
+[docs] + def __setitem__(self, key: Type[Attribute], value: typing_Any) -> None: + """ + Index access for adding or setting attributes on this file. + + :param key: The attribute type. + :param value: The attributes value. + :raises TypeError: When parameter 'key' is not a subclass of Attribute. + """ + if not issubclass(key, Attribute): + raise TypeError("Parameter 'key' is not an 'Attribute'.") + + self._attributes[key] = value
+ + +
+[docs] + def __delitem__(self, key: Type[Attribute]) -> None: + """ + Index access for deleting attributes on this file. + + :param key: The attribute type. + """ + if not issubclass(key, Attribute): + raise TypeError("Parameter 'key' is not an 'Attribute'.") + + del self._attributes[key]
+ + +
+[docs] + def __str__(self) -> str: + return f"{self._path}"
+
+ + + +FileTypes = File + + +
+[docs] +@export +class HumanReadableContent(metaclass=ExtendedType, mixin=True): + """A file type representing human-readable contents."""
+ + + +
+[docs] +@export +class XMLContent(HumanReadableContent, mixin=True): + """A file type representing XML contents."""
+ + + +
+[docs] +@export +class YAMLContent(HumanReadableContent, mixin=True): + """A file type representing YAML contents."""
+ + + +
+[docs] +@export +class JSONContent(HumanReadableContent, mixin=True): + """A file type representing JSON contents."""
+ + + +
+[docs] +@export +class INIContent(HumanReadableContent, mixin=True): + """A file type representing INI contents."""
+ + + +
+[docs] +@export +class TOMLContent(HumanReadableContent, mixin=True): + """A file type representing TOML contents."""
+ + + +
+[docs] +@export +class TCLContent(HumanReadableContent, mixin=True): + """A file type representing content in TCL code."""
+ + + +
+[docs] +@export +class SDCContent(TCLContent, mixin=True): + """A file type representing contents as Synopsys Design Constraints (SDC)."""
+ + + +
+[docs] +@export +class PythonContent(HumanReadableContent, mixin=True): + """A file type representing contents as Python source code."""
+ + + +
+[docs] +@export +class TextFile(File, HumanReadableContent): + """A text file (``*.txt``)."""
+ + + +
+[docs] +@export +class LogFile(File, HumanReadableContent): + """A log file (``*.log``)."""
+ + + +
+[docs] +@export +class XMLFile(File, XMLContent): + """An XML file (``*.xml``)."""
+ + + +
+[docs] +@export +class SourceFile(File): + """Base-class of all source files."""
+ + + +
+[docs] +@export +class HDLSourceFile(SourceFile): + """Base-class of all HDL source files."""
+ + + +
+[docs] +@export +class RDLSourceFile(SourceFile): + """Base-class of all RDL source files."""
+ + + +
+[docs] +@export +class NetlistFile(SourceFile): + """Base-class of all netlist source files."""
+ + + +
+[docs] +@export +class EDIFNetlistFile(NetlistFile): + """Netlist file in EDIF (Electronic Design Interchange Format)."""
+ + + +
+[docs] +@export +class TCLSourceFile(SourceFile, TCLContent): + """A TCL source file."""
+ + + +
+[docs] +@export +class VHDLSourceFile(HDLSourceFile, HumanReadableContent): + """ + A VHDL source file (of any language version). + + :arg path: Relative or absolute path to the file. + :arg vhdlLibrary: VHDLLibrary this VHDL source file is associated wih. + :arg vhdlVersion: VHDLVersion this VHDL source file is associated wih. + :arg project: Project the file is associated with. + :arg design: Design the file is associated with. + :arg fileSet: Fileset the file is associated with. + """ + + _vhdlLibrary: Nullable['VHDLLibrary'] + _vhdlVersion: VHDLVersion + +
+[docs] + def __init__(self, path: pathlib_Path, vhdlLibrary: Union[str, 'VHDLLibrary'] = None, vhdlVersion: Nullable[VHDLVersion] = None, project: Nullable["Project"] = None, design: Nullable["Design"] = None, fileSet: Nullable["FileSet"] = None): + super().__init__(path, project, design, fileSet) + + if isinstance(vhdlLibrary, str): + if design is not None: + try: + vhdlLibrary = design.VHDLLibraries[vhdlLibrary] + except KeyError as ex: + raise Exception(f"VHDL library '{vhdlLibrary}' not found in design '{design.Name}'.") from ex + elif project is not None: + try: + vhdlLibrary = project.DefaultDesign.VHDLLibraries[vhdlLibrary] + except KeyError as ex: + raise Exception(f"VHDL library '{vhdlLibrary}' not found in default design '{project.DefaultDesign.Name}'.") from ex + else: + raise Exception(f"Can't lookup VHDL library because neither 'project' nor 'design' is given as a parameter.") + elif isinstance(vhdlLibrary, VHDLLibrary): + self._vhdlLibrary = vhdlLibrary + vhdlLibrary.AddFile(self) + elif vhdlLibrary is None: + self._vhdlLibrary = None + else: + ex = TypeError(f"Parameter 'vhdlLibrary' is neither a 'str' nor 'VHDLibrary'.") + if version_info >= (3, 11): # pragma: no cover + ex.add_note(f"Got type '{getFullyQualifiedName(vhdlLibrary)}'.") + raise ex + + self._vhdlVersion = vhdlVersion
+ + +
+[docs] + def Validate(self) -> None: + """Validate this VHDL source file.""" + super().Validate() + + try: + _ = self.VHDLLibrary + except Exception as ex: + raise Exception(f"Validation: VHDLSourceFile '{self._path}' (={self.ResolvedPath}) has no VHDLLibrary assigned.") from ex + try: + _ = self.VHDLVersion + except Exception as ex: + raise Exception(f"Validation: VHDLSourceFile '{self._path}' (={self.ResolvedPath}) has no VHDLVersion assigned.") from ex
+ + + @property + def VHDLLibrary(self) -> 'VHDLLibrary': + """Property setting or returning the VHDL library this VHDL source file is used in.""" + if self._vhdlLibrary is not None: + return self._vhdlLibrary + elif self._fileSet is not None: + return self._fileSet.VHDLLibrary + else: + raise Exception("VHDLLibrary was neither set locally nor globally.") + + @VHDLLibrary.setter + def VHDLLibrary(self, value: 'VHDLLibrary') -> None: + self._vhdlLibrary = value + value._files.append(self) + + @property + def VHDLVersion(self) -> VHDLVersion: + """Property setting or returning the VHDL version this VHDL source file is used in.""" + if self._vhdlVersion is not None: + return self._vhdlVersion + elif self._fileSet is not None: + return self._fileSet.VHDLVersion + else: + raise Exception("VHDLVersion was neither set locally nor globally.") + + @VHDLVersion.setter + def VHDLVersion(self, value: VHDLVersion) -> None: + self._vhdlVersion = value + +
+[docs] + def __repr__(self) -> str: + return f"<VHDL file: '{self.ResolvedPath}'; lib: '{self.VHDLLibrary}'; version: {self.VHDLVersion}>"
+
+ + + +class VerilogMixIn(metaclass=ExtendedType, mixin=True): + @property + def VerilogVersion(self) -> SystemVerilogVersion: + """Property setting or returning the Verilog version this Verilog source file is used in.""" + if self._version is not None: + return self._version + elif self._fileSet is not None: + return self._fileSet.VerilogVersion + else: + raise Exception("VerilogVersion was neither set locally nor globally.") + + @VerilogVersion.setter + def VerilogVersion(self, value: SystemVerilogVersion) -> None: + self._version = value + + +class SystemVerilogMixIn(metaclass=ExtendedType, mixin=True): + @property + def SVVersion(self) -> SystemVerilogVersion: + """Property setting or returning the SystemVerilog version this SystemVerilog source file is used in.""" + if self._version is not None: + return self._version + elif self._fileSet is not None: + return self._fileSet.SVVersion + else: + raise Exception("SVVersion was neither set locally nor globally.") + + @SVVersion.setter + def SVVersion(self, value: SystemVerilogVersion) -> None: + self._version = value + + +
+[docs] +@export +class VerilogBaseFile(HDLSourceFile, HumanReadableContent): + _version: SystemVerilogVersion + +
+[docs] + def __init__(self, path: pathlib_Path, version: Nullable[SystemVerilogVersion] = None, project: Nullable["Project"] = None, design: Nullable["Design"] = None, fileSet: Nullable["FileSet"] = None): + super().__init__(path, project, design, fileSet) + + self._version = version
+
+ + + +
+[docs] +@export +class VerilogSourceFile(VerilogBaseFile, VerilogMixIn): + """A Verilog source file (of any language version)."""
+ + + +
+[docs] +@export +class VerilogHeaderFile(VerilogBaseFile, VerilogMixIn): + """A Verilog header file (of any language version)."""
+ + + +
+[docs] +@export +class SystemVerilogBaseFile(VerilogBaseFile): + ...
+ + + +
+[docs] +@export +class SystemVerilogSourceFile(SystemVerilogBaseFile, SystemVerilogMixIn): + """A SystemVerilog source file (of any language version)."""
+ + + +
+[docs] +@export +class SystemVerilogHeaderFile(SystemVerilogBaseFile, SystemVerilogMixIn): + """A SystemVerilog header file (of any language version)."""
+ + + +
+[docs] +@export +class SystemRDLSourceFile(RDLSourceFile, HumanReadableContent): + """A SystemRDL source file (of any language version).""" + + _srdlVersion: SystemRDLVersion + +
+[docs] + def __init__(self, path: pathlib_Path, srdlVersion: Nullable[SystemRDLVersion] = None, project: Nullable["Project"] = None, design: Nullable["Design"] = None, fileSet: Nullable["FileSet"] = None): + super().__init__(path, project, design, fileSet) + + self._srdlVersion = srdlVersion
+ + + @property + def SystemRDLVersion(self) -> SystemRDLVersion: + """Property setting or returning the SystemRDL version this SystemRDL source file is used in.""" + if self._srdlVersion is not None: + return self._srdlVersion + elif self._fileSet is not None: + return self._fileSet.SRDLVersion + else: + raise Exception("SRDLVersion was neither set locally nor globally.") + + @SystemRDLVersion.setter + def SystemRDLVersion(self, value: SystemRDLVersion) -> None: + self._srdlVersion = value
+ + + +
+[docs] +@export +class PythonSourceFile(SourceFile, PythonContent): + """A Python source file."""
+ + + +# TODO: move to a Cocotb module +
+[docs] +@export +class CocotbPythonFile(PythonSourceFile): + """A Python source file used by Cocotb."""
+ + + +
+[docs] +@export +class ConstraintFile(File, HumanReadableContent): + """Base-class of all constraint files."""
+ + + +
+[docs] +@export +class ProjectFile(File): + """Base-class of all tool-specific project files."""
+ + + +
+[docs] +@export +class CSourceFile(SourceFile): + """Base-class of all ANSI-C source files."""
+ + + +
+[docs] +@export +class CppSourceFile(SourceFile): + """Base-class of all ANSI-C++ source files."""
+ + + +
+[docs] +@export +class SettingFile(File): + """Base-class of all tool-specific setting files."""
+ + + +
+[docs] +@export +class SimulationAnalysisFile(File): + """Base-class of all tool-specific analysis files."""
+ + + +
+[docs] +@export +class SimulationElaborationFile(File): + """Base-class of all tool-specific elaboration files."""
+ + + +
+[docs] +@export +class SimulationStartFile(File): + """Base-class of all tool-specific simulation start-up files."""
+ + + +
+[docs] +@export +class SimulationRunFile(File): + """Base-class of all tool-specific simulation run (execution) files."""
+ + + +
+[docs] +@export +class WaveformConfigFile(File): + """Base-class of all tool-specific waveform configuration files."""
+ + + +
+[docs] +@export +class WaveformDatabaseFile(File): + """Base-class of all tool-specific waveform database files."""
+ + + +
+[docs] +@export +class WaveformExchangeFile(File): + """Base-class of all tool-independent waveform exchange files."""
+ + + +
+[docs] +@export +class FileSet(metaclass=ExtendedType, slots=True): + """ + A :term:`FileSet` represents a group of files. Filesets can have sub-filesets. + + The order of insertion is preserved. A fileset can be created standalone and + later associated to another fileset, design and/or project. Or a fileset, + design and/or project can be associated immediately while creating the + fileset. + + :arg name: Name of this fileset. + :arg topLevel: Name of the fileset's toplevel. + :arg directory: Path of this fileset (absolute or relative to a parent fileset or design). + :arg project: Project the file is associated with. + :arg design: Design the file is associated with. + :arg parent: Parent fileset if this fileset is nested. + :arg vhdlLibrary: Default VHDL library for files in this fileset, if not specified for the file itself. + :arg vhdlVersion: Default VHDL version for files in this fileset, if not specified for the file itself. + :arg verilogVersion: Default Verilog version for files in this fileset, if not specified for the file itself. + :arg svVersion: Default SystemVerilog version for files in this fileset, if not specified for the file itself. + :arg srdlVersion: Default SystemRDL version for files in this fileset, if not specified for the file itself. + """ + + _name: str + _topLevel: Nullable[str] + _project: Nullable['Project'] + _design: Nullable['Design'] + _directory: pathlib_Path + _parent: Nullable['FileSet'] + _fileSets: Dict[str, 'FileSet'] + _files: List[File] + _set: Set + _attributes: Dict[Type[Attribute], typing_Any] + _vhdlLibraries: Dict[str, 'VHDLLibrary'] + _vhdlLibrary: 'VHDLLibrary' + _vhdlVersion: VHDLVersion + _verilogVersion: SystemVerilogVersion + _svVersion: SystemVerilogVersion + _srdlVersion: SystemRDLVersion + +
+[docs] + def __init__( + self, + name: str, + topLevel: Nullable[str] = None, + directory: pathlib_Path = pathlib_Path("."), + project: Nullable["Project"] = None, + design: Nullable["Design"] = None, + parent: Nullable['FileSet'] = None, + vhdlLibrary: Union[str, 'VHDLLibrary'] = None, + vhdlVersion: Nullable[VHDLVersion] = None, + verilogVersion: Nullable[SystemVerilogVersion] = None, + svVersion: Nullable[SystemVerilogVersion] = None, + srdlVersion: Nullable[SystemRDLVersion] = None + ): + self._name = name + self._topLevel = topLevel + if project is not None: + self._project = project + self._design = design if design is not None else project.DefaultDesign + + elif design is not None: + self._project = design._project + self._design = design + else: + self._project = None + self._design = None + self._directory = directory + self._parent = parent + self._fileSets = {} + self._files = [] + self._set = set() + + if design is not None: + design._fileSets[name] = self + + self._attributes = {} + self._vhdlLibraries = {} + + # TODO: handle if vhdlLibrary is a string + self._vhdlLibrary = vhdlLibrary + self._vhdlVersion = vhdlVersion + self._verilogVersion = verilogVersion + self._svVersion = svVersion + self._srdlVersion = srdlVersion
+ + + @property + def Name(self) -> str: + """Property setting or returning the fileset's name.""" + return self._name + + @Name.setter + def Name(self, value: str) -> None: + self._name = value + + @property + def TopLevel(self) -> str: + """Property setting or returning the fileset's toplevel.""" + return self._topLevel + + @TopLevel.setter + def TopLevel(self, value: str) -> None: + self._topLevel = value + + @property + def Project(self) -> Nullable['Project']: + """Property setting or returning the project this fileset is used in.""" + return self._project + + @Project.setter + def Project(self, value: 'Project') -> None: + self._project = value + + @property + def Design(self) -> Nullable['Design']: + """Property setting or returning the design this fileset is used in.""" + if self._design is not None: + return self._design + elif self._parent is not None: + return self._parent.Design + else: + return None + # TODO: raise exception instead + # QUESTION: how to handle if design and parent is set? + + @Design.setter + def Design(self, value: 'Design') -> None: + self._design = value + if self._project is None: + self._project = value._project + elif self._project is not value._project: + raise Exception("The design's project is not identical to the already assigned project.") + + @property + def Directory(self) -> pathlib_Path: + """Property setting or returning the directory this fileset is located in.""" + return self._directory + + @Directory.setter + def Directory(self, value: pathlib_Path) -> None: + self._directory = value + + @property + def ResolvedPath(self) -> pathlib_Path: + """Read-only property returning the resolved path of this fileset.""" + if self._directory.is_absolute(): + return self._directory.resolve() + else: + if self._parent is not None: + directory = self._parent.ResolvedPath + elif self._design is not None: + directory = self._design.ResolvedPath + elif self._project is not None: + directory = self._project.ResolvedPath + else: + # TODO: message and exception type + raise Exception("") + + directory = (directory / self._directory).resolve() + if directory.is_absolute(): + return directory + else: + # WORKAROUND: https://stackoverflow.com/questions/67452690/pathlib-path-relative-to-vs-os-path-relpath + return pathlib_Path(path_relpath(directory, pathlib_Path.cwd())) + + @property + def Parent(self) -> Nullable['FileSet']: + """Property setting or returning the parent fileset this fileset is used in.""" + return self._parent + + @Parent.setter + def Parent(self, value: 'FileSet') -> None: + self._parent = value + value._fileSets[self._name] = self + # TODO: check it it already exists + # QUESTION: make an Add fileset method? + + @property + def FileSets(self) -> Dict[str, 'FileSet']: + """Read-only property returning the dictionary of sub-filesets.""" + return self._fileSets + +
+[docs] + def Files(self, fileType: FileType = FileTypes.Any, fileSet: Union[bool, str, 'FileSet'] = None) -> Generator[File, None, None]: + """ + Method returning the files of this fileset. + + :arg fileType: A filter for file types. Default: ``Any``. + :arg fileSet: Specifies how to handle sub-filesets. + """ + if fileSet is False: + for file in self._files: + if file.FileType in fileType: + yield file + elif fileSet is None: + for fileSet in self._fileSets.values(): + for file in fileSet.Files(fileType): + yield file + for file in self._files: + if file.FileType in fileType: + yield file + else: + if isinstance(fileSet, str): + fileSetName = fileSet + try: + fileSet = self._fileSets[fileSetName] + except KeyError as ex: + raise Exception(f"Fileset {fileSetName} not bound to fileset {self.Name}.") from ex + elif not isinstance(fileSet, FileSet): + raise TypeError("Parameter 'fileSet' is not of type 'str' or 'FileSet' nor value 'None'.") + + for file in fileSet.Files(fileType): + yield file
+ + +
+[docs] + def AddFileSet(self, fileSet: "FileSet") -> None: + """ + Method to add a single sub-fileset to this fileset. + + :arg fileSet: A fileset to add to this fileset as sub-fileset. + """ + if not isinstance(fileSet, FileSet): + raise ValueError("Parameter 'fileSet' is not of type ProjectModel.FileSet.") + elif fileSet in self._fileSets: + raise Exception("Sub-fileset already contains this fileset.") + elif fileSet.Name in self._fileSets.keys(): + raise Exception(f"Fileset already contains a sub-fileset named '{fileSet.Name}'.") + + self._fileSets[fileSet.Name] = fileSet + fileSet._parent = self
+ + +
+[docs] + def AddFileSets(self, fileSets: Iterable["FileSet"]) -> None: + """ + Method to add a multiple sub-filesets to this fileset. + + :arg fileSets: An iterable of filesets to add each to the fileset. + """ + for fileSet in fileSets: + self.AddFileSet(fileSet)
+ + + @property + def FileSetCount(self) -> int: + """Returns number of file sets excl. sub-filesets.""" + return len(self._fileSets) + + @property + def TotalFileSetCount(self) -> int: + """Returns number of file sets incl. sub-filesets.""" + fileSetCount = len(self._fileSets) + for fileSet in self._fileSets.values(): + fileSetCount += fileSet.TotalFileSetCount + + return fileSetCount + +
+[docs] + def AddFile(self, file: File) -> None: + """ + Method to add a single file to this fileset. + + :arg file: A file to add to this fileset. + """ + if not isinstance(file, File): + raise TypeError("Parameter 'file' is not of type ProjectModel.File.") + elif file._fileSet is not None: + ex = ValueError(f"File '{file.Path!s}' is already part of fileset '{file.FileSet.Name}'.") + if version_info >= (3, 11): # pragma: no cover + ex.add_note(f"A file can't be assigned to another fileset.") + raise ex + elif file in self._set: + ex = ValueError(f"File '{file.Path!s}' is already part of this fileset.") + if version_info >= (3, 11): # pragma: no cover + ex.add_note(f"A file can't be added twice to a fileset.") + raise ex + + self._files.append(file) + self._set.add(file) + file._fileSet = self
+ + +
+[docs] + def AddFiles(self, files: Iterable[File]) -> None: + """ + Method to add a multiple files to this fileset. + + :arg files: An iterable of files to add each to the fileset. + """ + for file in files: + self.AddFile(file)
+ + + @property + def FileCount(self) -> int: + """Returns number of files excl. sub-filesets.""" + return len(self._files) + + @property + def TotalFileCount(self) -> int: + """Returns number of files incl. the files in sub-filesets.""" + fileCount = len(self._files) + for fileSet in self._fileSets.values(): + fileCount += fileSet.FileCount + + return fileCount + +
+[docs] + def Validate(self) -> None: + """Validate this fileset.""" + if self._name is None or self._name == "": + raise Exception("Validation: FileSet has no name.") + + if self._directory is None: + raise Exception(f"Validation: FileSet '{self._name}' has no directory.") + try: + path = self.ResolvedPath + except Exception as ex: + raise Exception(f"Validation: FileSet '{self._name}' could not compute resolved path.") from ex + if not path.exists(): + raise Exception(f"Validation: FileSet '{self._name}'s directory '{path}' does not exist.") + if not path.is_dir(): + raise Exception(f"Validation: FileSet '{self._name}'s directory '{path}' is not a directory.") + + if self._design is None: + raise Exception(f"Validation: FileSet '{self._directory}' has no design.") + if self._project is None: + raise Exception(f"Validation: FileSet '{self._directory}' has no project.") + + for fileSet in self._fileSets.values(): + fileSet.Validate() + for file in self._files: + file.Validate()
+ + + def GetOrCreateVHDLLibrary(self, name) -> 'VHDLLibrary': + if name in self._vhdlLibraries: + return self._vhdlLibraries[name] + elif name in self._design._vhdlLibraries: + library = self._design._vhdlLibraries[name] + self._vhdlLibraries[name] = library + return library + else: + library = VHDLLibrary(name, design=self._design, vhdlVersion=self._vhdlVersion) + self._vhdlLibraries[name] = library + return library + + @property + def VHDLLibrary(self) -> 'VHDLLibrary': + """Property setting or returning the VHDL library of this fileset.""" + if self._vhdlLibrary is not None: + return self._vhdlLibrary + elif self._parent is not None: + return self._parent.VHDLLibrary + elif self._design is not None: + return self._design.VHDLLibrary + else: + raise Exception("VHDLLibrary was neither set locally nor globally.") + + @VHDLLibrary.setter + def VHDLLibrary(self, value: 'VHDLLibrary') -> None: + self._vhdlLibrary = value + + @property + def VHDLVersion(self) -> VHDLVersion: + """Property setting or returning the VHDL version of this fileset.""" + if self._vhdlVersion is not None: + return self._vhdlVersion + elif self._parent is not None: + return self._parent.VHDLVersion + elif self._design is not None: + return self._design.VHDLVersion + else: + raise Exception("VHDLVersion was neither set locally nor globally.") + + @VHDLVersion.setter + def VHDLVersion(self, value: VHDLVersion) -> None: + self._vhdlVersion = value + + @property + def VerilogVersion(self) -> SystemVerilogVersion: + """Property setting or returning the Verilog version of this fileset.""" + if self._verilogVersion is not None: + return self._verilogVersion + elif self._parent is not None: + return self._parent.VerilogVersion + elif self._design is not None: + return self._design.VerilogVersion + else: + raise Exception("VerilogVersion was neither set locally nor globally.") + + @VerilogVersion.setter + def VerilogVersion(self, value: SystemVerilogVersion) -> None: + self._verilogVersion = value + + @property + def SVVersion(self) -> SystemVerilogVersion: + """Property setting or returning the SystemVerilog version of this fileset.""" + if self._svVersion is not None: + return self._svVersion + elif self._parent is not None: + return self._parent.SVVersion + elif self._design is not None: + return self._design.SVVersion + else: + raise Exception("SVVersion was neither set locally nor globally.") + + @SVVersion.setter + def SVVersion(self, value: SystemVerilogVersion) -> None: + self._svVersion = value + + @property + def SRDLVersion(self) -> SystemRDLVersion: + if self._srdlVersion is not None: + return self._srdlVersion + elif self._parent is not None: + return self._parent.SRDLVersion + elif self._design is not None: + return self._design.SRDLVersion + else: + raise Exception("SRDLVersion was neither set locally nor globally.") + + @SRDLVersion.setter + def SRDLVersion(self, value: SystemRDLVersion) -> None: + self._srdlVersion = value + +
+[docs] + def __len__(self) -> int: + """ + Returns number of attributes set on this fileset. + + :returns: The number if attributes set on this fileset. + """ + return len(self._attributes)
+ + +
+[docs] + def __getitem__(self, key: Type[Attribute]) -> Any: + """Index access for returning attributes on this fileset. + + :param key: The attribute type. + :returns: The attribute's value. + :raises TypeError: When parameter 'key' is not a subclass of Attribute. + """ + if not issubclass(key, Attribute): + raise TypeError("Parameter 'key' is not an 'Attribute'.") + + try: + return self._attributes[key] + except KeyError: + return key.resolve(self, key)
+ + +
+[docs] + def __setitem__(self, key: Type[Attribute], value: typing_Any) -> None: + """ + Index access for adding or setting attributes on this fileset. + + :param key: The attribute type. + :param value: The attributes value. + :raises TypeError: When parameter 'key' is not a subclass of Attribute. + """ + if not issubclass(key, Attribute): + raise TypeError("Parameter 'key' is not an 'Attribute'.") + + self._attributes[key] = value
+ + +
+[docs] + def __delitem__(self, key: Type[Attribute]) -> None: + """ + Index access for deleting attributes on this fileset. + + :param key: The attribute type. + """ + if not issubclass(key, Attribute): + raise TypeError("Parameter 'key' is not an 'Attribute'.") + + del self._attributes[key]
+ + +
+[docs] + def __str__(self) -> str: + """Returns the fileset's name.""" + return self._name
+
+ + + +
+[docs] +@export +class VHDLLibrary(metaclass=ExtendedType, slots=True): + """ + A :term:`VHDLLibrary` represents a group of VHDL source files compiled into the same VHDL library. + + :arg name: The VHDL libraries' name. + :arg project: Project the VHDL library is associated with. + :arg design: Design the VHDL library is associated with. + :arg vhdlVersion: Default VHDL version for files in this VHDL library, if not specified for the file itself. + """ + + _name: str + _project: Nullable['Project'] + _design: Nullable['Design'] + _files: List[File] + _vhdlVersion: VHDLVersion + + _dependencyNode: Vertex + +
+[docs] + def __init__( + self, + name: str, + project: Nullable["Project"] = None, + design: Nullable["Design"] = None, + vhdlVersion: Nullable[VHDLVersion] = None + ): + self._name = name + if project is not None: + self._project = project + self._design = project._defaultDesign if design is None else design + self._dependencyNode = Vertex(value=self, graph=self._design._vhdlLibraryDependencyGraph) + + if name in self._design._vhdlLibraries: + raise Exception(f"Library '{name}' already in design '{self._design.Name}'.") + else: + self._design._vhdlLibraries[name] = self + + elif design is not None: + self._project = design._project + self._design = design + self._dependencyNode = Vertex(value=self, graph=design._vhdlLibraryDependencyGraph) + + if name in design._vhdlLibraries: + raise Exception(f"Library '{name}' already in design '{design.Name}'.") + else: + design._vhdlLibraries[name] = self + + else: + self._project = None + self._design = None + self._dependencyNode = None + + self._files = [] + self._vhdlVersion = vhdlVersion
+ + + @property + def Name(self) -> str: + return self._name + + @property + def Project(self) -> Nullable['Project']: + """Property setting or returning the project this VHDL library is used in.""" + return self._project + + @Project.setter + def Project(self, value: 'Project') -> None: + if not isinstance(value, Project): + raise TypeError("Parameter 'value' is not of type 'Project'.") + + if value is None: + # TODO: unlink VHDLLibrary from project + self._project = None + else: + self._project = value + if self._design is None: + self._design = value._defaultDesign + + @property + def Design(self) -> Nullable['Design']: + """Property setting or returning the design this VHDL library is used in.""" + return self._design + + @Design.setter + def Design(self, value: 'Design') -> None: + if not isinstance(value, Design): + raise TypeError("Parameter 'value' is not of type 'Design'.") + + if value is None: + # TODO: unlink VHDLLibrary from design + self._design = None + else: + if self._design is None: + self._design = value + self._dependencyNode = Vertex(value=self, graph=self._design._vhdlLibraryDependencyGraph) + elif self._design is not value: + # TODO: move VHDLLibrary to other design + # TODO: create new vertex in dependency graph and remove vertex from old graph + self._design = value + else: + pass + + if self._project is None: + self._project = value._project + elif self._project is not value._project: + raise Exception("The design's project is not identical to the already assigned project.") + + @property + def Files(self) -> Generator[File, None, None]: + """Read-only property to return all files in this VHDL library.""" + for file in self._files: + yield file + + @property + def VHDLVersion(self) -> VHDLVersion: + """Property setting or returning the VHDL version of this VHDL library.""" + if self._vhdlVersion is not None: + return self._vhdlVersion + elif self._design is not None: + return self._design.VHDLVersion + else: + raise Exception("VHDLVersion is not set on VHDLLibrary nor parent object.") + + @VHDLVersion.setter + def VHDLVersion(self, value: VHDLVersion) -> None: + self._vhdlVersion = value + + def AddDependency(self, library: 'VHDLLibrary') -> None: + library.parent = self + + def AddFile(self, vhdlFile: VHDLSourceFile) -> None: + if not isinstance(vhdlFile, VHDLSourceFile): + ex = TypeError(f"Parameter 'vhdlFile' is not a 'VHDLSourceFile'.") + if version_info >= (3, 11): # pragma: no cover + ex.add_note(f"Got type '{getFullyQualifiedName(vhdlFile)}'.") + raise ex + + self._files.append(vhdlFile) + + def AddFiles(self, vhdlFiles: Iterable[VHDLSourceFile]) -> None: + for vhdlFile in vhdlFiles: + if not isinstance(vhdlFile, VHDLSourceFile): + raise TypeError(f"Item '{vhdlFile}' in parameter 'vhdlFiles' is not a 'VHDLSourceFile'.") + + self._files.append(vhdlFile) + + @property + def FileCount(self) -> int: + """Returns number of files.""" + return len(self._files) + +
+[docs] + def __len__(self) -> int: + """ + Returns number of attributes set on this VHDL library. + + :returns: The number if attributes set on this VHDL library. + """ + return len(self._attributes)
+ + +
+[docs] + def __getitem__(self, key: Type[Attribute]) -> Any: + """Index access for returning attributes on this VHDL library. + + :param key: The attribute type. + :returns: The attribute's value. + :raises TypeError: When parameter 'key' is not a subclass of Attribute. + """ + if not issubclass(key, Attribute): + raise TypeError("Parameter 'key' is not an 'Attribute'.") + + try: + return self._attributes[key] + except KeyError: + return key.resolve(self, key)
+ + +
+[docs] + def __setitem__(self, key: Type[Attribute], value: typing_Any) -> None: + """ + Index access for adding or setting attributes on this VHDL library. + + :param key: The attribute type. + :param value: The attributes value. + :raises TypeError: When parameter 'key' is not a subclass of Attribute. + """ + if not issubclass(key, Attribute): + raise TypeError("Parameter 'key' is not an 'Attribute'.") + + self._attributes[key] = value
+ + +
+[docs] + def __delitem__(self, key: Type[Attribute]) -> None: + """ + Index access for deleting attributes on this VHDL library. + + :param key: The attribute type. + """ + if not issubclass(key, Attribute): + raise TypeError("Parameter 'key' is not an 'Attribute'.") + + del self._attributes[key]
+ + +
+[docs] + def __str__(self) -> str: + """Returns the VHDL library's name.""" + return self._name
+
+ + + +
+[docs] +@export +class Design(metaclass=ExtendedType, slots=True): + """ + A :term:`Design` represents a group of filesets and the source files therein. + + Each design contains at least one fileset - the :term:`default fileset`. For + designs with VHDL source files, a independent `VHDLLibraries` overlay structure + exists. + + :arg name: The design's name. + :arg topLevel: Name of the design's toplevel. + :arg directory: Path of this design (absolute or relative to the project). + :arg project: Project the design is associated with. + :arg vhdlVersion: Default VHDL version for files in this design, if not specified for the file itself. + :arg verilogVersion: Default Verilog version for files in this design, if not specified for the file itself. + :arg svVersion: Default SystemVerilog version for files in this design, if not specified for the file itself. + :arg srdlVersion: Default SystemRDL version for files in this fileset, if not specified for the file itself. + """ + + _name: str + _topLevel: Nullable[str] + _project: Nullable['Project'] + _directory: pathlib_Path + _fileSets: Dict[str, FileSet] + _defaultFileSet: Nullable[FileSet] + _attributes: Dict[Type[Attribute], typing_Any] + + _vhdlLibraries: Dict[str, VHDLLibrary] + _vhdlVersion: VHDLVersion + _verilogVersion: SystemVerilogVersion + _svVersion: SystemVerilogVersion + _srdlVersion: SystemRDLVersion + _externalVHDLLibraries: List + + _vhdlLibraryDependencyGraph: Graph + _fileDependencyGraph: Graph + +
+[docs] + def __init__( + self, + name: str, + topLevel: Nullable[str] = None, + directory: pathlib_Path = pathlib_Path("."), + project: Nullable["Project"] = None, + vhdlVersion: Nullable[VHDLVersion] = None, + verilogVersion: Nullable[SystemVerilogVersion] = None, + svVersion: Nullable[SystemVerilogVersion] = None, + srdlVersion: Nullable[SystemRDLVersion] = None + ): + self._name = name + self._topLevel = topLevel + self._project = project + if project is not None: + project._designs[name] = self + self._directory = directory + self._fileSets = {} + self._defaultFileSet = FileSet("default", project=project, design=self) + self._attributes = {} + self._vhdlLibraries = {} + self._vhdlVersion = vhdlVersion + self._verilogVersion = verilogVersion + self._svVersion = svVersion + self._srdlVersion = srdlVersion + self._externalVHDLLibraries = [] + + self._vhdlLibraryDependencyGraph = Graph() + self._fileDependencyGraph = Graph()
+ + + @property + def Name(self) -> str: + """Property setting or returning the design's name.""" + return self._name + + @Name.setter + def Name(self, value: str) -> None: + self._name = value + + @property + def TopLevel(self) -> str: + """Property setting or returning the fileset's toplevel.""" + return self._topLevel + + @TopLevel.setter + def TopLevel(self, value: str) -> None: + self._topLevel = value + + @property + def Project(self) -> Nullable['Project']: + """Property setting or returning the project this design is used in.""" + return self._project + + @Project.setter + def Project(self, value: 'Project') -> None: + self._project = value + + @property + def Directory(self) -> pathlib_Path: + """Property setting or returning the directory this design is located in.""" + return self._directory + + @Directory.setter + def Directory(self, value: pathlib_Path) -> None: + self._directory = value + + @property + def ResolvedPath(self) -> pathlib_Path: + """Read-only property returning the resolved path of this fileset.""" + if self._directory.is_absolute(): + return self._directory.resolve() + elif self._project is not None: + path = (self._project.ResolvedPath / self._directory).resolve() + + if path.is_absolute(): + return path + else: + # WORKAROUND: https://stackoverflow.com/questions/67452690/pathlib-path-relative-to-vs-os-path-relpath + return pathlib_Path(path_relpath(path, pathlib_Path.cwd())) + else: + # TODO: message and exception type + raise Exception("") + + @property + def DefaultFileSet(self) -> FileSet: + """Property setting or returning the default fileset of this design.""" + return self._defaultFileSet + + @DefaultFileSet.setter + def DefaultFileSet(self, value: Union[str, FileSet]) -> None: + if isinstance(value, str): + if value not in self._fileSets.keys(): + raise Exception(f"Fileset '{value}' is not in this design.") + + self._defaultFileSet = self._fileSets[value] + elif isinstance(value, FileSet): + if value not in self.FileSets: + raise Exception(f"Fileset '{value}' is not associated to this design.") + + self._defaultFileSet = value + else: + raise ValueError("Unsupported parameter type for 'value'.") + + # TODO: return generator with another method + @property + def FileSets(self) -> Dict[str, FileSet]: + """Read-only property returning the dictionary of filesets.""" + return self._fileSets + +
+[docs] + def Files(self, fileType: FileType = FileTypes.Any, fileSet: Union[str, FileSet] = None) -> Generator[File, None, None]: + """ + Method returning the files of this design. + + :arg fileType: A filter for file types. Default: ``Any``. + :arg fileSet: Specifies if all files from all filesets (``fileSet=None``) are files from a single fileset are returned. + """ + if fileSet is None: + for fileSet in self._fileSets.values(): + for file in fileSet.Files(fileType): + yield file + else: + if isinstance(fileSet, str): + try: + fileSet = self._fileSets[fileSet] + except KeyError as ex: + raise Exception(f"Fileset {fileSet.Name} not bound to design {self.Name}.") from ex + elif not isinstance(fileSet, FileSet): + raise TypeError("Parameter 'fileSet' is not of type 'str' or 'FileSet' nor value 'None'.") + + for file in fileSet.Files(fileType): + yield file
+ + +
+[docs] + def Validate(self) -> None: + """Validate this design.""" + if self._name is None or self._name == "": + raise Exception("Validation: Design has no name.") + + if self._directory is None: + raise Exception(f"Validation: Design '{self._name}' has no directory.") + try: + path = self.ResolvedPath + except Exception as ex: + raise Exception(f"Validation: Design '{self._name}' could not compute resolved path.") from ex + if not path.exists(): + raise Exception(f"Validation: Design '{self._name}'s directory '{path}' does not exist.") + if not path.is_dir(): + raise Exception(f"Validation: Design '{self._name}'s directory '{path}' is not a directory.") + + if len(self._fileSets) == 0: + raise Exception(f"Validation: Design '{self._name}' has no fileset.") + try: + if self._defaultFileSet is not self._fileSets[self._defaultFileSet.Name]: + raise Exception(f"Validation: Design '{self._name}'s default fileset is the same as listed in filesets.") + except KeyError as ex: + raise Exception(f"Validation: Design '{self._name}'s default fileset is not in list of filesets.") from ex + if self._project is None: + raise Exception(f"Validation: Design '{self._path}' has no project.") + + for fileSet in self._fileSets.values(): + fileSet.Validate()
+ + + @property + def VHDLLibraries(self) -> Dict[str, VHDLLibrary]: + return self._vhdlLibraries + + @property + def VHDLVersion(self) -> VHDLVersion: + if self._vhdlVersion is not None: + return self._vhdlVersion + elif self._project is not None: + return self._project.VHDLVersion + else: + raise Exception("VHDLVersion was neither set locally nor globally.") + + @VHDLVersion.setter + def VHDLVersion(self, value: VHDLVersion) -> None: + self._vhdlVersion = value + + @property + def VerilogVersion(self) -> SystemVerilogVersion: + if self._verilogVersion is not None: + return self._verilogVersion + elif self._project is not None: + return self._project.VerilogVersion + else: + raise Exception("VerilogVersion was neither set locally nor globally.") + + @VerilogVersion.setter + def VerilogVersion(self, value: SystemVerilogVersion) -> None: + self._verilogVersion = value + + @property + def SVVersion(self) -> SystemVerilogVersion: + if self._svVersion is not None: + return self._svVersion + elif self._project is not None: + return self._project.SVVersion + else: + raise Exception("SVVersion was neither set locally nor globally.") + + @SVVersion.setter + def SVVersion(self, value: SystemVerilogVersion) -> None: + self._svVersion = value + + @property + def SRDLVersion(self) -> SystemRDLVersion: + if self._srdlVersion is not None: + return self._srdlVersion + elif self._project is not None: + return self._project.SRDLVersion + else: + raise Exception("SRDLVersion was neither set locally nor globally.") + + @SRDLVersion.setter + def SRDLVersion(self, value: SystemRDLVersion) -> None: + self._srdlVersion = value + + @property + def ExternalVHDLLibraries(self) -> List: + return self._externalVHDLLibraries + + def AddFileSet(self, fileSet: FileSet) -> None: + if not isinstance(fileSet, FileSet): + raise ValueError("Parameter 'fileSet' is not of type ProjectModel.FileSet.") + elif fileSet in self._fileSets: + raise Exception("Design already contains this fileset.") + elif fileSet.Name in self._fileSets.keys(): + raise Exception(f"Design already contains a fileset named '{fileSet.Name}'.") + + self._fileSets[fileSet.Name] = fileSet + fileSet.Design = self + fileSet._parent = self + + def AddFileSets(self, fileSets: Iterable[FileSet]) -> None: + for fileSet in fileSets: + self.AddFileSet(fileSet) + + @property + def FileSetCount(self) -> int: + """Returns number of file sets excl. sub-filesets.""" + return len(self._fileSets) + + @property + def TotalFileSetCount(self) -> int: + """Returns number of file sets incl. sub-filesets.""" + fileSetCount = len(self._fileSets) + for fileSet in self._fileSets.values(): + fileSetCount += fileSet.TotalFileSetCount + + return fileSetCount + + def AddFile(self, file: File) -> None: + if file.FileSet is None: + self._defaultFileSet.AddFile(file) + else: + raise ValueError(f"File '{file.Path!s}' is already part of fileset '{file.FileSet.Name}' and can't be assigned via Design to a default fileset.") + + def AddFiles(self, files: Iterable[File]) -> None: + for file in files: + self.AddFile(file) + + def AddVHDLLibrary(self, vhdlLibrary: VHDLLibrary) -> None: + if vhdlLibrary.Name in self._vhdlLibraries: + if self._vhdlLibraries[vhdlLibrary.Name] is vhdlLibrary: + raise Exception(f"The VHDLLibrary '{vhdlLibrary.Name}' was already added to the design.") + else: + raise Exception(f"A VHDLLibrary with same name ('{vhdlLibrary.Name}') already exists for this design.") + + +
+[docs] + def __len__(self) -> int: + """ + Returns number of attributes set on this design. + + :returns: The number if attributes set on this design. + """ + return len(self._attributes)
+ + +
+[docs] + def __getitem__(self, key: Type[Attribute]) -> Any: + """Index access for returning attributes on this design. + + :param key: The attribute type. + :returns: The attribute's value. + :raises TypeError: When parameter 'key' is not a subclass of Attribute. + """ + if not issubclass(key, Attribute): + raise TypeError("Parameter 'key' is not an 'Attribute'.") + + try: + return self._attributes[key] + except KeyError: + return key.resolve(self, key)
+ + +
+[docs] + def __setitem__(self, key: Type[Attribute], value: typing_Any) -> None: + """ + Index access for adding or setting attributes on this design. + + :param key: The attribute type. + :param value: The attributes value. + :raises TypeError: When parameter 'key' is not a subclass of Attribute. + """ + if not issubclass(key, Attribute): + raise TypeError("Parameter 'key' is not an 'Attribute'.") + + self._attributes[key] = value
+ + +
+[docs] + def __delitem__(self, key: Type[Attribute]) -> None: + """ + Index access for deleting attributes on this design. + + :param key: The attribute type. + """ + if not issubclass(key, Attribute): + raise TypeError("Parameter 'key' is not an 'Attribute'.") + + del self._attributes[key]
+ + +
+[docs] + def __str__(self) -> str: + return self._name
+
+ + + +
+[docs] +@export +class Project(metaclass=ExtendedType, slots=True): + """ + A :term:`Project` represents a group of designs and the source files therein. + + :arg name: The project's name. + :arg rootDirectory: Base-path to the project. + :arg vhdlVersion: Default VHDL version for files in this project, if not specified for the file itself. + :arg verilogVersion: Default Verilog version for files in this project, if not specified for the file itself. + :arg svVersion: Default SystemVerilog version for files in this project, if not specified for the file itself. + """ + + _name: str + _rootDirectory: pathlib_Path + _designs: Dict[str, Design] + _defaultDesign: Design + _attributes: Dict[Type[Attribute], typing_Any] + + _vhdlVersion: VHDLVersion + _verilogVersion: SystemVerilogVersion + _svVersion: SystemVerilogVersion + _srdlVersion: SystemRDLVersion + +
+[docs] + def __init__( + self, + name: str, + rootDirectory: pathlib_Path = pathlib_Path("."), + vhdlVersion: Nullable[VHDLVersion] = None, + verilogVersion: Nullable[SystemVerilogVersion] = None, + svVersion: Nullable[SystemVerilogVersion] = None + ): + self._name = name + self._rootDirectory = rootDirectory + self._designs = {} + self._defaultDesign = Design("default", project=self) + self._attributes = {} + self._vhdlVersion = vhdlVersion + self._verilogVersion = verilogVersion + self._svVersion = svVersion
+ + + @property + def Name(self) -> str: + """Property setting or returning the project's name.""" + return self._name + + @property + def RootDirectory(self) -> pathlib_Path: + """Property setting or returning the root directory this project is located in.""" + return self._rootDirectory + + @RootDirectory.setter + def RootDirectory(self, value: pathlib_Path) -> None: + self._rootDirectory = value + + @property + def ResolvedPath(self) -> pathlib_Path: + """Read-only property returning the resolved path of this fileset.""" + path = self._rootDirectory.resolve() + if self._rootDirectory.is_absolute(): + return path + else: + # WORKAROUND: https://stackoverflow.com/questions/67452690/pathlib-path-relative-to-vs-os-path-relpath + return pathlib_Path(path_relpath(path, pathlib_Path.cwd())) + + # TODO: return generator with another method + @property + def Designs(self) -> Dict[str, Design]: + return self._designs + + @property + def DefaultDesign(self) -> Design: + return self._defaultDesign + +
+[docs] + def Validate(self) -> None: + """Validate this project.""" + if self._name is None or self._name == "": + raise Exception("Validation: Project has no name.") + + if self._rootDirectory is None: + raise Exception(f"Validation: Project '{self._name}' has no root directory.") + try: + path = self.ResolvedPath + except Exception as ex: + raise Exception(f"Validation: Project '{self._name}' could not compute resolved path.") from ex + if not path.exists(): + raise Exception(f"Validation: Project '{self._name}'s directory '{path}' does not exist.") + if not path.is_dir(): + raise Exception(f"Validation: Project '{self._name}'s directory '{path}' is not a directory.") + + if len(self._designs) == 0: + raise Exception(f"Validation: Project '{self._name}' has no design.") + try: + if self._defaultDesign is not self._designs[self._defaultDesign.Name]: + raise Exception(f"Validation: Project '{self._name}'s default design is the same as listed in designs.") + except KeyError as ex: + raise Exception(f"Validation: Project '{self._name}'s default design is not in list of designs.") from ex + + for design in self._designs.values(): + design.Validate()
+ + + @property + def DesignCount(self) -> int: + """Returns number of designs.""" + return len(self._designs) + + @property + def VHDLVersion(self) -> VHDLVersion: + # TODO: check for None and return exception + return self._vhdlVersion + + @VHDLVersion.setter + def VHDLVersion(self, value: VHDLVersion) -> None: + self._vhdlVersion = value + + @property + def VerilogVersion(self) -> SystemVerilogVersion: + # TODO: check for None and return exception + return self._verilogVersion + + @VerilogVersion.setter + def VerilogVersion(self, value: SystemVerilogVersion) -> None: + self._verilogVersion = value + + @property + def SVVersion(self) -> SystemVerilogVersion: + # TODO: check for None and return exception + return self._svVersion + + @SVVersion.setter + def SVVersion(self, value: SystemVerilogVersion) -> None: + self._svVersion = value + + @property + def SRDLVersion(self) -> SystemRDLVersion: + # TODO: check for None and return exception + return self._srdlVersion + + @SRDLVersion.setter + def SRDLVersion(self, value: SystemRDLVersion) -> None: + self._srdlVersion = value + +
+[docs] + def __len__(self) -> int: + """ + Returns number of attributes set on this project. + + :returns: The number if attributes set on this project. + """ + return len(self._attributes)
+ + +
+[docs] + def __getitem__(self, key: Type[Attribute]) -> Any: + """Index access for returning attributes on this project. + + :param key: The attribute type. + :returns: The attribute's value. + :raises TypeError: When parameter 'key' is not a subclass of Attribute. + """ + if not issubclass(key, Attribute): + raise TypeError("Parameter 'key' is not an 'Attribute'.") + + try: + return self._attributes[key] + except KeyError: + return key.resolve(self, key)
+ + +
+[docs] + def __setitem__(self, key: Type[Attribute], value: typing_Any) -> None: + """ + Index access for adding or setting attributes on this project. + + :param key: The attribute type. + :param value: The attributes value. + :raises TypeError: When parameter 'key' is not a subclass of Attribute. + """ + if not issubclass(key, Attribute): + raise TypeError("Parameter 'key' is not an 'Attribute'.") + + self._attributes[key] = value
+ + +
+[docs] + def __delitem__(self, key: Type[Attribute]) -> None: + """ + Index access for deleting attributes on this project. + + :param key: The attribute type. + """ + if not issubclass(key, Attribute): + raise TypeError("Parameter 'key' is not an 'Attribute'.") + + del self._attributes[key]
+ + +
+[docs] + def __str__(self) -> str: + return self._name
+
+ +
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/pyEDAA/ProjectModel/Altera/Quartus.html b/_modules/pyEDAA/ProjectModel/Altera/Quartus.html new file mode 100644 index 00000000..5833ce67 --- /dev/null +++ b/_modules/pyEDAA/ProjectModel/Altera/Quartus.html @@ -0,0 +1,188 @@ + + + + + + + pyEDAA.ProjectModel.Altera.Quartus — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for pyEDAA.ProjectModel.Altera.Quartus

+# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for Altera Quartus."""
+from pyTooling.Decorators import export
+
+from pyEDAA.ProjectModel import ConstraintFile, ProjectFile, SDCContent, TCLContent
+
+
+
+[docs] +@export +class QuartusProjectFile(ProjectFile, TCLContent): + """A Quartus project file (``*.qpf``)."""
+ + + +
+[docs] +@export +class SDCConstraintFile(ConstraintFile, SDCContent): + """A Quartus constraint file (Synopsys Design Constraints; ``*.sdc``)."""
+ +
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/pyEDAA/ProjectModel/Attributes.html b/_modules/pyEDAA/ProjectModel/Attributes.html new file mode 100644 index 00000000..b36d9c76 --- /dev/null +++ b/_modules/pyEDAA/ProjectModel/Attributes.html @@ -0,0 +1,197 @@ + + + + + + + pyEDAA.ProjectModel.Attributes — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for pyEDAA.ProjectModel.Attributes

+# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""A set of common attributes to store meta information on ProjectModel entities (project, design, fileset, file, ...)."""
+from typing               import Dict
+from pyTooling.Decorators import export
+
+from pyEDAA.ProjectModel  import Attribute
+
+
+
+[docs] +@export +class KeyValueAttribute(Attribute): + KEY = "ID" + + _keyValuePairs: Dict[str, str] + +
+[docs] + def __init__(self) -> None: + super().__init__() + + self._keyValuePairs = {}
+ + + def __getitem__(self, item: str) -> str: + return self._keyValuePairs[item] + + def __setitem__(self, key: str, value: str) -> None: + self._keyValuePairs[key] = value
+ +
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/pyEDAA/ProjectModel/GHDL.html b/_modules/pyEDAA/ProjectModel/GHDL.html new file mode 100644 index 00000000..6f5281c8 --- /dev/null +++ b/_modules/pyEDAA/ProjectModel/GHDL.html @@ -0,0 +1,180 @@ + + + + + + + pyEDAA.ProjectModel.GHDL — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for pyEDAA.ProjectModel.GHDL

+# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for `GHDL <https://github.com/ghdl>`__."""
+from pyTooling.Decorators import export
+
+from pyEDAA.ProjectModel import WaveformExchangeFile
+
+
+
+[docs] +@export +class GHDLWaveformFile(WaveformExchangeFile): + """GHDL's waveform file (``*.ghw``) supporting VHDL and Verilog simulation results."""
+ +
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/pyEDAA/ProjectModel/Intel/QuartusPrime.html b/_modules/pyEDAA/ProjectModel/Intel/QuartusPrime.html new file mode 100644 index 00000000..153dacb2 --- /dev/null +++ b/_modules/pyEDAA/ProjectModel/Intel/QuartusPrime.html @@ -0,0 +1,188 @@ + + + + + + + pyEDAA.ProjectModel.Intel.QuartusPrime — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for pyEDAA.ProjectModel.Intel.QuartusPrime

+# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for Intel FPGA Quartus Prime."""
+from pyTooling.Decorators import export
+
+from pyEDAA.ProjectModel import ConstraintFile, ProjectFile, SDCContent, TCLContent
+
+
+
+[docs] +@export +class QuartusProjectFile(ProjectFile, TCLContent): + """A Quartus project file (``*.qpf``)."""
+ + + +
+[docs] +@export +class SDCConstraintFile(ConstraintFile, SDCContent): + """A Quartus constraint file (Synopsys Design Constraints; ``*.sdc``)."""
+ +
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/pyEDAA/ProjectModel/MentorGraphics/ModelSim.html b/_modules/pyEDAA/ProjectModel/MentorGraphics/ModelSim.html new file mode 100644 index 00000000..e006b4c7 --- /dev/null +++ b/_modules/pyEDAA/ProjectModel/MentorGraphics/ModelSim.html @@ -0,0 +1,196 @@ + + + + + + + pyEDAA.ProjectModel.MentorGraphics.ModelSim — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for pyEDAA.ProjectModel.MentorGraphics.ModelSim

+# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for Mentor Graphics ModelSim."""
+from pyTooling.Decorators import export
+
+from pyEDAA.ProjectModel import ProjectFile, SettingFile, INIContent, WaveformConfigFile, TCLContent
+
+
+
+[docs] +@export +class ModelSimProjectFile(ProjectFile): + pass
+ + + +
+[docs] +@export +class ModelSimINIFile(SettingFile, INIContent): + pass
+ + + +
+[docs] +@export +class WaveDoFile(WaveformConfigFile, TCLContent): + pass
+ +
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/pyEDAA/ProjectModel/MentorGraphics/QuestaSim.html b/_modules/pyEDAA/ProjectModel/MentorGraphics/QuestaSim.html new file mode 100644 index 00000000..56c3c8dd --- /dev/null +++ b/_modules/pyEDAA/ProjectModel/MentorGraphics/QuestaSim.html @@ -0,0 +1,196 @@ + + + + + + + pyEDAA.ProjectModel.MentorGraphics.QuestaSim — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for pyEDAA.ProjectModel.MentorGraphics.QuestaSim

+# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for Mentor Graphics QuestaSim."""
+from pyTooling.Decorators import export
+
+from pyEDAA.ProjectModel import ProjectFile, SettingFile, INIContent, WaveformConfigFile, TCLContent
+
+
+
+[docs] +@export +class ModelSimProjectFile(ProjectFile): + pass
+ + + +
+[docs] +@export +class ModelSimINIFile(SettingFile, INIContent): + pass
+ + + +
+[docs] +@export +class WaveDoFile(WaveformConfigFile, TCLContent): + pass
+ +
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/pyEDAA/ProjectModel/OSVVM.html b/_modules/pyEDAA/ProjectModel/OSVVM.html new file mode 100644 index 00000000..e771d15f --- /dev/null +++ b/_modules/pyEDAA/ProjectModel/OSVVM.html @@ -0,0 +1,336 @@ + + + + + + + pyEDAA.ProjectModel.OSVVM — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for pyEDAA.ProjectModel.OSVVM

+# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for `OSVVM <https://github.com/OSVVM>`__."""
+from pathlib import Path
+
+from pyTooling.Decorators import export
+from typing import Optional as Nullable, List
+
+from pyEDAA.ProjectModel import ProjectFile, TCLContent, Project, Design, FileSet, VHDLLibrary, VHDLSourceFile
+
+
+
+[docs] +@export +class OSVVMProjectFile(ProjectFile, TCLContent): + """An OSVVM project file (``*.pro``).""" + + _osvvmProject: Nullable[Project] + +
+[docs] + def __init__( + self, + path: Path, + project: Nullable[Project] = None, + design: Nullable[Design] = None, + fileSet: Nullable[FileSet] = None + ): + super().__init__(path, project, design, fileSet) + + self._osvvmProject = None
+ + + @property + def ProjectModel(self) -> Project: + return self._osvvmProject + + class Instruction: + _line: int + + def __init__(self, line: int): + self._line = line + + class Empty(Instruction): + def __init__(self, line: int): + super().__init__(line) + + class Comment(Instruction): + _commentText: str + + def __init__(self, line: int, commentText: str): + super().__init__(line) + self._commentText = commentText.rstrip() + + @property + def CommentText(self) -> str: + return self._commentText + + class Analyze(Instruction): + _vhdlSourceFile: VHDLSourceFile + + def __init__(self, line: int, parameterText: str): + super().__init__(line) + self._vhdlSourceFile = VHDLSourceFile(Path(parameterText.strip())) + + @property + def VHDLSourceFile(self) -> VHDLSourceFile: + return self._vhdlSourceFile + + class Library(Instruction): + _vhdlLibrary: VHDLLibrary + + def __init__(self, line: int, parameterText: str): + super().__init__(line) + self._vhdlLibrary = VHDLLibrary(parameterText.strip()) + + @property + def VHDLLibrary(self) -> VHDLLibrary: + return self._vhdlLibrary + + class Include(Instruction): + _osvvmProjectFile: 'OSVVMProjectFile' + _fileSet: FileSet + + def __init__(self, line: int, workingDirectory: Path, parameterText: str): + super().__init__(line) + + includeFile = Path(parameterText.strip()) + includePath = (workingDirectory / includeFile).resolve() + + self._fileSet = FileSet(includeFile.name, directory=includeFile.parent) + self._osvvmProjectFile = OSVVMProjectFile(includePath) + + @property + def OSVVMProjectFile(self) -> 'OSVVMProjectFile': + return self._osvvmProjectFile + + def Parse(self, fileSet: FileSet): + self._fileSet.Parent = fileSet + + for instruction in self._osvvmProjectFile._Parse(): + if isinstance(instruction, OSVVMProjectFile.Include): + instruction.Parse(self._fileSet) + elif isinstance(instruction, OSVVMProjectFile.Analyze): + self._fileSet.AddFile(instruction.VHDLSourceFile) + elif isinstance(instruction, OSVVMProjectFile.Library): + self._fileSet.Design.AddVHDLLibrary(instruction.VHDLLibrary) +# elif isinstance(instruction, OSVVMProjectFile.Build): + + elif not isinstance(instruction, (OSVVMProjectFile.Empty, OSVVMProjectFile.Comment)): + raise Exception(f"Unknown instruction '{instruction.__class__.__name__}' in OSVVM project file '{self._osvvmProjectFile.ResolvedPath}'") + + def Parse(self) -> None: + projectName = self._path.name + self._osvvmProject = Project(projectName, rootDirectory=self._path.parent) + + fileSet = self._osvvmProject.DefaultDesign.DefaultFileSet + + for instruction in self._Parse(): + if isinstance(instruction, OSVVMProjectFile.Include): + instruction.Parse(fileSet) + elif isinstance(instruction, OSVVMProjectFile.Analyze): + fileSet.AddFile(instruction.VHDLSourceFile) + elif not isinstance(instruction, (OSVVMProjectFile.Empty, OSVVMProjectFile.Comment)): + raise Exception(f"Unknown instruction '{instruction.__class__.__name__}' in OSVVM project file '{self.ResolvedPath}'") + + def _Parse(self) -> List: + path = self.ResolvedPath + if not path.exists(): + raise Exception(f"OSVVM project file '{path}' not found.") from FileNotFoundError(f"File '{path}' not found.") + + instructions: List = [] + print() + with path.open("r", encoding="utf-8") as file: + i = 1 + for line in file: + line = line.lstrip() + + if line.startswith("#"): + comment = OSVVMProjectFile.Comment(i, line[1:]) + instructions.append(comment) + + elif line.startswith("analyze"): + vhdlFile = OSVVMProjectFile.Analyze(i, line[8:]) + instructions.append(vhdlFile) + + elif line.startswith("library"): + vhdlLibrary = OSVVMProjectFile.Library(i, line[8:]) + instructions.append(vhdlLibrary) + + elif line.startswith("include"): + include = OSVVMProjectFile.Include(i, path.parent, line[8:]) + instructions.append(include) + + elif line.startswith("build"): + parameter = line[6:] + print(f"BUILD: {parameter}") + elif line.startswith("if"): + print(f"IF (line={i}): {line[3:].rstrip()}") + elif line.startswith("}"): + print(f"}} (line={i}): {line[2:].rstrip()}") + elif len(line) == 0: + instructions.append(OSVVMProjectFile.Empty(i)) + else: + print(f"UNKNOWN (line={i}): '{line.rstrip()}'") + + i += 1 + + return instructions
+ +
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/pyEDAA/ProjectModel/Verilog.html b/_modules/pyEDAA/ProjectModel/Verilog.html new file mode 100644 index 00000000..b2994977 --- /dev/null +++ b/_modules/pyEDAA/ProjectModel/Verilog.html @@ -0,0 +1,180 @@ + + + + + + + pyEDAA.ProjectModel.Verilog — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for pyEDAA.ProjectModel.Verilog

+# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for Verilog."""
+from pyTooling.Decorators import export
+
+from pyEDAA.ProjectModel import WaveformExchangeFile
+
+
+
+[docs] +@export +class ValueChangeDumpFile(WaveformExchangeFile): + """Verilog's waveform file (``*.vcd``) for exchanging value changes as defined by IEEE Std. 1364."""
+ +
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/pyEDAA/ProjectModel/Xilinx/ISE.html b/_modules/pyEDAA/ProjectModel/Xilinx/ISE.html new file mode 100644 index 00000000..7bfe2927 --- /dev/null +++ b/_modules/pyEDAA/ProjectModel/Xilinx/ISE.html @@ -0,0 +1,188 @@ + + + + + + + pyEDAA.ProjectModel.Xilinx.ISE — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for pyEDAA.ProjectModel.Xilinx.ISE

+# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for Xilinx ISE."""
+from pyTooling.Decorators import export
+
+from pyEDAA.ProjectModel import ConstraintFile, ProjectFile, HumanReadableContent
+
+
+
+[docs] +@export +class ISEProjectFile(ProjectFile): + pass
+ + + +
+[docs] +@export +class UCFConstraintFile(ConstraintFile, HumanReadableContent): + pass
+ +
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/pyEDAA/ProjectModel/Xilinx/Vivado.html b/_modules/pyEDAA/ProjectModel/Xilinx/Vivado.html new file mode 100644 index 00000000..eb2a91d7 --- /dev/null +++ b/_modules/pyEDAA/ProjectModel/Xilinx/Vivado.html @@ -0,0 +1,372 @@ + + + + + + + pyEDAA.ProjectModel.Xilinx.Vivado — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for pyEDAA.ProjectModel.Xilinx.Vivado

+# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for Xilinx Vivado."""
+from pathlib import Path
+from typing  import Iterable, Optional as Nullable
+from xml.dom import minidom, Node
+
+from pyTooling.Decorators  import export
+from pyTooling.MetaClasses import ExtendedType
+from pyVHDLModel           import VHDLVersion
+
+from pyEDAA.ProjectModel import ProjectFile, XMLFile, XMLContent, SDCContent, Project, FileSet, Attribute, Design
+from pyEDAA.ProjectModel import File as Model_File
+from pyEDAA.ProjectModel import ConstraintFile as Model_ConstraintFile
+from pyEDAA.ProjectModel import VerilogSourceFile as Model_VerilogSourceFile
+from pyEDAA.ProjectModel import VHDLSourceFile as Model_VHDLSourceFile
+
+
+
+[docs] +@export +class UsedInAttribute(Attribute): + KEY = "UsedIn" + VALUE_TYPE = Iterable[str]
+ + + +
+[docs] +@export +class File(Model_File): + pass
+ + + +class VivadoFileMixIn(metaclass=ExtendedType, mixin=True): + def _registerAttributes(self) -> None: + self._attributes[UsedInAttribute] = [] + + +
+[docs] +@export +class ConstraintFile(Model_ConstraintFile, VivadoFileMixIn): + def _registerAttributes(self) -> None: + super()._registerAttributes() + VivadoFileMixIn._registerAttributes(self)
+ + + +
+[docs] +@export +class VerilogSourceFile(Model_VerilogSourceFile): + def _registerAttributes(self) -> None: + super()._registerAttributes() + VivadoFileMixIn._registerAttributes(self)
+ + + +
+[docs] +@export +class VHDLSourceFile(Model_VHDLSourceFile): + def _registerAttributes(self) -> None: + super()._registerAttributes() + VivadoFileMixIn._registerAttributes(self)
+ + + +
+[docs] +@export +class VivadoProjectFile(ProjectFile, XMLContent): + """A Vivado project file (``*.xpr``).""" + + _xprProject: Project + +
+[docs] + def __init__( + self, + path: Path, + project: Nullable[Project] = None, + design: Nullable[Design] = None, + fileSet: Nullable[FileSet] = None + ) -> None: + super().__init__(path, project, design, fileSet) + + self._xprProject = None
+ + + @property + def ProjectModel(self) -> Project: + return self._xprProject + + def Parse(self) -> None: + if not self._path.exists(): + raise Exception(f"Vivado project file '{self._path!s}' not found.") from FileNotFoundError(f"File '{self._path!s}' not found.") + + try: + root = minidom.parse(str(self._path)).documentElement + except Exception as ex: + raise Exception(f"Couldn't open '{self._path!s}'.") from ex + + self._xprProject = Project(self._path.stem, rootDirectory=self._path.parent) + self._ParseRootElement(root) + + def _ParseRootElement(self, root) -> None: + for rootNode in root.childNodes: + if rootNode.nodeName == "FileSets": + self._ParseFileSets(rootNode) + break + + def _ParseFileSets(self, filesetsNode) -> None: + for fileSetsNode in filesetsNode.childNodes: + if fileSetsNode.nodeType == Node.ELEMENT_NODE and fileSetsNode.tagName == "FileSet": + self._ParseFileSet(fileSetsNode) + + def _ParseFileSet(self, filesetNode) -> None: + filesetName = filesetNode.getAttribute("Name") + fileset = FileSet(filesetName, design=self._xprProject.DefaultDesign) + + for fileNode in filesetNode.childNodes: + if fileNode.nodeType == Node.ELEMENT_NODE: + if fileNode.tagName == "File": + self._ParseFile(fileNode, fileset) + elif fileNode.nodeType == Node.ELEMENT_NODE and fileNode.tagName == "Config": + self._ParseFileSetConfig(fileNode, fileset) + + def _ParseFile(self, fileNode, fileset) -> None: + croppedPath = fileNode.getAttribute("Path").replace("$PPRDIR/", "") + filePath = Path(croppedPath) + if filePath.suffix in (".vhd", ".vhdl"): + self._ParseVHDLFile(fileNode, filePath, fileset) + elif filePath.suffix == ".xdc": + self._ParseXDCFile(fileNode, filePath, fileset) + elif filePath.suffix == ".v": + self._ParseVerilogFile(fileNode, filePath, fileset) + elif filePath.suffix == ".xci": + self._ParseXCIFile(fileNode, filePath, fileset) + else: + self._ParseDefaultFile(fileNode, filePath, fileset) + + def _ParseVHDLFile(self, fileNode, path, fileset) -> None: + vhdlFile = VHDLSourceFile(path) + fileset.AddFile(vhdlFile) + usedInAttr = vhdlFile[UsedInAttribute] + + for childNode in fileNode.childNodes: + if childNode.nodeType == Node.ELEMENT_NODE and childNode.tagName == "FileInfo": + if childNode.getAttribute("SFType") == "VHDL2008": + vhdlFile.VHDLVersion = VHDLVersion.VHDL2008 + else: + vhdlFile.VHDLVersion = VHDLVersion.VHDL93 + + for fileAttribute in childNode.childNodes: + if fileAttribute.nodeType == Node.ELEMENT_NODE and fileAttribute.tagName == "Attr": + if fileAttribute.getAttribute("Name") == "Library": + libraryName = fileAttribute.getAttribute("Val") + vhdlFile.VHDLLibrary = fileset.GetOrCreateVHDLLibrary(libraryName) + elif fileAttribute.getAttribute("Val") == "UsedIn": + usedInAttr.append(fileAttribute.getAttribute("Val")) + + def _ParseDefaultFile(self, _, path, fileset) -> None: + File(path, fileSet=fileset) + + def _ParseXDCFile(self, _, path, fileset) -> None: + XDCConstraintFile(path, fileSet=fileset) + + def _ParseVerilogFile(self, _, path, fileset) -> None: + VerilogSourceFile(path, fileSet=fileset) + + def _ParseXCIFile(self, _, path, fileset) -> None: + IPCoreInstantiationFile(path, fileSet=fileset) + + def _ParseFileSetConfig(self, fileNode, fileset) -> None: + for option in fileNode.childNodes: + if option.nodeType == Node.ELEMENT_NODE and option.tagName == "Option": + if option.getAttribute("Name") == "TopModule": + fileset.TopLevel = option.getAttribute("Val")
+ + + +
+[docs] +@export +class XDCConstraintFile(ConstraintFile, SDCContent): + """A Vivado constraint file (Xilinx Design Constraints; ``*.xdc``)."""
+ + + +
+[docs] +@export +class IPCoreDescriptionFile(XMLFile): + pass
+ + + +
+[docs] +@export +class IPCoreInstantiationFile(XMLFile): + """A Vivado IP core instantiation file (Xilinx IPCore Instance; ``*.xci``)."""
+ +
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_sources/ChangeLog/index.rst.txt b/_sources/ChangeLog/index.rst.txt new file mode 100644 index 00000000..168996de --- /dev/null +++ b/_sources/ChangeLog/index.rst.txt @@ -0,0 +1,12 @@ +ChangeLog +######### + +Upcoming Release +================ + +* tbd + +01.09.2021 +========== + +`pyEDAA.ProjectModel` was split from `pyIPCMI` (v1.1.6) as an independent Python package. diff --git a/_sources/Dependency.rst.txt b/_sources/Dependency.rst.txt new file mode 100644 index 00000000..f2f66326 --- /dev/null +++ b/_sources/Dependency.rst.txt @@ -0,0 +1,172 @@ +.. _dependency: + +Dependency +########## + +.. |img-ProjectModel-lib-status| image:: https://img.shields.io/librariesio/release/pypi/pyEDAA.ProjectModel + :alt: Libraries.io status for latest release + :height: 22 + :target: https://libraries.io/github/edaa-org/pyEDAA.ProjectModel +.. |img-ProjectModel-req-status| image:: https://img.shields.io/requires/github/edaa-org/pyEDAA.ProjectModel + :alt: Requires.io + :height: 22 + :target: https://requires.io/github/edaa-org/pyEDAA.ProjectModel/requirements/?branch=main + ++------------------------------------------+------------------------------------------+ +| `Libraries.io `_ | `Requires.io `_ | ++==========================================+==========================================+ +| |img-ProjectModel-lib-status| | |img-ProjectModel-req-status| | ++------------------------------------------+------------------------------------------+ + + +.. _dependency-package: + +pyEDAA.ProjectModel Package +*************************** + ++------------------------------------------------------------------------+-------------+-------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ +| **Package** | **Version** | **License** | **Dependencies** | ++========================================================================+=============+===========================================================================================+========================================================================================================================================================+ +| `pyTooling `__ | ≥7.0 | `Apache License, 2.0 `__ | *None* | ++------------------------------------------------------------------------+-------------+-------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `pyVHDLModel `__ | ≥0.27.1 | `Apache License, 2.0 `__ | * `pyTooling `__ (`Apache License, 2.0 `__) | ++------------------------------------------------------------------------+-------------+-------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `pySVModel `__ | ≥0.3.1 | `Apache License, 2.0 `__ | * `pyTooling `__ (`Apache License, 2.0 `__) | ++------------------------------------------------------------------------+-------------+-------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `pySystemRDLModel `__ | ≥0.1.0 | `Apache License, 2.0 `__ | * `pyTooling `__ (`Apache License, 2.0 `__) | ++------------------------------------------------------------------------+-------------+-------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ + + +.. _dependency-testing: + +Unit Testing / Coverage / Type Checking (Optional) +************************************************** + +Additional Python packages needed for testing, code coverage collection and static type checking. These packages are +only needed for developers or on a CI server, thus sub-dependencies are not evaluated further. + + +.. rubric:: Manually Installing Test Requirements + +Use the :file:`tests/requirements.txt` file to install all dependencies via ``pip3``. The file will recursively install +the mandatory dependencies too. + +.. code-block:: shell + + pip3 install -U -r tests/requirements.txt + + +.. rubric:: Dependency List + ++---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+ +| **Package** | **Version** | **License** | **Dependencies** | ++=====================================================================+=============+========================================================================================+======================+ +| `pytest `__ | ≥8.3 | `MIT `__ | *Not yet evaluated.* | ++---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+ +| `pytest-cov `__ | ≥6.0 | `MIT `__ | *Not yet evaluated.* | ++---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+ +| `Coverage `__ | ≥7.6 | `Apache License, 2.0 `__ | *Not yet evaluated.* | ++---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+ +| `mypy `__ | ≥1.13 | `MIT `__ | *Not yet evaluated.* | ++---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+ +| `typing-extensions `__ | ≥4.12 | `PSF-2.0 `__ | *Not yet evaluated.* | ++---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+ +| `lxml `__ | ≥5.3 | `BSD 3-Clause `__ | *Not yet evaluated.* | ++---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+ + + +.. _dependency-documentation: + +Sphinx Documentation (Optional) +******************************* + +Additional Python packages needed for documentation generation. These packages are only needed for developers or on a +CI server, thus sub-dependencies are not evaluated further. + + +.. rubric:: Manually Installing Documentation Requirements + +Use the :file:`doc/requirements.txt` file to install all dependencies via ``pip3``. The file will recursively install +the mandatory dependencies too. + +.. code-block:: shell + + pip3 install -U -r doc/requirements.txt + + +.. rubric:: Dependency List + ++-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ +| **Package** | **Version** | **License** | **Dependencies** | ++=================================================================================================+==============+==========================================================================================================+======================================================================================================================================================+ +| `pyTooling `__ | ≥7.0 | `Apache License, 2.0 `__ | *None* | ++-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `Sphinx `__ | ≥8.1 | `BSD 3-Clause `__ | *Not yet evaluated.* | ++-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `sphinx_btd_theme `__ | ≥0.5.2 | `MIT `__ | *Not yet evaluated.* | ++-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ +| !! `sphinx_fontawesome `__ | ≥0.0.6 | `GPL 2.0 `__ | *Not yet evaluated.* | ++-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `sphinx_autodoc_typehints `__ | ≥2.5 | `MIT `__ | *Not yet evaluated.* | ++-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ + + +.. _dependency-packaging: + +Packaging (Optional) +******************** + +Additional Python packages needed for installation package generation. These packages are only needed for developers or +on a CI server, thus sub-dependencies are not evaluated further. + + +.. rubric:: Manually Installing Packaging Requirements + +Use the :file:`build/requirements.txt` file to install all dependencies via ``pip3``. The file will recursively +install the mandatory dependencies too. + +.. code-block:: shell + + pip3 install -U -r build/requirements.txt + + +.. rubric:: Dependency List + ++----------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ +| **Package** | **Version** | **License** | **Dependencies** | ++============================================================================+==============+==========================================================================================================+======================================================================================================================================================+ +| `pyTooling `__ | ≥7.0 | `Apache License, 2.0 `__ | *None* | ++----------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `wheel `__ | ≥0.44 | `MIT `__ | *Not yet evaluated.* | ++----------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ + + +.. _dependency-publishing: + +Publishing (CI-Server only) +*************************** + +Additional Python packages needed for publishing the generated installation package to e.g, PyPI or any equivalent +services. These packages are only needed for maintainers or on a CI server, thus sub-dependencies are not evaluated +further. + + +.. rubric:: Manually Installing Publishing Requirements + +Use the :file:`dist/requirements.txt` file to install all dependencies via ``pip3``. The file will recursively +install the mandatory dependencies too. + +.. code-block:: shell + + pip3 install -U -r dist/requirements.txt + + +.. rubric:: Dependency List + ++----------------------------------------------------------+--------------+-------------------------------------------------------------------------------------------+----------------------+ +| **Package** | **Version** | **License** | **Dependencies** | ++==========================================================+==============+===========================================================================================+======================+ +| `wheel `__ | ≥0.44 | `MIT `__ | *Not yet evaluated.* | ++----------------------------------------------------------+--------------+-------------------------------------------------------------------------------------------+----------------------+ +| `Twine `__ | ≥5.1 | `Apache License, 2.0 `__ | *Not yet evaluated.* | ++----------------------------------------------------------+--------------+-------------------------------------------------------------------------------------------+----------------------+ diff --git a/_sources/Doc-License.rst.txt b/_sources/Doc-License.rst.txt new file mode 100644 index 00000000..1258fbc2 --- /dev/null +++ b/_sources/Doc-License.rst.txt @@ -0,0 +1,353 @@ +.. _DOCLICENSE: + +.. Note:: This is a local copy of the `Creative Commons - Attribution 4.0 International (CC BY 4.0) `__. + +.. Attention:: This **CC BY 4.0** license applies only to the **documentation** of this project. + + +Creative Commons Attribution 4.0 International +############################################## + +Creative Commons Corporation (“Creative Commons”) is not a law firm and does not +provide legal services or legal advice. Distribution of Creative Commons public +licenses does not create a lawyer-client or other relationship. Creative Commons +makes its licenses and related information available on an “as-is” basis. +Creative Commons gives no warranties regarding its licenses, any material +licensed under their terms and conditions, or any related information. Creative +Commons disclaims all liability for damages resulting from their use to the +fullest extent possible. + +.. topic:: Using Creative Commons Public Licenses + + Creative Commons public licenses provide a standard set of terms and conditions + that creators and other rights holders may use to share original works of + authorship and other material subject to copyright and certain other rights + specified in the public license below. The following considerations are for + informational purposes only, are not exhaustive, and do not form part of our + licenses. + + * **Considerations for licensors:** Our public licenses are intended for use + by those authorized to give the public permission to use material in ways + otherwise restricted by copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms and conditions + of the license they choose before applying it. Licensors should also secure + all rights necessary before applying our licenses so that the public can reuse + the material as expected. Licensors should clearly mark any material not + subject to the license. This includes other CC-licensed material, or material + used under an exception or limitation to copyright. + `More considerations for licensors `__. + + * **Considerations for the public:** By using one of our public licenses, a + licensor grants the public permission to use the licensed material under + specified terms and conditions. If the licensor’s permission is not necessary + for any reason–for example, because of any applicable exception or limitation + to copyright–then that use is not regulated by the license. Our licenses grant + only permissions under copyright and certain other rights that a licensor has + authority to grant. Use of the licensed material may still be restricted for + other reasons, including because others have copyright or other rights in the + material. A licensor may make special requests, such as asking that all + changes be marked or described. Although not required by our licenses, you are + encouraged to respect those requests where reasonable. + `More considerations for the public `__. + +:xlarge:`Creative Commons Attribution 4.0 International Public License` + +By exercising the Licensed Rights (defined below), You accept and agree to be +bound by the terms and conditions of this Creative Commons Attribution 4.0 +International Public License ("Public License"). To the extent this Public +License may be interpreted as a contract, You are granted the Licensed Rights +in consideration of Your acceptance of these terms and conditions, and the +Licensor grants You such rights in consideration of benefits the Licensor +receives from making the Licensed Material available under these terms and +conditions. + +Section 1 – Definitions. +======================== + +a. **Adapted Material** means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material and in + which the Licensed Material is translated, altered, arranged, transformed, or + otherwise modified in a manner requiring permission under the Copyright and + Similar Rights held by the Licensor. For purposes of this Public License, + where the Licensed Material is a musical work, performance, or sound + recording, Adapted Material is always produced where the Licensed Material + is synched in timed relation with a moving image. + +b. **Adapter's License** means the license You apply to Your Copyright and + Similar Rights in Your contributions to Adapted Material in accordance with + the terms and conditions of this Public License. + +c. **Copyright and Similar Rights** means copyright and/or similar rights + closely related to copyright including, without limitation, performance, + broadcast, sound recording, and Sui Generis Database Rights, without regard + to how the rights are labeled or categorized. For purposes of this Public + License, the rights specified in Section 2(b)(1)-(2) are not Copyright and + Similar Rights. + +d. **Effective Technological Measures** means those measures that, in the + absence of proper authority, may not be circumvented under laws fulfilling + obligations under Article 11 of the WIPO Copyright Treaty adopted on + December 20, 1996, and/or similar international agreements. + +e. **Exceptions and Limitations** means fair use, fair dealing, and/or any + other exception or limitation to Copyright and Similar Rights that applies to + Your use of the Licensed Material. + +f. **Licensed Material** means the artistic or literary work, database, or + other material to which the Licensor applied this Public License. + +g. **Licensed Rights** means the rights granted to You subject to the terms + and conditions of this Public License, which are limited to all Copyright and + Similar Rights that apply to Your use of the Licensed Material and that the + Licensor has authority to license. + +h. **Licensor** means the individual(s) or entity(ies) granting rights under + this Public License. + +i. **Share** means to provide material to the public by any means or process + that requires permission under the Licensed Rights, such as reproduction, + public display, public performance, distribution, dissemination, + communication, or importation, and to make material available to the public + including in ways that members of the public may access the material from a + place and at a time individually chosen by them. + +j. **Sui Generis Database Rights** means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of the + Council of 11 March 1996 on the legal protection of databases, as amended + and/or succeeded, as well as other essentially equivalent rights anywhere + in the world. + +k. **You** means the individual or entity exercising the Licensed Rights + under this Public License. **Your** has a corresponding meaning. + +Section 2 – Scope. +================== + +a. **License grant.** + + 1. Subject to the terms and conditions of this Public License, the Licensor + hereby grants You a worldwide, royalty-free, non-sublicensable, + non-exclusive, irrevocable license to exercise the Licensed Rights in the + Licensed Material to: + + A. reproduce and Share the Licensed Material, in whole or in part; and + + B. produce, reproduce, and Share Adapted Material. + + 2. :underline:`Exceptions and Limitations.` For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public License does not + apply, and You do not need to comply with its terms and conditions. + + 3. :underline:`Term.` The term of this Public License is specified in Section 6(a). + + 4. :underline:`Media and formats`; :underline:`technical modifications allowed.` The Licensor + authorizes You to exercise the Licensed Rights in all media and formats + whether now known or hereafter created, and to make technical + modifications necessary to do so. The Licensor waives and/or agrees not to + assert any right or authority to forbid You from making technical + modifications necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective Technological + Measures. For purposes of this Public License, simply making modifications + authorized by this Section 2(a)(4) never produces Adapted Material. + + 5. :underline:`Downstream recipients.` + + A. :underline:`Offer from the Licensor – Licensed Material.` Every recipient of + the Licensed Material automatically receives an offer from the + Licensor to exercise the Licensed Rights under the terms and + conditions of this Public License. + + B. :underline:`No downstream restrictions.` You may not offer or impose any + additional or different terms or conditions on, or apply any Effective + Technological Measures to, the Licensed Material if doing so restricts + exercise of the Licensed Rights by any recipient of the Licensed + Material. + + 6. :underline:`No endorsement.` Nothing in this Public License constitutes or may + be construed as permission to assert or imply that You are, or that Your + use of the Licensed Material is, connected with, or sponsored, endorsed, + or granted official status by, the Licensor or others designated to + receive attribution as provided in Section 3(a)(1)(A)(i). + +b. **Other rights.** + + 1. Moral rights, such as the right of integrity, are not licensed under this + Public License, nor are publicity, privacy, and/or other similar + personality rights; however, to the extent possible, the Licensor waives + and/or agrees not to assert any such rights held by the Licensor to the + limited extent necessary to allow You to exercise the Licensed Rights, but + not otherwise. + + 2. Patent and trademark rights are not licensed under this Public License. + + 3. To the extent possible, the Licensor waives any right to collect royalties + from You for the exercise of the Licensed Rights, whether directly or + through a collecting society under any voluntary or waivable statutory or + compulsory licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + +Section 3 – License Conditions. +=============================== + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + +a. **Attribution.** + + 1. If You Share the Licensed Material (including in modified form), You must: + + A. retain the following if it is supplied by the Licensor with the + Licensed Material: + + i. identification of the creator(s) of the Licensed Material and any + others designated to receive attribution, in any reasonable manner + requested by the Licensor (including by pseudonym if designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of warranties; + + v. a URI or hyperlink to the Licensed Material to the extent reasonably + practicable; + + B. indicate if You modified the Licensed Material and retain an + indication of any previous modifications; and + + C. indicate the Licensed Material is licensed under this Public License, + and include the text of, or the URI or hyperlink to, this Public + License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner + based on the medium, means, and context in which You Share the Licensed + Material. For example, it may be reasonable to satisfy the conditions by + providing a URI or hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the information + required by Section 3(a)(1)(A) to the extent reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's License You apply + must not prevent recipients of the Adapted Material from complying with + this Public License. + +Section 4 – Sui Generis Database Rights. +======================================== + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your +use of the Licensed Material: + +a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, + reuse, reproduce, and Share all or a substantial portion of the contents of + the database; + +b. if You include all or a substantial portion of the database contents in a + database in which You have Sui Generis Database Rights, then the database + in which You have Sui Generis Database Rights (but not its individual + contents) is Adapted Material; and + +c. You must comply with the conditions in Section 3(a) if You Share all or a + substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not replace +Your obligations under this Public License where the Licensed Rights include +other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. +================================================================= + +a. **Unless otherwise separately undertaken by the Licensor, to the extent + possible, the Licensor offers the Licensed Material as-is and as-available, + and makes no representations or warranties of any kind concerning the + Licensed Material, whether express, implied, statutory, or other. This + includes, without limitation, warranties of title, merchantability, + fitness for a particular purpose, non-infringement, absence of latent or + other defects, accuracy, or the presence or absence of errors, whether or + not known or discoverable. Where disclaimers of warranties are not allowed + in full or in part, this disclaimer may not apply to You.** + +b. **To the extent possible, in no event will the Licensor be liable to You + on any legal theory (including, without limitation, negligence) or + otherwise for any direct, special, indirect, incidental, consequential, + punitive, exemplary, or other losses, costs, expenses, or damages arising + out of this Public License or use of the Licensed Material, even if the + Licensor has been advised of the possibility of such losses, costs, expenses, + or damages. Where a limitation of liability is not allowed in full or in + part, this limitation may not apply to You.** + +c. The disclaimer of warranties and limitation of liability provided above + shall be interpreted in a manner that, to the extent possible, most + closely approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination. +================================= + +a. This Public License applies for the term of the Copyright and Similar Rights + licensed here. However, if You fail to comply with this Public License, then + Your rights under this Public License terminate automatically. + +b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided it is cured + within 30 days of Your discovery of the violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any right the + Licensor may have to seek remedies for Your violations of this Public License. + +c. For the avoidance of doubt, the Licensor may also offer the Licensed Material + under separate terms or conditions or stop distributing the Licensed Material + at any time; however, doing so will not terminate this Public License. + +d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions. +======================================= + +a. The Licensor shall not be bound by any additional or different terms or + conditions communicated by You unless expressly agreed. + +b. Any arrangements, understandings, or agreements regarding the Licensed + Material not stated herein are separate from and independent of the terms + and conditions of this Public License. + +Section 8 – Interpretation. +=========================== + +a. For the avoidance of doubt, this Public License does not, and shall not be + interpreted to, reduce, limit, restrict, or impose conditions on any use of + the Licensed Material that could lawfully be made without permission under + this Public License. + +b. To the extent possible, if any provision of this Public License is deemed + unenforceable, it shall be automatically reformed to the minimum extent + necessary to make it enforceable. If the provision cannot be reformed, it + shall be severed from this Public License without affecting the + enforceability of the remaining terms and conditions. + +c. No term or condition of this Public License will be waived and no failure to + comply consented to unless expressly agreed to by the Licensor. + +d. Nothing in this Public License constitutes or may be interpreted as a + limitation upon, or waiver of, any privileges and immunities that apply to + the Licensor or You, including from the legal processes of any jurisdiction + or authority. + +------------------ + +Creative Commons is not a party to its public licenses. Notwithstanding, +Creative Commons may elect to apply one of its public licenses to material it +publishes and in those instances will be considered the “Licensor.” Except for +the limited purpose of indicating that material is shared under a Creative +Commons public license or as otherwise permitted by the Creative Commons +policies published at `creativecommons.org/policies `__, +Creative Commons does not authorize the use of the trademark “Creative Commons” +or any other trademark or logo of Creative Commons without its prior written +consent including, without limitation, in connection with any unauthorized +modifications to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For the +avoidance of doubt, this paragraph does not form part of the public licenses. + +Creative Commons may be contacted at `creativecommons.org `__ diff --git a/_sources/FileTypes/index.rst.txt b/_sources/FileTypes/index.rst.txt new file mode 100644 index 00000000..bcf61f96 --- /dev/null +++ b/_sources/FileTypes/index.rst.txt @@ -0,0 +1,50 @@ +.. _filetypes: + +File Types +########## + +.. rubric:: Design Goals + +TBD + +Content Types +============= + +.. mermaid:: + + graph TD; + HRC[HumanReadableContent] --> XMLC[XMLContent]; + HRC --> YAMLC[YAMLContent]; + HRC --> JSONC[JSONContent]; + HRC --> INIC[INIContent]; + HRC --> TOMLC[TOMLContent]; + HRC --> TCLC[TCLContent] --> SDCC[SDCContent]; + + +Overall Hierarchy +================= + +.. mermaid:: + + graph TD; + File-->TextFile; + File-->LogFile; + File-->XMLFile; + File--->SourceFile; + File-->ConstraintFile; + File-->ProjectFile; + File-->SettingFile; + SourceFile-->HDLSourceFile; + SourceFile-->NetlistFile; + NetlistFile-->EDIFNetlistFile; + HDLSourceFile-->VHDLSourceFile; + HDLSourceFile-->VerilogSourceFile; + HDLSourceFile-->SystemVerilogSourceFile; + SourceFile-->PythonSourceFile; + PythonSourceFile-->CocotbSourceFile + SourceFile-->CSourceFile; + SourceFile-->CppSourceFile; + +.. # + autoclasstree:: pyEDAA.ProjectModel.Design + :full: diff --git a/_sources/Glossary.rst.txt b/_sources/Glossary.rst.txt new file mode 100644 index 00000000..955197ce --- /dev/null +++ b/_sources/Glossary.rst.txt @@ -0,0 +1,45 @@ +Glossary +######## + +.. glossary:: + + LRM + *Language Reference Manual* is the name given to IEEE Standard documents defining Hardware Description Languages: + + * VHDL LRM revisions: + + * `1076-2019 `__. + * `1076-2008 `__ aka IEC 61691-1-1:2011. + * `1076-2002 `__ aka IEC 61691-1-1 Ed.1 (2004-10). + * `1076-2000 `__. + * `1076-1993 `__. + * `1076-1987 `__. + + * Verilog LRM revisions: + + *TBC* + + * System Verilog LRM revisions: + + *TBC* + + base-class + An ancestor class for other derived classes. + + File + A representation of a physical file. + + FileSet + A group of files. + + Default fileset + If no fileset is specified, the pre-existing fileset named ``default`` is used to group files. + + VHDLLibrary + A namespace in VHDL to group and organize VHDL design units (entity, package, configuration, context). + + Design + A ... + + Project + A ... diff --git a/_sources/Installation.rst.txt b/_sources/Installation.rst.txt new file mode 100644 index 00000000..77c65b60 --- /dev/null +++ b/_sources/Installation.rst.txt @@ -0,0 +1,60 @@ +.. _installation: + +Installation/Updates +#################### + +.. note:: + + Python ≥3.7 is required for this package due to problems with meta classes and + ``__getattr__`` in Python 3.6. + +.. _installation-pip: + +Using PIP +********* + +Installation from PyPI using PIP +================================ + +.. code-block:: bash + + pip3 install pyEDAA.ProjectModel + + +Updating from PyPI using PIP +============================ + +.. code-block:: bash + + pip3 install -U pyEDAA.ProjectModel + + +Uninstallation using PIP +======================== + +.. code-block:: bash + + pip3 uninstall pyEDAA.ProjectModel + + +Installation from local directory using PIP +=========================================== + +.. code-block:: bash + + pip3 install . + + +.. _installation-setup: + +Using ``setup.py`` (legacy) +*************************** + +See sections above on how to use PIP. + +Installation using ``setup.py`` +=============================== + +.. code-block:: bash + + setup.py install diff --git a/_sources/License.rst.txt b/_sources/License.rst.txt new file mode 100644 index 00000000..fba66a20 --- /dev/null +++ b/_sources/License.rst.txt @@ -0,0 +1,140 @@ +.. _SRCLICENSE: + +.. Note:: This is a local copy of the `Apache License Version 2.0 `__. + +.. Attention:: This **Apache License, 2.0** applies to all **source and configuration files of project**, **except documentation**. + +Apache License 2.0 +################## + +Version 2.0, January 2004 + +:xlarge:`TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION` + + +1. Definitions. +=============== +**"License"** shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +**"Licensor"** shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +**"Legal Entity"** shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that +entity. For the purposes of this definition, **"control"** means (i) the power, direct or indirect, to cause the direction or management of such entity, whether +by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +**"You"** (or **"Your"**) shall mean an individual or Legal Entity exercising permissions granted by this License. + +**"Source"** form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and +configuration files. + +**"Object"** form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object +code, generated documentation, and conversions to other media types. + +**"Work"** shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is +included in or attached to the work (an example is provided in the Appendix below). + +**"Derivative Works"** shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +**"Contribution"** shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative +Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to +submit on behalf of the copyright owner. For the purposes of this definition, **"submitted"** means any form of electronic, verbal, or written communication +sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue +tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is +conspicuously marked or otherwise designated in writing by the copyright owner as **"Not a Contribution."** + +**"Contributor"** shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. +============================== +Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. +=========================== +Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such +license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of +their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim +or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then +any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. +================== +You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +* You must give any other recipients of the Work or Derivative Works a copy of this License; and +* You must cause any modified files to carry prominent notices stating that You changed the files; and +* You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source + form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and +* If the Work includes a **"NOTICE"** text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the + attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the + following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the + Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE + file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, + alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise +complies with the conditions stated in this License. + +5. Submission of Contributions. +=============================== +Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any +separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. +============== +This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable +and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. +========================== +Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, +MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and +assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. +=========================== +In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or +consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages +for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been +advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. +============================================== +While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other +liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole +responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +:xlarge:`Appendix: How to apply the Apache License to your work` + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying +information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or +class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +.. code-block:: none + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/_sources/ProjectModel/Design.rst.txt b/_sources/ProjectModel/Design.rst.txt new file mode 100644 index 00000000..bc6c2b80 --- /dev/null +++ b/_sources/ProjectModel/Design.rst.txt @@ -0,0 +1,108 @@ +.. _projectmodel-design: + +Design +###### + +Generic description of an EDA design. + +.. todo:: + + Write documentation. + + +.. rubric:: Class Relationship + +.. mermaid:: + + graph TD; + Project --> Design; + Design --> VHDLLibrary; + Design --> FileSet; + VHDLLibrary --> File; + FileSet --> File + + style Design fill:#ee9b00 + + +Condensed definition of class :class:`~pyEDAA.ProjectModel.Design` +================================================================== + +.. code-block:: Python + + @export + class Design: + _name: str + _project: Nullable['Project'] + _directory: Nullable[Path] + _fileSets: Dict[str, FileSet] + _defaultFileSet: Nullable[FileSet] + _vhdlLibraries: Dict[str, VHDLLibrary] + _vhdlVersion: VHDLVersion + _verilogVersion: VerilogVersion + _svVersion: SystemVerilogVersion + _externalVHDLLibraries: List + + def __init__( + self, + name: str, + directory: Path = Path("."), + project: 'Project' = None, + vhdlVersion: VHDLVersion = None, + verilogVersion: VerilogVersion = None, + svVersion: SystemVerilogVersion = None + ): + + @property + def Name(self) -> str: + + @property + def Project(self) -> Nullable['Project']: + @Project.setter + def Project(self, value: 'Project') -> None: + + @property + def Directory(self) -> Path: + @Directory.setter + def Directory(self, value: Path) -> None: + + @property + def ResolvedPath(self) -> Path: + + @property + def DefaultFileSet(self) -> FileSet: + @DefaultFileSet.setter + def DefaultFileSet(self, value: Union[str, FileSet]) -> None: + + @property + def FileSets(self) -> Dict[str, FileSet]: + + def Files(self, fileType: FileType = FileTypes.Any, fileSet: Union[str, FileSet] = None) -> Generator[File, None, None]: + + @property + def VHDLLibraries(self) -> List[VHDLLibrary]: + + @property + def VHDLVersion(self) -> VHDLVersion: + @VHDLVersion.setter + def VHDLVersion(self, value: VHDLVersion) -> None: + + @property + def VerilogVersion(self) -> VerilogVersion: + @VerilogVersion.setter + def VerilogVersion(self, value: VerilogVersion) -> None: + + @property + def SVVersion(self) -> SystemVerilogVersion: + @SVVersion.setter + def SVVersion(self, value: SystemVerilogVersion) -> None: + + @property + def ExternalVHDLLibraries(self) -> List: + + def AddFileSet(self, fileSet: FileSet) -> None: + + def AddFileSets(self, fileSets: Iterable[FileSet]) -> None: + + def AddFile(self, file: File) -> None: + + def AddFiles(self, files: Iterable[File]) -> None: diff --git a/_sources/ProjectModel/File.rst.txt b/_sources/ProjectModel/File.rst.txt new file mode 100644 index 00000000..063cf66d --- /dev/null +++ b/_sources/ProjectModel/File.rst.txt @@ -0,0 +1,69 @@ +.. _projectmodel-file: + +File +#### + +Generic description of a file in EDA design. + +.. todo:: + + Write documentation. + + +.. rubric:: Class Relationship + +.. mermaid:: + + graph TD; + Project --> Design; + Design --> VHDLLibrary; + Design --> FileSet; + VHDLLibrary --> File; + FileSet --> File + + style File fill:#ee9b00 + + +Condensed definition of class :class:`~pyEDAA.ProjectModel.File` +================================================================ + +.. code-block:: Python + + @export + class File(metaclass=FileType): + _path: Path + _project: Nullable['Project'] + _design: Nullable['Design'] + _fileSet: Nullable['FileSet'] + + def __init__( + self, + path: Path, + project: 'Project' = None, + design: 'Design' = None, + fileSet: 'FileSet' = None + ): + + @property + def FileType(self) -> 'FileType': + + @property + def Path(self) -> Path: + + @property + def ResolvedPath(self) -> Path: + + @property + def Project(self) -> Nullable['Project']: + @Project.setter + def Project(self, value: 'Project') -> None: + + @property + def Design(self) -> Nullable['Design']: + @Design.setter + def Design(self, value: 'Design') -> None: + + @property + def FileSet(self) -> Nullable['FileSet']: + @FileSet.setter + def FileSet(self, value: 'FileSet') -> None: diff --git a/_sources/ProjectModel/FileSet.rst.txt b/_sources/ProjectModel/FileSet.rst.txt new file mode 100644 index 00000000..b63e06d1 --- /dev/null +++ b/_sources/ProjectModel/FileSet.rst.txt @@ -0,0 +1,113 @@ +.. _projectmodel-fileset: + +FileSet +####### + +Generic description of an EDA file set (group of files). + +.. todo:: + + Write documentation. + + +.. rubric:: Class Relationship + +.. mermaid:: + + graph TD; + Project --> Design; + Design --> VHDLLibrary; + Design --> FileSet; + VHDLLibrary --> File; + FileSet --> File + + style FileSet fill:#ee9b00 + + +Condensed definition of class :class:`~pyEDAA.ProjectModel.FileSet` +=================================================================== + +.. code-block:: Python + + @export + class FileSet: + _name: str + _project: Nullable['Project'] + _design: Nullable['Design'] + _directory: Nullable[Path] + _parent: Nullable['FileSet'] + _fileSets: Dict[str, 'FileSet'] + _files: List[File] + + _vhdlLibrary: 'VHDLLibrary' + _vhdlVersion: VHDLVersion + _verilogVersion: VerilogVersion + _svVersion: SystemVerilogVersion + + def __init__( + self, + name: str, + directory: Path = Path("."), + project: 'Project' = None, + design: 'Design' = None, + parent: Nullable['FileSet'] = None, + vhdlLibrary: Union[str, 'VHDLLibrary'] = None, + vhdlVersion: VHDLVersion = None, + verilogVersion: VerilogVersion = None, + svVersion: SystemVerilogVersion = None + ): + + @property + def Name(self) -> str: + + @property + def Project(self) -> Nullable['Project']: + @Project.setter + def Project(self, value: 'Project') -> None: + + @property + def Design(self) -> Nullable['Design']: + @Design.setter + def Design(self, value: 'Design') -> None: + + @property + def Directory(self) -> Path: + @Directory.setter + def Directory(self, value: Path) -> None: + + @property + def ResolvedPath(self) -> Path: + + @property + def Parent(self) -> Nullable['FileSet']: + @Parent.setter + def Parent(self, value: 'FileSet') -> None: + + @property + def FileSets(self) -> Dict[str, 'FileSet']: + + def Files(self, fileType: FileType = FileTypes.Any, fileSet: Union[str, 'FileSet'] = None) -> Generator[File, None, None]: + + def AddFile(self, file: File) -> None: + + def AddFiles(self, files: Iterable[File]) -> None: + + @property + def VHDLLibrary(self) -> 'VHDLLibrary': + @VHDLLibrary.setter + def VHDLLibrary(self, value: 'VHDLLibrary') -> None: + + @property + def VHDLVersion(self) -> VHDLVersion: + @VHDLVersion.setter + def VHDLVersion(self, value: VHDLVersion) -> None: + + @property + def VerilogVersion(self) -> VerilogVersion: + @VerilogVersion.setter + def VerilogVersion(self, value: VerilogVersion) -> None: + + @property + def SVVersion(self) -> SystemVerilogVersion: + @SVVersion.setter + def SVVersion(self, value: SystemVerilogVersion) -> None: diff --git a/_sources/ProjectModel/Project.rst.txt b/_sources/ProjectModel/Project.rst.txt new file mode 100644 index 00000000..cc0b2022 --- /dev/null +++ b/_sources/ProjectModel/Project.rst.txt @@ -0,0 +1,77 @@ +.. _projectmodel-project: + +Project +####### + +Generic description of an EDA project. + +.. todo:: + + Write documentation. + + +.. rubric:: Class Relationship + +.. mermaid:: + + graph TD; + Project --> Design; + Design --> VHDLLibrary; + Design --> FileSet; + VHDLLibrary --> File; + FileSet --> File + + style Project fill:#ee9b00 + + +Condensed definition of class :class:`~pyEDAA.ProjectModel.Project` +=================================================================== + +.. code-block:: Python + + @export + class Project: + _name: str + _rootDirectory: Nullable[Path] + _designs: Dict[str, Design] + _vhdlVersion: VHDLVersion + _verilogVersion: VerilogVersion + _svVersion: SystemVerilogVersion + + def __init__( + self, + name: str, + rootDirectory: Path = Path("."), + vhdlVersion: VHDLVersion = None, + verilogVersion: VerilogVersion = None, + svVersion: SystemVerilogVersion = None + ): + + @property + def Name(self) -> str: + + @property + def RootDirectory(self) -> Path: + @RootDirectory.setter + def RootDirectory(self, value: Path) -> None: + + @property + def ResolvedPath(self) -> Path: + + @property + def Designs(self) -> Dict[str, Design]: + + @property + def VHDLVersion(self) -> VHDLVersion: + @VHDLVersion.setter + def VHDLVersion(self, value: VHDLVersion) -> None: + + @property + def VerilogVersion(self) -> VerilogVersion: + @VerilogVersion.setter + def VerilogVersion(self, value: VerilogVersion) -> None: + + @property + def SVVersion(self) -> SystemVerilogVersion: + @SVVersion.setter + def SVVersion(self, value: SystemVerilogVersion) -> None: diff --git a/_sources/ProjectModel/VHDLLibrary.rst.txt b/_sources/ProjectModel/VHDLLibrary.rst.txt new file mode 100644 index 00000000..fe4e8b02 --- /dev/null +++ b/_sources/ProjectModel/VHDLLibrary.rst.txt @@ -0,0 +1,67 @@ +.. _projectmodel-vhdllib: + +VHDL Library +############ + +Generic description of a VHDL library (group of VHDL files containing VHDL primary units). + +.. todo:: + + Write documentation. + + +.. rubric:: Class Relationship + +.. mermaid:: + + graph TD; + Project --> Design; + Design --> VHDLLibrary; + Design --> FileSet; + VHDLLibrary --> File; + FileSet --> File + + style VHDLLibrary fill:#ee9b00 + + +Condensed definition of class :class:`~pyEDAA.ProjectModel.VHDLLibrary` +======================================================================= + +.. code-block:: Python + + @export + class VHDLLibrary: + _name: str + _project: Nullable['Project'] + _design: Nullable['Design'] + _files: List[File] + _vhdlVersion: VHDLVersion + + def __init__( + self, + name: str, + project: 'Project' = None, + design: 'Design' = None, + vhdlVersion: VHDLVersion = None + ): + + @property + def Name(self) -> str: + + @property + def Project(self) -> Nullable['Project']: + @Project.setter + def Project(self, value: 'Project'): + + @property + def Design(self) -> Nullable['Design']: + @Design.setter + def Design(self, value: 'Design'): + + @property + def Files(self) -> Generator[File, None, None]: + + @property + def VHDLVersion(self) -> VHDLVersion: + @VHDLVersion.setter + def VHDLVersion(self, value: VHDLVersion) -> None: diff --git a/_sources/ProjectModel/index.rst.txt b/_sources/ProjectModel/index.rst.txt new file mode 100644 index 00000000..4c840943 --- /dev/null +++ b/_sources/ProjectModel/index.rst.txt @@ -0,0 +1,43 @@ +.. _projectmodel: + +Project Model +############# + +.. rubric:: Design Goals + +* Clearly named classes that model the semantics of an EDA project. +* Child objects shall have a reference to their parent. + + +.. rubric:: Overall Hierarchy + +An EDA project contains one or multiple variants of a EDA design. +A design then has at least one but usually multiple file sets to group source files and apply settings or attributes to that group. + +.. mermaid:: + + graph TD; + Project-->Design_A; + Project-->Design_B; + Design_A-->VHDLLibrary_LA; + Design_A-->FileSet_DefaultA; + Design_A-->FileSet_A1; + Design_A-->FileSet_A2; + FileSet_A2-->FileSet_3 + Design_B-->VHDLLibrary_LB; + Design_B-->FileSet_DefaultB; + Design_B-->FileSet_B1; + Design_B-->FileSet_B2; + FileSet_B2-->FileSet_3 + + +.. rubric:: Elements of the Project Model + +.. toctree:: + :maxdepth: 1 + + Project + Design + VHDLLibrary + FileSet + File diff --git a/_sources/coverage/index.rst.txt b/_sources/coverage/index.rst.txt new file mode 100644 index 00000000..80bbad2e --- /dev/null +++ b/_sources/coverage/index.rst.txt @@ -0,0 +1,4 @@ +Coverage Report +############### + +*Placeholder for the Coverage report generated with* ``pytest`` *and* ``coverage``. diff --git a/_sources/genindex.rst.txt b/_sources/genindex.rst.txt new file mode 100644 index 00000000..c07da40d --- /dev/null +++ b/_sources/genindex.rst.txt @@ -0,0 +1,4 @@ +.. This file is a placeholder and will be replaced + +Index +##### diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 00000000..99bce7b0 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,186 @@ +.. include:: shields.inc + +.. image:: _static/logo_on_light.svg + :height: 90 px + :align: center + :target: https://GitHub.com/edaa-org/pyEDAA.ProjectModel + +.. raw:: html + +
+ +.. raw:: latex + + \part{Introduction} + +.. only:: html + + | |SHIELD:svg:ProjectModel-github| |SHIELD:svg:ProjectModel-src-license| |SHIELD:svg:ProjectModel-ghp-doc| |SHIELD:svg:ProjectModel-doc-license| |SHIELD:svg:ProjectModel-gitter| + | |SHIELD:svg:ProjectModel-pypi-tag| |SHIELD:svg:ProjectModel-pypi-status| |SHIELD:svg:ProjectModel-pypi-python| + | |SHIELD:svg:ProjectModel-gha-test| |SHIELD:svg:ProjectModel-lib-status| |SHIELD:svg:ProjectModel-codacy-quality| |SHIELD:svg:ProjectModel-codacy-coverage| |SHIELD:svg:ProjectModel-codecov-coverage| + +.. Disabled shields: |SHIELD:svg:ProjectModel-lib-dep| |SHIELD:svg:ProjectModel-req-status| |SHIELD:svg:ProjectModel-lib-rank| + +.. only:: latex + + |SHIELD:png:ProjectModel-github| |SHIELD:png:ProjectModel-src-license| |SHIELD:png:ProjectModel-ghp-doc| |SHIELD:png:ProjectModel-doc-license| |SHIELD:svg:ProjectModel-gitter| + |SHIELD:png:ProjectModel-pypi-tag| |SHIELD:png:ProjectModel-pypi-status| |SHIELD:png:ProjectModel-pypi-python| + |SHIELD:png:ProjectModel-gha-test| |SHIELD:png:ProjectModel-lib-status| |SHIELD:png:ProjectModel-codacy-quality| |SHIELD:png:ProjectModel-codacy-coverage| |SHIELD:png:ProjectModel-codecov-coverage| + +.. Disabled shields: |SHIELD:png:ProjectModel-lib-dep| |SHIELD:png:ProjectModel-req-status| |SHIELD:png:ProjectModel-lib-rank| + +-------------------------------------------------------------------------------- + +The pyEDAA.ProjectModel Documentation +##################################### + +An abstract model of HDL design projects and EDA tooling. + + +.. _goals: + +Main Goals +********** + +This package provides a unified abstract project model for HDL designs and EDA tools. +Third-party frameworks can derive own classes and implement additional logic to create a concrete project model for +their tools. + +Frameworks consuming this model can build higher level features and services on top of such a model, while supporting +multiple input sources. + + +.. _usecase: + +Use Cases +********* + +* Describing HDL projects for open source simulation and synthesis tools: + `GHDL `__, + `Icarus Verilog `__, + `Verilator `__, + `Yosys `__, + `Verilog to Routing (VTR) `__, + `nextpnr `__, + etc. +* Managing IP cores and projects with `pyIPCMI `__. + + +.. _news: + +News +**** + +.. only:: html + + Oct. 2021 - Reading ``*.xpr`` and ``*.pro`` Files + ================================================= + +.. only:: latex + + .. rubric:: Reading ``*.xpr`` and ``*.pro`` Files + +* Xilinx Vivado's ``*.xpr`` and OSVVM's ``*.pro`` files can now be read. +* Filesets can be nested. +* The dataset can be validated. + + +.. only:: html + + Sep. 2021 - Extracted ProjectModel from pyIPCMI + =============================================== + +.. only:: latex + + .. rubric:: Extracted ProjectModel from pyIPCMI + +* The project model has been extracted from `pyIPCMI `__. +* ProjectModel became first citizen of `EDA² `__ and got integrated into the `pyEDAA` namespace at PyPI. + + +.. _CONTRIBUTORS: + +Contributors +************ + +* `Patrick Lehmann `__ (Maintainer) +* `Unai Martinez-Corral `__ (Maintainer) +* `and more... `__ + + +.. _LICENSE: + +License +******* + +.. only:: html + + This Python package (source code) is licensed under `Apache License 2.0 `__. |br| + The accompanying documentation is licensed under `Creative Commons - Attribution 4.0 (CC-BY 4.0) `__. + +.. only:: latex + + This Python package (source code) is licensed under **Apache License 2.0**. |br| + The accompanying documentation is licensed under **Creative Commons - Attribution 4.0 (CC-BY 4.0)**. + +------------------------------------ + +.. |docdate| date:: %d.%b %Y - %H:%M + +.. only:: html + + This document was generated on |docdate|. + + +.. toctree:: + :hidden: + + Used as a layer of EDA² ➚ + + +.. toctree:: + :caption: Introduction + :hidden: + + Installation + Dependency + + +.. raw:: latex + + \part{Main Documentation} + +.. toctree:: + :caption: Main Documentation + :hidden: + + ProjectModel/index + FileTypes/index + + +.. raw:: latex + + \part{References} + +.. toctree:: + :caption: References + :hidden: + + pyEDAA.ProjectModel/index + + +.. raw:: latex + + \part{Appendix} + +.. toctree:: + :caption: Appendix + :hidden: + + Coverage Report ➚ + Static Type Check Report ➚ + License + Doc-License + Glossary + genindex + py-modindex diff --git a/_sources/py-modindex.rst.txt b/_sources/py-modindex.rst.txt new file mode 100644 index 00000000..23167be6 --- /dev/null +++ b/_sources/py-modindex.rst.txt @@ -0,0 +1,4 @@ +.. This file is a placeholder and will be replaced + +Module Index +############ diff --git a/_sources/pyEDAA.ProjectModel/index.rst.txt b/_sources/pyEDAA.ProjectModel/index.rst.txt new file mode 100644 index 00000000..118a264a --- /dev/null +++ b/_sources/pyEDAA.ProjectModel/index.rst.txt @@ -0,0 +1,8 @@ +Python Class Reference +###################### + +Reference of all packages and modules: + +.. toctree:: + + pyEDAA.ProjectModel diff --git a/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.Quartus.rst.txt b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.Quartus.rst.txt new file mode 100644 index 00000000..6daa1fec --- /dev/null +++ b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.Quartus.rst.txt @@ -0,0 +1,36 @@ +.. # Template modified by Patrick Lehmann + * removed automodule on top, because private members are activated for autodoc (no doubled documentation). + * Made sections like 'submodules' bold text, but no headlines to reduce number of ToC levels. + +====================================== +``pyEDAA.ProjectModel.Altera.Quartus`` +====================================== + +.. py:module:: pyEDAA.ProjectModel.Altera.Quartus + + +.. currentmodule:: pyEDAA.ProjectModel.Altera.Quartus + + +**Classes** + +- :py:class:`QuartusProjectFile`: + A Quartus project file (``*.qpf``). + +- :py:class:`SDCConstraintFile`: + A Quartus constraint file (Synopsys Design Constraints; ``*.sdc``). + + +.. autoclass:: QuartusProjectFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: QuartusProjectFile + :parts: 1 + +.. autoclass:: SDCConstraintFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: SDCConstraintFile + :parts: 1 diff --git a/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.rst.txt b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.rst.txt new file mode 100644 index 00000000..b0014038 --- /dev/null +++ b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.rst.txt @@ -0,0 +1,20 @@ +.. # Template modified by Patrick Lehmann + * removed automodule on top, because private members are activated for autodoc (no doubled documentation). + * Made sections like 'submodules' bold text, but no headlines to reduce number of ToC levels. + +============================== +``pyEDAA.ProjectModel.Altera`` +============================== + +.. py:module:: pyEDAA.ProjectModel.Altera + + + +**Submodules** + + +.. toctree:: + + pyEDAA.ProjectModel.Altera.Quartus + +.. currentmodule:: pyEDAA.ProjectModel.Altera diff --git a/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Attributes.rst.txt b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Attributes.rst.txt new file mode 100644 index 00000000..82c84cec --- /dev/null +++ b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Attributes.rst.txt @@ -0,0 +1,26 @@ +.. # Template modified by Patrick Lehmann + * removed automodule on top, because private members are activated for autodoc (no doubled documentation). + * Made sections like 'submodules' bold text, but no headlines to reduce number of ToC levels. + +================================== +``pyEDAA.ProjectModel.Attributes`` +================================== + +.. py:module:: pyEDAA.ProjectModel.Attributes + + +.. currentmodule:: pyEDAA.ProjectModel.Attributes + + +**Classes** + +- :py:class:`KeyValueAttribute`: + Undocumented. + + +.. autoclass:: KeyValueAttribute + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: KeyValueAttribute + :parts: 1 diff --git a/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.GHDL.rst.txt b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.GHDL.rst.txt new file mode 100644 index 00000000..2a9c44f6 --- /dev/null +++ b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.GHDL.rst.txt @@ -0,0 +1,26 @@ +.. # Template modified by Patrick Lehmann + * removed automodule on top, because private members are activated for autodoc (no doubled documentation). + * Made sections like 'submodules' bold text, but no headlines to reduce number of ToC levels. + +============================ +``pyEDAA.ProjectModel.GHDL`` +============================ + +.. py:module:: pyEDAA.ProjectModel.GHDL + + +.. currentmodule:: pyEDAA.ProjectModel.GHDL + + +**Classes** + +- :py:class:`GHDLWaveformFile`: + GHDL's waveform file (``*.ghw``) supporting VHDL and Verilog simulation results. + + +.. autoclass:: GHDLWaveformFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: GHDLWaveformFile + :parts: 1 diff --git a/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.QuartusPrime.rst.txt b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.QuartusPrime.rst.txt new file mode 100644 index 00000000..dda32146 --- /dev/null +++ b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.QuartusPrime.rst.txt @@ -0,0 +1,36 @@ +.. # Template modified by Patrick Lehmann + * removed automodule on top, because private members are activated for autodoc (no doubled documentation). + * Made sections like 'submodules' bold text, but no headlines to reduce number of ToC levels. + +========================================== +``pyEDAA.ProjectModel.Intel.QuartusPrime`` +========================================== + +.. py:module:: pyEDAA.ProjectModel.Intel.QuartusPrime + + +.. currentmodule:: pyEDAA.ProjectModel.Intel.QuartusPrime + + +**Classes** + +- :py:class:`QuartusProjectFile`: + A Quartus project file (``*.qpf``). + +- :py:class:`SDCConstraintFile`: + A Quartus constraint file (Synopsys Design Constraints; ``*.sdc``). + + +.. autoclass:: QuartusProjectFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: QuartusProjectFile + :parts: 1 + +.. autoclass:: SDCConstraintFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: SDCConstraintFile + :parts: 1 diff --git a/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.rst.txt b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.rst.txt new file mode 100644 index 00000000..7ee5c6ce --- /dev/null +++ b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.rst.txt @@ -0,0 +1,20 @@ +.. # Template modified by Patrick Lehmann + * removed automodule on top, because private members are activated for autodoc (no doubled documentation). + * Made sections like 'submodules' bold text, but no headlines to reduce number of ToC levels. + +============================= +``pyEDAA.ProjectModel.Intel`` +============================= + +.. py:module:: pyEDAA.ProjectModel.Intel + + + +**Submodules** + + +.. toctree:: + + pyEDAA.ProjectModel.Intel.QuartusPrime + +.. currentmodule:: pyEDAA.ProjectModel.Intel diff --git a/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.ModelSim.rst.txt b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.ModelSim.rst.txt new file mode 100644 index 00000000..7f78d569 --- /dev/null +++ b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.ModelSim.rst.txt @@ -0,0 +1,46 @@ +.. # Template modified by Patrick Lehmann + * removed automodule on top, because private members are activated for autodoc (no doubled documentation). + * Made sections like 'submodules' bold text, but no headlines to reduce number of ToC levels. + +=============================================== +``pyEDAA.ProjectModel.MentorGraphics.ModelSim`` +=============================================== + +.. py:module:: pyEDAA.ProjectModel.MentorGraphics.ModelSim + + +.. currentmodule:: pyEDAA.ProjectModel.MentorGraphics.ModelSim + + +**Classes** + +- :py:class:`ModelSimProjectFile`: + Base-class of all tool-specific project files. + +- :py:class:`ModelSimINIFile`: + Base-class of all tool-specific setting files. + +- :py:class:`WaveDoFile`: + Base-class of all tool-specific waveform configuration files. + + +.. autoclass:: ModelSimProjectFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: ModelSimProjectFile + :parts: 1 + +.. autoclass:: ModelSimINIFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: ModelSimINIFile + :parts: 1 + +.. autoclass:: WaveDoFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: WaveDoFile + :parts: 1 diff --git a/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.QuestaSim.rst.txt b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.QuestaSim.rst.txt new file mode 100644 index 00000000..a2037c55 --- /dev/null +++ b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.QuestaSim.rst.txt @@ -0,0 +1,46 @@ +.. # Template modified by Patrick Lehmann + * removed automodule on top, because private members are activated for autodoc (no doubled documentation). + * Made sections like 'submodules' bold text, but no headlines to reduce number of ToC levels. + +================================================ +``pyEDAA.ProjectModel.MentorGraphics.QuestaSim`` +================================================ + +.. py:module:: pyEDAA.ProjectModel.MentorGraphics.QuestaSim + + +.. currentmodule:: pyEDAA.ProjectModel.MentorGraphics.QuestaSim + + +**Classes** + +- :py:class:`ModelSimProjectFile`: + Base-class of all tool-specific project files. + +- :py:class:`ModelSimINIFile`: + Base-class of all tool-specific setting files. + +- :py:class:`WaveDoFile`: + Base-class of all tool-specific waveform configuration files. + + +.. autoclass:: ModelSimProjectFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: ModelSimProjectFile + :parts: 1 + +.. autoclass:: ModelSimINIFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: ModelSimINIFile + :parts: 1 + +.. autoclass:: WaveDoFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: WaveDoFile + :parts: 1 diff --git a/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.rst.txt b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.rst.txt new file mode 100644 index 00000000..2ea420ee --- /dev/null +++ b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.rst.txt @@ -0,0 +1,21 @@ +.. # Template modified by Patrick Lehmann + * removed automodule on top, because private members are activated for autodoc (no doubled documentation). + * Made sections like 'submodules' bold text, but no headlines to reduce number of ToC levels. + +====================================== +``pyEDAA.ProjectModel.MentorGraphics`` +====================================== + +.. py:module:: pyEDAA.ProjectModel.MentorGraphics + + + +**Submodules** + + +.. toctree:: + + pyEDAA.ProjectModel.MentorGraphics.ModelSim + pyEDAA.ProjectModel.MentorGraphics.QuestaSim + +.. currentmodule:: pyEDAA.ProjectModel.MentorGraphics diff --git a/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.OSVVM.rst.txt b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.OSVVM.rst.txt new file mode 100644 index 00000000..59c9f259 --- /dev/null +++ b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.OSVVM.rst.txt @@ -0,0 +1,26 @@ +.. # Template modified by Patrick Lehmann + * removed automodule on top, because private members are activated for autodoc (no doubled documentation). + * Made sections like 'submodules' bold text, but no headlines to reduce number of ToC levels. + +============================= +``pyEDAA.ProjectModel.OSVVM`` +============================= + +.. py:module:: pyEDAA.ProjectModel.OSVVM + + +.. currentmodule:: pyEDAA.ProjectModel.OSVVM + + +**Classes** + +- :py:class:`OSVVMProjectFile`: + An OSVVM project file (``*.pro``). + + +.. autoclass:: OSVVMProjectFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: OSVVMProjectFile + :parts: 1 diff --git a/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.VHDL.rst.txt b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.VHDL.rst.txt new file mode 100644 index 00000000..127c1981 --- /dev/null +++ b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.VHDL.rst.txt @@ -0,0 +1,12 @@ +.. # Template modified by Patrick Lehmann + * removed automodule on top, because private members are activated for autodoc (no doubled documentation). + * Made sections like 'submodules' bold text, but no headlines to reduce number of ToC levels. + +============================ +``pyEDAA.ProjectModel.VHDL`` +============================ + +.. py:module:: pyEDAA.ProjectModel.VHDL + + +.. currentmodule:: pyEDAA.ProjectModel.VHDL diff --git a/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Verilog.rst.txt b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Verilog.rst.txt new file mode 100644 index 00000000..0c626261 --- /dev/null +++ b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Verilog.rst.txt @@ -0,0 +1,26 @@ +.. # Template modified by Patrick Lehmann + * removed automodule on top, because private members are activated for autodoc (no doubled documentation). + * Made sections like 'submodules' bold text, but no headlines to reduce number of ToC levels. + +=============================== +``pyEDAA.ProjectModel.Verilog`` +=============================== + +.. py:module:: pyEDAA.ProjectModel.Verilog + + +.. currentmodule:: pyEDAA.ProjectModel.Verilog + + +**Classes** + +- :py:class:`ValueChangeDumpFile`: + Verilog's waveform file (``*.vcd``) for exchanging value changes as defined by IEEE Std. 1364. + + +.. autoclass:: ValueChangeDumpFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: ValueChangeDumpFile + :parts: 1 diff --git a/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.ISE.rst.txt b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.ISE.rst.txt new file mode 100644 index 00000000..b9518792 --- /dev/null +++ b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.ISE.rst.txt @@ -0,0 +1,36 @@ +.. # Template modified by Patrick Lehmann + * removed automodule on top, because private members are activated for autodoc (no doubled documentation). + * Made sections like 'submodules' bold text, but no headlines to reduce number of ToC levels. + +================================== +``pyEDAA.ProjectModel.Xilinx.ISE`` +================================== + +.. py:module:: pyEDAA.ProjectModel.Xilinx.ISE + + +.. currentmodule:: pyEDAA.ProjectModel.Xilinx.ISE + + +**Classes** + +- :py:class:`ISEProjectFile`: + Base-class of all tool-specific project files. + +- :py:class:`UCFConstraintFile`: + Base-class of all constraint files. + + +.. autoclass:: ISEProjectFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: ISEProjectFile + :parts: 1 + +.. autoclass:: UCFConstraintFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: UCFConstraintFile + :parts: 1 diff --git a/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.Vivado.rst.txt b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.Vivado.rst.txt new file mode 100644 index 00000000..2cd98c6b --- /dev/null +++ b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.Vivado.rst.txt @@ -0,0 +1,106 @@ +.. # Template modified by Patrick Lehmann + * removed automodule on top, because private members are activated for autodoc (no doubled documentation). + * Made sections like 'submodules' bold text, but no headlines to reduce number of ToC levels. + +===================================== +``pyEDAA.ProjectModel.Xilinx.Vivado`` +===================================== + +.. py:module:: pyEDAA.ProjectModel.Xilinx.Vivado + + +.. currentmodule:: pyEDAA.ProjectModel.Xilinx.Vivado + + +**Classes** + +- :py:class:`UsedInAttribute`: + Undocumented. + +- :py:class:`File`: + A :term:`File` represents a file in a design. This :term:`base-class` is used + +- :py:class:`ConstraintFile`: + Base-class of all constraint files. + +- :py:class:`VerilogSourceFile`: + A Verilog source file (of any language version). + +- :py:class:`VHDLSourceFile`: + A VHDL source file (of any language version). + +- :py:class:`VivadoProjectFile`: + A Vivado project file (``*.xpr``). + +- :py:class:`XDCConstraintFile`: + A Vivado constraint file (Xilinx Design Constraints; ``*.xdc``). + +- :py:class:`IPCoreDescriptionFile`: + An XML file (``*.xml``). + +- :py:class:`IPCoreInstantiationFile`: + A Vivado IP core instantiation file (Xilinx IPCore Instance; ``*.xci``). + + +.. autoclass:: UsedInAttribute + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: UsedInAttribute + :parts: 1 + +.. autoclass:: File + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: File + :parts: 1 + +.. autoclass:: ConstraintFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: ConstraintFile + :parts: 1 + +.. autoclass:: VerilogSourceFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: VerilogSourceFile + :parts: 1 + +.. autoclass:: VHDLSourceFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: VHDLSourceFile + :parts: 1 + +.. autoclass:: VivadoProjectFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: VivadoProjectFile + :parts: 1 + +.. autoclass:: XDCConstraintFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: XDCConstraintFile + :parts: 1 + +.. autoclass:: IPCoreDescriptionFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: IPCoreDescriptionFile + :parts: 1 + +.. autoclass:: IPCoreInstantiationFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: IPCoreInstantiationFile + :parts: 1 diff --git a/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.rst.txt b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.rst.txt new file mode 100644 index 00000000..e73f2a01 --- /dev/null +++ b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.rst.txt @@ -0,0 +1,21 @@ +.. # Template modified by Patrick Lehmann + * removed automodule on top, because private members are activated for autodoc (no doubled documentation). + * Made sections like 'submodules' bold text, but no headlines to reduce number of ToC levels. + +============================== +``pyEDAA.ProjectModel.Xilinx`` +============================== + +.. py:module:: pyEDAA.ProjectModel.Xilinx + + + +**Submodules** + + +.. toctree:: + + pyEDAA.ProjectModel.Xilinx.ISE + pyEDAA.ProjectModel.Xilinx.Vivado + +.. currentmodule:: pyEDAA.ProjectModel.Xilinx diff --git a/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.rst.txt b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.rst.txt new file mode 100644 index 00000000..a425e57a --- /dev/null +++ b/_sources/pyEDAA.ProjectModel/pyEDAA.ProjectModel.rst.txt @@ -0,0 +1,502 @@ +.. # Template modified by Patrick Lehmann + * removed automodule on top, because private members are activated for autodoc (no doubled documentation). + * Made sections like 'submodules' bold text, but no headlines to reduce number of ToC levels. + +======================= +``pyEDAA.ProjectModel`` +======================= + +.. py:module:: pyEDAA.ProjectModel + + + +**Submodules** + + +.. toctree:: + + pyEDAA.ProjectModel.Altera + pyEDAA.ProjectModel.Attributes + pyEDAA.ProjectModel.GHDL + pyEDAA.ProjectModel.Intel + pyEDAA.ProjectModel.MentorGraphics + pyEDAA.ProjectModel.OSVVM + pyEDAA.ProjectModel.VHDL + pyEDAA.ProjectModel.Verilog + pyEDAA.ProjectModel.Xilinx + +.. currentmodule:: pyEDAA.ProjectModel + + +**Classes** + +- :py:class:`Attribute`: + Undocumented. + +- :py:class:`FileType`: + A :term:`meta-class` to construct *FileType* classes. + +- :py:class:`File`: + A :term:`File` represents a file in a design. This :term:`base-class` is used + +- :py:class:`HumanReadableContent`: + A file type representing human-readable contents. + +- :py:class:`XMLContent`: + A file type representing XML contents. + +- :py:class:`YAMLContent`: + A file type representing YAML contents. + +- :py:class:`JSONContent`: + A file type representing JSON contents. + +- :py:class:`INIContent`: + A file type representing INI contents. + +- :py:class:`TOMLContent`: + A file type representing TOML contents. + +- :py:class:`TCLContent`: + A file type representing content in TCL code. + +- :py:class:`SDCContent`: + A file type representing contents as Synopsys Design Constraints (SDC). + +- :py:class:`PythonContent`: + A file type representing contents as Python source code. + +- :py:class:`TextFile`: + A text file (``*.txt``). + +- :py:class:`LogFile`: + A log file (``*.log``). + +- :py:class:`XMLFile`: + An XML file (``*.xml``). + +- :py:class:`SourceFile`: + Base-class of all source files. + +- :py:class:`HDLSourceFile`: + Base-class of all HDL source files. + +- :py:class:`RDLSourceFile`: + Base-class of all RDL source files. + +- :py:class:`NetlistFile`: + Base-class of all netlist source files. + +- :py:class:`EDIFNetlistFile`: + Netlist file in EDIF (Electronic Design Interchange Format). + +- :py:class:`TCLSourceFile`: + A TCL source file. + +- :py:class:`VHDLSourceFile`: + A VHDL source file (of any language version). + +- :py:class:`VerilogBaseFile`: + Base-class of all HDL source files. + +- :py:class:`VerilogSourceFile`: + A Verilog source file (of any language version). + +- :py:class:`VerilogHeaderFile`: + A Verilog header file (of any language version). + +- :py:class:`SystemVerilogBaseFile`: + Base-class of all HDL source files. + +- :py:class:`SystemVerilogSourceFile`: + A SystemVerilog source file (of any language version). + +- :py:class:`SystemVerilogHeaderFile`: + A SystemVerilog header file (of any language version). + +- :py:class:`SystemRDLSourceFile`: + A SystemRDL source file (of any language version). + +- :py:class:`PythonSourceFile`: + A Python source file. + +- :py:class:`CocotbPythonFile`: + A Python source file used by Cocotb. + +- :py:class:`ConstraintFile`: + Base-class of all constraint files. + +- :py:class:`ProjectFile`: + Base-class of all tool-specific project files. + +- :py:class:`CSourceFile`: + Base-class of all ANSI-C source files. + +- :py:class:`CppSourceFile`: + Base-class of all ANSI-C++ source files. + +- :py:class:`SettingFile`: + Base-class of all tool-specific setting files. + +- :py:class:`SimulationAnalysisFile`: + Base-class of all tool-specific analysis files. + +- :py:class:`SimulationElaborationFile`: + Base-class of all tool-specific elaboration files. + +- :py:class:`SimulationStartFile`: + Base-class of all tool-specific simulation start-up files. + +- :py:class:`SimulationRunFile`: + Base-class of all tool-specific simulation run (execution) files. + +- :py:class:`WaveformConfigFile`: + Base-class of all tool-specific waveform configuration files. + +- :py:class:`WaveformDatabaseFile`: + Base-class of all tool-specific waveform database files. + +- :py:class:`WaveformExchangeFile`: + Base-class of all tool-independent waveform exchange files. + +- :py:class:`FileSet`: + A :term:`FileSet` represents a group of files. Filesets can have sub-filesets. + +- :py:class:`VHDLLibrary`: + A :term:`VHDLLibrary` represents a group of VHDL source files compiled into the same VHDL library. + +- :py:class:`Design`: + A :term:`Design` represents a group of filesets and the source files therein. + +- :py:class:`Project`: + A :term:`Project` represents a group of designs and the source files therein. + + +.. autoclass:: Attribute + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: Attribute + :parts: 1 + +.. autoclass:: FileType + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: FileType + :parts: 1 + +.. autoclass:: File + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: File + :parts: 1 + +.. autoclass:: HumanReadableContent + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: HumanReadableContent + :parts: 1 + +.. autoclass:: XMLContent + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: XMLContent + :parts: 1 + +.. autoclass:: YAMLContent + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: YAMLContent + :parts: 1 + +.. autoclass:: JSONContent + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: JSONContent + :parts: 1 + +.. autoclass:: INIContent + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: INIContent + :parts: 1 + +.. autoclass:: TOMLContent + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: TOMLContent + :parts: 1 + +.. autoclass:: TCLContent + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: TCLContent + :parts: 1 + +.. autoclass:: SDCContent + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: SDCContent + :parts: 1 + +.. autoclass:: PythonContent + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: PythonContent + :parts: 1 + +.. autoclass:: TextFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: TextFile + :parts: 1 + +.. autoclass:: LogFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: LogFile + :parts: 1 + +.. autoclass:: XMLFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: XMLFile + :parts: 1 + +.. autoclass:: SourceFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: SourceFile + :parts: 1 + +.. autoclass:: HDLSourceFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: HDLSourceFile + :parts: 1 + +.. autoclass:: RDLSourceFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: RDLSourceFile + :parts: 1 + +.. autoclass:: NetlistFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: NetlistFile + :parts: 1 + +.. autoclass:: EDIFNetlistFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: EDIFNetlistFile + :parts: 1 + +.. autoclass:: TCLSourceFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: TCLSourceFile + :parts: 1 + +.. autoclass:: VHDLSourceFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: VHDLSourceFile + :parts: 1 + +.. autoclass:: VerilogBaseFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: VerilogBaseFile + :parts: 1 + +.. autoclass:: VerilogSourceFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: VerilogSourceFile + :parts: 1 + +.. autoclass:: VerilogHeaderFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: VerilogHeaderFile + :parts: 1 + +.. autoclass:: SystemVerilogBaseFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: SystemVerilogBaseFile + :parts: 1 + +.. autoclass:: SystemVerilogSourceFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: SystemVerilogSourceFile + :parts: 1 + +.. autoclass:: SystemVerilogHeaderFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: SystemVerilogHeaderFile + :parts: 1 + +.. autoclass:: SystemRDLSourceFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: SystemRDLSourceFile + :parts: 1 + +.. autoclass:: PythonSourceFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: PythonSourceFile + :parts: 1 + +.. autoclass:: CocotbPythonFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: CocotbPythonFile + :parts: 1 + +.. autoclass:: ConstraintFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: ConstraintFile + :parts: 1 + +.. autoclass:: ProjectFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: ProjectFile + :parts: 1 + +.. autoclass:: CSourceFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: CSourceFile + :parts: 1 + +.. autoclass:: CppSourceFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: CppSourceFile + :parts: 1 + +.. autoclass:: SettingFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: SettingFile + :parts: 1 + +.. autoclass:: SimulationAnalysisFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: SimulationAnalysisFile + :parts: 1 + +.. autoclass:: SimulationElaborationFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: SimulationElaborationFile + :parts: 1 + +.. autoclass:: SimulationStartFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: SimulationStartFile + :parts: 1 + +.. autoclass:: SimulationRunFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: SimulationRunFile + :parts: 1 + +.. autoclass:: WaveformConfigFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: WaveformConfigFile + :parts: 1 + +.. autoclass:: WaveformDatabaseFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: WaveformDatabaseFile + :parts: 1 + +.. autoclass:: WaveformExchangeFile + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: WaveformExchangeFile + :parts: 1 + +.. autoclass:: FileSet + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: FileSet + :parts: 1 + +.. autoclass:: VHDLLibrary + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: VHDLLibrary + :parts: 1 + +.. autoclass:: Design + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: Design + :parts: 1 + +.. autoclass:: Project + :members: + + .. rubric:: Inheritance + .. inheritance-diagram:: Project + :parts: 1 diff --git a/_sources/typing/index.rst.txt b/_sources/typing/index.rst.txt new file mode 100644 index 00000000..97d4ae2a --- /dev/null +++ b/_sources/typing/index.rst.txt @@ -0,0 +1,4 @@ +Static Type Checking Report +########################### + +*Placeholder for the Static Type Checking report generated with* ``mypy``. diff --git a/_static/alabaster.css b/_static/alabaster.css new file mode 100644 index 00000000..7e75bf8f --- /dev/null +++ b/_static/alabaster.css @@ -0,0 +1,663 @@ +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Georgia, serif; + font-size: 17px; + background-color: #fff; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #fff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: inherit; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar { + max-height: 100%; + overflow-y: auto; +} + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Georgia, serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: Georgia, serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox { + margin: 1em 0; +} + +div.sphinxsidebar .search > div { + display: table-cell; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +div.sphinxsidebar .badge { + border-bottom: none; +} + +div.sphinxsidebar .badge:hover { + border-bottom: none; +} + +/* To address an issue with donation coming after search */ +div.sphinxsidebar h3.donation { + margin-top: 10px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Georgia, serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #EEE; + border: 1px solid #CCC; +} + +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fafafa; +} + +div.admonition p.admonition-title { + font-family: Georgia, serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #EEE; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin-left: 0; + margin-right: 0; + margin-top: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: unset; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +div.viewcode-block:target { + background: #ffd; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fff; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + +@media screen and (max-width: 940px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: #fff; + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.sphinxsidebar { + display: block; + float: none; + width: unset; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + min-width: auto; /* fixes width on small screens, breaks .hll */ + padding: 0; + } + + .hll { + /* "fixes" the breakage */ + width: max-content; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Hide ugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + + +/* relbar */ + +.related { + line-height: 30px; + width: 100%; + font-size: 0.9rem; +} + +.related.top { + border-bottom: 1px solid #EEE; + margin-bottom: 20px; +} + +.related.bottom { + border-top: 1px solid #EEE; +} + +.related ul { + padding: 0; + margin: 0; + list-style: none; +} + +.related li { + display: inline; +} + +nav#rellinks { + float: right; +} + +nav#rellinks li+li:before { + content: "|"; +} + +nav#breadcrumbs li+li:before { + content: "\00BB"; +} + +/* Hide certain items when printing */ +@media print { + div.related { + display: none; + } +} + +img.github { + position: absolute; + top: 0; + border: 0; + right: 0; +} \ No newline at end of file diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 00000000..d9846dac --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,914 @@ +/* + * Sphinx stylesheet -- basic theme. + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin-top: 10px; +} + +ul.search li { + padding: 5px 0; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: inherit; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/custom.css b/_static/custom.css new file mode 100644 index 00000000..2a924f1d --- /dev/null +++ b/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 00000000..0398ebb9 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,149 @@ +/* + * Base JavaScript utilities for all Sphinx HTML documentation. + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 00000000..240446d5 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '0.5.0', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/favicon.svg b/_static/favicon.svg new file mode 100644 index 00000000..97995b9d --- /dev/null +++ b/_static/favicon.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_static/github-banner.svg b/_static/github-banner.svg new file mode 100644 index 00000000..c47d9dc0 --- /dev/null +++ b/_static/github-banner.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/_static/graphviz.css b/_static/graphviz.css new file mode 100644 index 00000000..30f3837b --- /dev/null +++ b/_static/graphviz.css @@ -0,0 +1,12 @@ +/* + * Sphinx stylesheet -- graphviz extension. + */ + +img.graphviz { + border: 0; + max-width: 100%; +} + +object.graphviz { + max-width: 100%; +} diff --git a/_static/language_data.js b/_static/language_data.js new file mode 100644 index 00000000..c7fe6c6f --- /dev/null +++ b/_static/language_data.js @@ -0,0 +1,192 @@ +/* + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/logo_on_dark.svg b/_static/logo_on_dark.svg new file mode 100644 index 00000000..24e8576a --- /dev/null +++ b/_static/logo_on_dark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/_static/logo_on_light.svg b/_static/logo_on_light.svg new file mode 100644 index 00000000..eac24d90 --- /dev/null +++ b/_static/logo_on_light.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 00000000..6bae782c --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,85 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #49483e } +.highlight { background: #232629; color: #cccccc } +.highlight .c { color: #777777; font-style: italic } /* Comment */ +.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +.highlight .esc { color: #cccccc } /* Escape */ +.highlight .g { color: #cccccc } /* Generic */ +.highlight .k { color: #7686bb; font-weight: bold } /* Keyword */ +.highlight .l { color: #cccccc } /* Literal */ +.highlight .n { color: #cccccc } /* Name */ +.highlight .o { color: #cccccc } /* Operator */ +.highlight .x { color: #cccccc } /* Other */ +.highlight .p { color: #cccccc } /* Punctuation */ +.highlight .ch { color: #777777; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #777777; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #777777; font-style: italic } /* Comment.Preproc */ +.highlight .cpf { color: #777777; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #777777; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #777777; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #cccccc } /* Generic.Deleted */ +.highlight .ge { color: #cccccc } /* Generic.Emph */ +.highlight .ges { color: #cccccc } /* Generic.EmphStrong */ +.highlight .gr { color: #cccccc } /* Generic.Error */ +.highlight .gh { color: #cccccc } /* Generic.Heading */ +.highlight .gi { color: #cccccc } /* Generic.Inserted */ +.highlight .go { color: #cccccc } /* Generic.Output */ +.highlight .gp { color: #ffffff } /* Generic.Prompt */ +.highlight .gs { color: #cccccc } /* Generic.Strong */ +.highlight .gu { color: #cccccc } /* Generic.Subheading */ +.highlight .gt { color: #cccccc } /* Generic.Traceback */ +.highlight .kc { color: #7686bb; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #7686bb; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #7686bb; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #7686bb; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #7686bb; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #7686bb; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #cccccc } /* Literal.Date */ +.highlight .m { color: #4FB8CC } /* Literal.Number */ +.highlight .s { color: #51cc99 } /* Literal.String */ +.highlight .na { color: #cccccc } /* Name.Attribute */ +.highlight .nb { color: #cccccc } /* Name.Builtin */ +.highlight .nc { color: #cccccc } /* Name.Class */ +.highlight .no { color: #cccccc } /* Name.Constant */ +.highlight .nd { color: #cccccc } /* Name.Decorator */ +.highlight .ni { color: #cccccc } /* Name.Entity */ +.highlight .ne { color: #cccccc } /* Name.Exception */ +.highlight .nf { color: #6a6aff } /* Name.Function */ +.highlight .nl { color: #cccccc } /* Name.Label */ +.highlight .nn { color: #cccccc } /* Name.Namespace */ +.highlight .nx { color: #e2828e } /* Name.Other */ +.highlight .py { color: #cccccc } /* Name.Property */ +.highlight .nt { color: #cccccc } /* Name.Tag */ +.highlight .nv { color: #7AB4DB; font-weight: bold } /* Name.Variable */ +.highlight .ow { color: #cccccc } /* Operator.Word */ +.highlight .pm { color: #cccccc } /* Punctuation.Marker */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #4FB8CC } /* Literal.Number.Bin */ +.highlight .mf { color: #4FB8CC } /* Literal.Number.Float */ +.highlight .mh { color: #4FB8CC } /* Literal.Number.Hex */ +.highlight .mi { color: #4FB8CC } /* Literal.Number.Integer */ +.highlight .mo { color: #4FB8CC } /* Literal.Number.Oct */ +.highlight .sa { color: #51cc99 } /* Literal.String.Affix */ +.highlight .sb { color: #51cc99 } /* Literal.String.Backtick */ +.highlight .sc { color: #51cc99 } /* Literal.String.Char */ +.highlight .dl { color: #51cc99 } /* Literal.String.Delimiter */ +.highlight .sd { color: #51cc99 } /* Literal.String.Doc */ +.highlight .s2 { color: #51cc99 } /* Literal.String.Double */ +.highlight .se { color: #51cc99 } /* Literal.String.Escape */ +.highlight .sh { color: #51cc99 } /* Literal.String.Heredoc */ +.highlight .si { color: #51cc99 } /* Literal.String.Interpol */ +.highlight .sx { color: #51cc99 } /* Literal.String.Other */ +.highlight .sr { color: #51cc99 } /* Literal.String.Regex */ +.highlight .s1 { color: #51cc99 } /* Literal.String.Single */ +.highlight .ss { color: #51cc99 } /* Literal.String.Symbol */ +.highlight .bp { color: #cccccc } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #6a6aff } /* Name.Function.Magic */ +.highlight .vc { color: #7AB4DB; font-weight: bold } /* Name.Variable.Class */ +.highlight .vg { color: #BE646C; font-weight: bold } /* Name.Variable.Global */ +.highlight .vi { color: #7AB4DB; font-weight: bold } /* Name.Variable.Instance */ +.highlight .vm { color: #7AB4DB; font-weight: bold } /* Name.Variable.Magic */ +.highlight .il { color: #4FB8CC } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 00000000..2c774d17 --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,632 @@ +/* + * Sphinx JavaScript utilities for the full-text search. + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename, kind] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +// Global search result kind enum, used by themes to style search results. +class SearchResultKind { + static get index() { return "index"; } + static get object() { return "object"; } + static get text() { return "text"; } + static get title() { return "title"; } +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename, kind] = item; + + let listItem = document.createElement("li"); + // Add a class representing the item's type: + // can be used by a theme's CSS selector for styling + // See SearchResultKind for the class names. + listItem.classList.add(`kind-${kind}`); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = Documentation.ngettext( + "Search finished, found one page matching the search query.", + "Search finished, found ${resultCount} pages matching the search query.", + resultCount, + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename, kind]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.setAttribute("role", "list"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename, kind]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score + boost, + filenames[file], + SearchResultKind.title, + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + SearchResultKind.index, + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + SearchResultKind.object, + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + SearchResultKind.text, + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 00000000..8a96c69a --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/coverage/class_index.html b/coverage/class_index.html new file mode 100644 index 00000000..ef1600d9 --- /dev/null +++ b/coverage/class_index.html @@ -0,0 +1,324 @@ + + + + + Code Coverage of pyEDAA.ProjectModel + + + + + +
+
+

Code Coverage of pyEDAA.ProjectModel: + 71% +

+ +
+ +
+ + +
+
+

+ Files + Functions + Classes +

+

+ coverage.py v7.6.4, + created at 2024-11-08 22:18 +0000 +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Fileclassstatementsmissingexcludedbranchespartialcoverage
pyEDAA/ProjectModel/Attributes.pyKeyValueAttribute40000100%
pyEDAA/ProjectModel/Attributes.py(no class)100000100%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVivadoFileMixIn10000100%
pyEDAA/ProjectModel/Xilinx/Vivado.pyConstraintFile20000100%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVerilogSourceFile220000%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVHDLSourceFile20000100%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVivadoProjectFile6012046481%
pyEDAA/ProjectModel/Xilinx/Vivado.py(no class)530000100%
pyEDAA/ProjectModel/__init__.pyAttribute7506123%
pyEDAA/ProjectModel/__init__.pyFileType90020100%
pyEDAA/ProjectModel/__init__.pyFile84230421667%
pyEDAA/ProjectModel/__init__.pyVHDLSourceFile4418218261%
pyEDAA/ProjectModel/__init__.pyVerilogMixIn60040100%
pyEDAA/ProjectModel/__init__.pySystemVerilogMixIn60040100%
pyEDAA/ProjectModel/__init__.pyVerilogBaseFile20000100%
pyEDAA/ProjectModel/__init__.pySystemRDLSourceFile880400%
pyEDAA/ProjectModel/__init__.pyFileSet1967341222859%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary7643244738%
pyEDAA/ProjectModel/__init__.pyDesign145700841848%
pyEDAA/ProjectModel/__init__.pyProject6120022965%
pyEDAA/ProjectModel/__init__.py(no class)4260000100%
Total 120427483988571%
+

+ No items found using the specified filter. +

+

42 empty classes skipped.

+
+ + + diff --git a/coverage/coverage_html_cb_6fb7b396.js b/coverage/coverage_html_cb_6fb7b396.js new file mode 100644 index 00000000..1face13d --- /dev/null +++ b/coverage/coverage_html_cb_6fb7b396.js @@ -0,0 +1,733 @@ +// Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 +// For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt + +// Coverage.py HTML report browser code. +/*jslint browser: true, sloppy: true, vars: true, plusplus: true, maxerr: 50, indent: 4 */ +/*global coverage: true, document, window, $ */ + +coverage = {}; + +// General helpers +function debounce(callback, wait) { + let timeoutId = null; + return function(...args) { + clearTimeout(timeoutId); + timeoutId = setTimeout(() => { + callback.apply(this, args); + }, wait); + }; +}; + +function checkVisible(element) { + const rect = element.getBoundingClientRect(); + const viewBottom = Math.max(document.documentElement.clientHeight, window.innerHeight); + const viewTop = 30; + return !(rect.bottom < viewTop || rect.top >= viewBottom); +} + +function on_click(sel, fn) { + const elt = document.querySelector(sel); + if (elt) { + elt.addEventListener("click", fn); + } +} + +// Helpers for table sorting +function getCellValue(row, column = 0) { + const cell = row.cells[column] // nosemgrep: eslint.detect-object-injection + if (cell.childElementCount == 1) { + var child = cell.firstElementChild; + if (child.tagName === "A") { + child = child.firstElementChild; + } + if (child instanceof HTMLDataElement && child.value) { + return child.value; + } + } + return cell.innerText || cell.textContent; +} + +function rowComparator(rowA, rowB, column = 0) { + let valueA = getCellValue(rowA, column); + let valueB = getCellValue(rowB, column); + if (!isNaN(valueA) && !isNaN(valueB)) { + return valueA - valueB; + } + return valueA.localeCompare(valueB, undefined, {numeric: true}); +} + +function sortColumn(th) { + // Get the current sorting direction of the selected header, + // clear state on other headers and then set the new sorting direction. + const currentSortOrder = th.getAttribute("aria-sort"); + [...th.parentElement.cells].forEach(header => header.setAttribute("aria-sort", "none")); + var direction; + if (currentSortOrder === "none") { + direction = th.dataset.defaultSortOrder || "ascending"; + } + else if (currentSortOrder === "ascending") { + direction = "descending"; + } + else { + direction = "ascending"; + } + th.setAttribute("aria-sort", direction); + + const column = [...th.parentElement.cells].indexOf(th) + + // Sort all rows and afterwards append them in order to move them in the DOM. + Array.from(th.closest("table").querySelectorAll("tbody tr")) + .sort((rowA, rowB) => rowComparator(rowA, rowB, column) * (direction === "ascending" ? 1 : -1)) + .forEach(tr => tr.parentElement.appendChild(tr)); + + // Save the sort order for next time. + if (th.id !== "region") { + let th_id = "file"; // Sort by file if we don't have a column id + let current_direction = direction; + const stored_list = localStorage.getItem(coverage.INDEX_SORT_STORAGE); + if (stored_list) { + ({th_id, direction} = JSON.parse(stored_list)) + } + localStorage.setItem(coverage.INDEX_SORT_STORAGE, JSON.stringify({ + "th_id": th.id, + "direction": current_direction + })); + if (th.id !== th_id || document.getElementById("region")) { + // Sort column has changed, unset sorting by function or class. + localStorage.setItem(coverage.SORTED_BY_REGION, JSON.stringify({ + "by_region": false, + "region_direction": current_direction + })); + } + } + else { + // Sort column has changed to by function or class, remember that. + localStorage.setItem(coverage.SORTED_BY_REGION, JSON.stringify({ + "by_region": true, + "region_direction": direction + })); + } +} + +// Find all the elements with data-shortcut attribute, and use them to assign a shortcut key. +coverage.assign_shortkeys = function () { + document.querySelectorAll("[data-shortcut]").forEach(element => { + document.addEventListener("keypress", event => { + if (event.target.tagName.toLowerCase() === "input") { + return; // ignore keypress from search filter + } + if (event.key === element.dataset.shortcut) { + element.click(); + } + }); + }); +}; + +// Create the events for the filter box. +coverage.wire_up_filter = function () { + // Populate the filter and hide100 inputs if there are saved values for them. + const saved_filter_value = localStorage.getItem(coverage.FILTER_STORAGE); + if (saved_filter_value) { + document.getElementById("filter").value = saved_filter_value; + } + const saved_hide100_value = localStorage.getItem(coverage.HIDE100_STORAGE); + if (saved_hide100_value) { + document.getElementById("hide100").checked = JSON.parse(saved_hide100_value); + } + + // Cache elements. + const table = document.querySelector("table.index"); + const table_body_rows = table.querySelectorAll("tbody tr"); + const no_rows = document.getElementById("no_rows"); + + // Observe filter keyevents. + const filter_handler = (event => { + // Keep running total of each metric, first index contains number of shown rows + const totals = new Array(table.rows[0].cells.length).fill(0); + // Accumulate the percentage as fraction + totals[totals.length - 1] = { "numer": 0, "denom": 0 }; // nosemgrep: eslint.detect-object-injection + + var text = document.getElementById("filter").value; + // Store filter value + localStorage.setItem(coverage.FILTER_STORAGE, text); + const casefold = (text === text.toLowerCase()); + const hide100 = document.getElementById("hide100").checked; + // Store hide value. + localStorage.setItem(coverage.HIDE100_STORAGE, JSON.stringify(hide100)); + + // Hide / show elements. + table_body_rows.forEach(row => { + var show = false; + // Check the text filter. + for (let column = 0; column < totals.length; column++) { + cell = row.cells[column]; + if (cell.classList.contains("name")) { + var celltext = cell.textContent; + if (casefold) { + celltext = celltext.toLowerCase(); + } + if (celltext.includes(text)) { + show = true; + } + } + } + + // Check the "hide covered" filter. + if (show && hide100) { + const [numer, denom] = row.cells[row.cells.length - 1].dataset.ratio.split(" "); + show = (numer !== denom); + } + + if (!show) { + // hide + row.classList.add("hidden"); + return; + } + + // show + row.classList.remove("hidden"); + totals[0]++; + + for (let column = 0; column < totals.length; column++) { + // Accumulate dynamic totals + cell = row.cells[column] // nosemgrep: eslint.detect-object-injection + if (cell.classList.contains("name")) { + continue; + } + if (column === totals.length - 1) { + // Last column contains percentage + const [numer, denom] = cell.dataset.ratio.split(" "); + totals[column]["numer"] += parseInt(numer, 10); // nosemgrep: eslint.detect-object-injection + totals[column]["denom"] += parseInt(denom, 10); // nosemgrep: eslint.detect-object-injection + } + else { + totals[column] += parseInt(cell.textContent, 10); // nosemgrep: eslint.detect-object-injection + } + } + }); + + // Show placeholder if no rows will be displayed. + if (!totals[0]) { + // Show placeholder, hide table. + no_rows.style.display = "block"; + table.style.display = "none"; + return; + } + + // Hide placeholder, show table. + no_rows.style.display = null; + table.style.display = null; + + const footer = table.tFoot.rows[0]; + // Calculate new dynamic sum values based on visible rows. + for (let column = 0; column < totals.length; column++) { + // Get footer cell element. + const cell = footer.cells[column]; // nosemgrep: eslint.detect-object-injection + if (cell.classList.contains("name")) { + continue; + } + + // Set value into dynamic footer cell element. + if (column === totals.length - 1) { + // Percentage column uses the numerator and denominator, + // and adapts to the number of decimal places. + const match = /\.([0-9]+)/.exec(cell.textContent); + const places = match ? match[1].length : 0; + const { numer, denom } = totals[column]; // nosemgrep: eslint.detect-object-injection + cell.dataset.ratio = `${numer} ${denom}`; + // Check denom to prevent NaN if filtered files contain no statements + cell.textContent = denom + ? `${(numer * 100 / denom).toFixed(places)}%` + : `${(100).toFixed(places)}%`; + } + else { + cell.textContent = totals[column]; // nosemgrep: eslint.detect-object-injection + } + } + }); + + document.getElementById("filter").addEventListener("input", debounce(filter_handler)); + document.getElementById("hide100").addEventListener("input", debounce(filter_handler)); + + // Trigger change event on setup, to force filter on page refresh + // (filter value may still be present). + document.getElementById("filter").dispatchEvent(new Event("input")); + document.getElementById("hide100").dispatchEvent(new Event("input")); +}; +coverage.FILTER_STORAGE = "COVERAGE_FILTER_VALUE"; +coverage.HIDE100_STORAGE = "COVERAGE_HIDE100_VALUE"; + +// Set up the click-to-sort columns. +coverage.wire_up_sorting = function () { + document.querySelectorAll("[data-sortable] th[aria-sort]").forEach( + th => th.addEventListener("click", e => sortColumn(e.target)) + ); + + // Look for a localStorage item containing previous sort settings: + let th_id = "file", direction = "ascending"; + const stored_list = localStorage.getItem(coverage.INDEX_SORT_STORAGE); + if (stored_list) { + ({th_id, direction} = JSON.parse(stored_list)); + } + let by_region = false, region_direction = "ascending"; + const sorted_by_region = localStorage.getItem(coverage.SORTED_BY_REGION); + if (sorted_by_region) { + ({ + by_region, + region_direction + } = JSON.parse(sorted_by_region)); + } + + const region_id = "region"; + if (by_region && document.getElementById(region_id)) { + direction = region_direction; + } + // If we are in a page that has a column with id of "region", sort on + // it if the last sort was by function or class. + let th; + if (document.getElementById(region_id)) { + th = document.getElementById(by_region ? region_id : th_id); + } + else { + th = document.getElementById(th_id); + } + th.setAttribute("aria-sort", direction === "ascending" ? "descending" : "ascending"); + th.click() +}; + +coverage.INDEX_SORT_STORAGE = "COVERAGE_INDEX_SORT_2"; +coverage.SORTED_BY_REGION = "COVERAGE_SORT_REGION"; + +// Loaded on index.html +coverage.index_ready = function () { + coverage.assign_shortkeys(); + coverage.wire_up_filter(); + coverage.wire_up_sorting(); + + on_click(".button_prev_file", coverage.to_prev_file); + on_click(".button_next_file", coverage.to_next_file); + + on_click(".button_show_hide_help", coverage.show_hide_help); +}; + +// -- pyfile stuff -- + +coverage.LINE_FILTERS_STORAGE = "COVERAGE_LINE_FILTERS"; + +coverage.pyfile_ready = function () { + // If we're directed to a particular line number, highlight the line. + var frag = location.hash; + if (frag.length > 2 && frag[1] === "t") { + document.querySelector(frag).closest(".n").classList.add("highlight"); + coverage.set_sel(parseInt(frag.substr(2), 10)); + } + else { + coverage.set_sel(0); + } + + on_click(".button_toggle_run", coverage.toggle_lines); + on_click(".button_toggle_mis", coverage.toggle_lines); + on_click(".button_toggle_exc", coverage.toggle_lines); + on_click(".button_toggle_par", coverage.toggle_lines); + + on_click(".button_next_chunk", coverage.to_next_chunk_nicely); + on_click(".button_prev_chunk", coverage.to_prev_chunk_nicely); + on_click(".button_top_of_page", coverage.to_top); + on_click(".button_first_chunk", coverage.to_first_chunk); + + on_click(".button_prev_file", coverage.to_prev_file); + on_click(".button_next_file", coverage.to_next_file); + on_click(".button_to_index", coverage.to_index); + + on_click(".button_show_hide_help", coverage.show_hide_help); + + coverage.filters = undefined; + try { + coverage.filters = localStorage.getItem(coverage.LINE_FILTERS_STORAGE); + } catch(err) {} + + if (coverage.filters) { + coverage.filters = JSON.parse(coverage.filters); + } + else { + coverage.filters = {run: false, exc: true, mis: true, par: true}; + } + + for (cls in coverage.filters) { + coverage.set_line_visibilty(cls, coverage.filters[cls]); // nosemgrep: eslint.detect-object-injection + } + + coverage.assign_shortkeys(); + coverage.init_scroll_markers(); + coverage.wire_up_sticky_header(); + + document.querySelectorAll("[id^=ctxs]").forEach( + cbox => cbox.addEventListener("click", coverage.expand_contexts) + ); + + // Rebuild scroll markers when the window height changes. + window.addEventListener("resize", coverage.build_scroll_markers); +}; + +coverage.toggle_lines = function (event) { + const btn = event.target.closest("button"); + const category = btn.value + const show = !btn.classList.contains("show_" + category); + coverage.set_line_visibilty(category, show); + coverage.build_scroll_markers(); + coverage.filters[category] = show; + try { + localStorage.setItem(coverage.LINE_FILTERS_STORAGE, JSON.stringify(coverage.filters)); + } catch(err) {} +}; + +coverage.set_line_visibilty = function (category, should_show) { + const cls = "show_" + category; + const btn = document.querySelector(".button_toggle_" + category); + if (btn) { + if (should_show) { + document.querySelectorAll("#source ." + category).forEach(e => e.classList.add(cls)); + btn.classList.add(cls); + } + else { + document.querySelectorAll("#source ." + category).forEach(e => e.classList.remove(cls)); + btn.classList.remove(cls); + } + } +}; + +// Return the nth line div. +coverage.line_elt = function (n) { + return document.getElementById("t" + n)?.closest("p"); +}; + +// Set the selection. b and e are line numbers. +coverage.set_sel = function (b, e) { + // The first line selected. + coverage.sel_begin = b; + // The next line not selected. + coverage.sel_end = (e === undefined) ? b+1 : e; +}; + +coverage.to_top = function () { + coverage.set_sel(0, 1); + coverage.scroll_window(0); +}; + +coverage.to_first_chunk = function () { + coverage.set_sel(0, 1); + coverage.to_next_chunk(); +}; + +coverage.to_prev_file = function () { + window.location = document.getElementById("prevFileLink").href; +} + +coverage.to_next_file = function () { + window.location = document.getElementById("nextFileLink").href; +} + +coverage.to_index = function () { + location.href = document.getElementById("indexLink").href; +} + +coverage.show_hide_help = function () { + const helpCheck = document.getElementById("help_panel_state") + helpCheck.checked = !helpCheck.checked; +} + +// Return a string indicating what kind of chunk this line belongs to, +// or null if not a chunk. +coverage.chunk_indicator = function (line_elt) { + const classes = line_elt?.className; + if (!classes) { + return null; + } + const match = classes.match(/\bshow_\w+\b/); + if (!match) { + return null; + } + return match[0]; +}; + +coverage.to_next_chunk = function () { + const c = coverage; + + // Find the start of the next colored chunk. + var probe = c.sel_end; + var chunk_indicator, probe_line; + while (true) { + probe_line = c.line_elt(probe); + if (!probe_line) { + return; + } + chunk_indicator = c.chunk_indicator(probe_line); + if (chunk_indicator) { + break; + } + probe++; + } + + // There's a next chunk, `probe` points to it. + var begin = probe; + + // Find the end of this chunk. + var next_indicator = chunk_indicator; + while (next_indicator === chunk_indicator) { + probe++; + probe_line = c.line_elt(probe); + next_indicator = c.chunk_indicator(probe_line); + } + c.set_sel(begin, probe); + c.show_selection(); +}; + +coverage.to_prev_chunk = function () { + const c = coverage; + + // Find the end of the prev colored chunk. + var probe = c.sel_begin-1; + var probe_line = c.line_elt(probe); + if (!probe_line) { + return; + } + var chunk_indicator = c.chunk_indicator(probe_line); + while (probe > 1 && !chunk_indicator) { + probe--; + probe_line = c.line_elt(probe); + if (!probe_line) { + return; + } + chunk_indicator = c.chunk_indicator(probe_line); + } + + // There's a prev chunk, `probe` points to its last line. + var end = probe+1; + + // Find the beginning of this chunk. + var prev_indicator = chunk_indicator; + while (prev_indicator === chunk_indicator) { + probe--; + if (probe <= 0) { + return; + } + probe_line = c.line_elt(probe); + prev_indicator = c.chunk_indicator(probe_line); + } + c.set_sel(probe+1, end); + c.show_selection(); +}; + +// Returns 0, 1, or 2: how many of the two ends of the selection are on +// the screen right now? +coverage.selection_ends_on_screen = function () { + if (coverage.sel_begin === 0) { + return 0; + } + + const begin = coverage.line_elt(coverage.sel_begin); + const end = coverage.line_elt(coverage.sel_end-1); + + return ( + (checkVisible(begin) ? 1 : 0) + + (checkVisible(end) ? 1 : 0) + ); +}; + +coverage.to_next_chunk_nicely = function () { + if (coverage.selection_ends_on_screen() === 0) { + // The selection is entirely off the screen: + // Set the top line on the screen as selection. + + // This will select the top-left of the viewport + // As this is most likely the span with the line number we take the parent + const line = document.elementFromPoint(0, 0).parentElement; + if (line.parentElement !== document.getElementById("source")) { + // The element is not a source line but the header or similar + coverage.select_line_or_chunk(1); + } + else { + // We extract the line number from the id + coverage.select_line_or_chunk(parseInt(line.id.substring(1), 10)); + } + } + coverage.to_next_chunk(); +}; + +coverage.to_prev_chunk_nicely = function () { + if (coverage.selection_ends_on_screen() === 0) { + // The selection is entirely off the screen: + // Set the lowest line on the screen as selection. + + // This will select the bottom-left of the viewport + // As this is most likely the span with the line number we take the parent + const line = document.elementFromPoint(document.documentElement.clientHeight-1, 0).parentElement; + if (line.parentElement !== document.getElementById("source")) { + // The element is not a source line but the header or similar + coverage.select_line_or_chunk(coverage.lines_len); + } + else { + // We extract the line number from the id + coverage.select_line_or_chunk(parseInt(line.id.substring(1), 10)); + } + } + coverage.to_prev_chunk(); +}; + +// Select line number lineno, or if it is in a colored chunk, select the +// entire chunk +coverage.select_line_or_chunk = function (lineno) { + var c = coverage; + var probe_line = c.line_elt(lineno); + if (!probe_line) { + return; + } + var the_indicator = c.chunk_indicator(probe_line); + if (the_indicator) { + // The line is in a highlighted chunk. + // Search backward for the first line. + var probe = lineno; + var indicator = the_indicator; + while (probe > 0 && indicator === the_indicator) { + probe--; + probe_line = c.line_elt(probe); + if (!probe_line) { + break; + } + indicator = c.chunk_indicator(probe_line); + } + var begin = probe + 1; + + // Search forward for the last line. + probe = lineno; + indicator = the_indicator; + while (indicator === the_indicator) { + probe++; + probe_line = c.line_elt(probe); + indicator = c.chunk_indicator(probe_line); + } + + coverage.set_sel(begin, probe); + } + else { + coverage.set_sel(lineno); + } +}; + +coverage.show_selection = function () { + // Highlight the lines in the chunk + document.querySelectorAll("#source .highlight").forEach(e => e.classList.remove("highlight")); + for (let probe = coverage.sel_begin; probe < coverage.sel_end; probe++) { + coverage.line_elt(probe).querySelector(".n").classList.add("highlight"); + } + + coverage.scroll_to_selection(); +}; + +coverage.scroll_to_selection = function () { + // Scroll the page if the chunk isn't fully visible. + if (coverage.selection_ends_on_screen() < 2) { + const element = coverage.line_elt(coverage.sel_begin); + coverage.scroll_window(element.offsetTop - 60); + } +}; + +coverage.scroll_window = function (to_pos) { + window.scroll({top: to_pos, behavior: "smooth"}); +}; + +coverage.init_scroll_markers = function () { + // Init some variables + coverage.lines_len = document.querySelectorAll("#source > p").length; + + // Build html + coverage.build_scroll_markers(); +}; + +coverage.build_scroll_markers = function () { + const temp_scroll_marker = document.getElementById("scroll_marker") + if (temp_scroll_marker) temp_scroll_marker.remove(); + // Don't build markers if the window has no scroll bar. + if (document.body.scrollHeight <= window.innerHeight) { + return; + } + + const marker_scale = window.innerHeight / document.body.scrollHeight; + const line_height = Math.min(Math.max(3, window.innerHeight / coverage.lines_len), 10); + + let previous_line = -99, last_mark, last_top; + + const scroll_marker = document.createElement("div"); + scroll_marker.id = "scroll_marker"; + document.getElementById("source").querySelectorAll( + "p.show_run, p.show_mis, p.show_exc, p.show_exc, p.show_par" + ).forEach(element => { + const line_top = Math.floor(element.offsetTop * marker_scale); + const line_number = parseInt(element.querySelector(".n a").id.substr(1)); + + if (line_number === previous_line + 1) { + // If this solid missed block just make previous mark higher. + last_mark.style.height = `${line_top + line_height - last_top}px`; + } + else { + // Add colored line in scroll_marker block. + last_mark = document.createElement("div"); + last_mark.id = `m${line_number}`; + last_mark.classList.add("marker"); + last_mark.style.height = `${line_height}px`; + last_mark.style.top = `${line_top}px`; + scroll_marker.append(last_mark); + last_top = line_top; + } + + previous_line = line_number; + }); + + // Append last to prevent layout calculation + document.body.append(scroll_marker); +}; + +coverage.wire_up_sticky_header = function () { + const header = document.querySelector("header"); + const header_bottom = ( + header.querySelector(".content h2").getBoundingClientRect().top - + header.getBoundingClientRect().top + ); + + function updateHeader() { + if (window.scrollY > header_bottom) { + header.classList.add("sticky"); + } + else { + header.classList.remove("sticky"); + } + } + + window.addEventListener("scroll", updateHeader); + updateHeader(); +}; + +coverage.expand_contexts = function (e) { + var ctxs = e.target.parentNode.querySelector(".ctxs"); + + if (!ctxs.classList.contains("expanded")) { + var ctxs_text = ctxs.textContent; + var width = Number(ctxs_text[0]); + ctxs.textContent = ""; + for (var i = 1; i < ctxs_text.length; i += width) { + key = ctxs_text.substring(i, i + width).trim(); + ctxs.appendChild(document.createTextNode(contexts[key])); + ctxs.appendChild(document.createElement("br")); + } + ctxs.classList.add("expanded"); + } +}; + +document.addEventListener("DOMContentLoaded", () => { + if (document.body.classList.contains("indexfile")) { + coverage.index_ready(); + } + else { + coverage.pyfile_ready(); + } +}); diff --git a/coverage/favicon_32_cb_58284776.png b/coverage/favicon_32_cb_58284776.png new file mode 100644 index 0000000000000000000000000000000000000000..8649f0475d8d20793b2ec431fe25a186a414cf10 GIT binary patch literal 1732 zcmV;#20QtQP)K2KOkBOVxIZChq#W-v7@TU%U6P(wycKT1hUJUToW3ke1U1ONa4 z000000000000000bb)GRa9mqwR9|UWHy;^RUrt?IT__Y0JUcxmBP0(51q1>E00030 z|NrOz)aw7%8sJzM<5^g%z7^qE`}_Ot|JUUG(NUkWzR|7K?Zo%@_v-8G-1N%N=D$;; zw;keH4dGY$`1t4M=HK_s*zm^0#KgqfwWhe3qO_HtvXYvtjgX>;-~C$L`&k>^R)9)7 zdPh2TL^pCnHC#0+_4D)M`p?qp!pq{jO_{8;$fbaflbx`Tn52n|n}8VFRTA1&ugOP< zPd{uvFjz7t*Vot1&d$l-xWCk}s;sQL&#O(Bskh6gqNJv>#iB=ypG1e3K!K4yc7!~M zfj4S*g^zZ7eP$+_Sl07Z646l;%urinP#D8a6TwRtnLIRcI!r4f@bK~9-`~;E(N?Lv zSEst7s;rcxsi~}{Nsytfz@MtUoR*iFc8!#vvx}Umhm4blk(_~MdVD-@dW&>!Nn~ro z_E~-ESVQAj6Wmn;(olz(O&_{U2*pZBc1aYjMh>Dq3z|6`jW`RDHV=t3I6yRKJ~LOX zz_z!!vbVXPqob#=pj3^VMT?x6t(irRmSKsMo1~LLkB&=#j!=M%NP35mfqim$drWb9 zYIb>no_LUwc!r^NkDzs4YHu@=ZHRzrafWDZd1EhEVq=tGX?tK$pIa)DTh#bkvh!J- z?^%@YS!U*0E8$q$_*aOTQ&)Ra64g>ep;BdcQgvlg8qQHrP*E$;P{-m=A*@axn@$bO zO-Y4JzS&EAi%YG}N?cn?YFS7ivPY=EMV6~YH;+Xxu|tefLS|Aza)Cg6us#)=JW!uH zQa?H>d^j+YHCtyjL^LulF*05|F$RG!AX_OHVI&MtA~_@=5_lU|0000rbW%=J06GH4 z^5LD8b8apw8vNh1ua1mF{{Hy)_U`NA;Nacc+sCpuHXa-V{r&yz?c(9#+}oX+NmiRW z+W-IqK1oDDR5;6GfCDCOP5}iL5fK(cB~ET81`MFgF2kGa9AjhSIk~-E-4&*tPPKdiilQJ11k_J082ZS z>@TvivP!5ZFG?t@{t+GpR3XR&@*hA_VE1|Lo8@L@)l*h(Z@=?c-NS$Fk&&61IzUU9 z*nPqBM=OBZ-6ka1SJgGAS-Us5EN)r#dUX%>wQZLa2ytPCtMKp)Ob z*xcu38Z&d5<-NBS)@jRD+*!W*cf-m_wmxDEqBf?czI%3U0J$Xik;lA`jg}VH?(S(V zE!M3;X2B8w0TnnW&6(8;_Uc)WD;Ms6PKP+s(sFgO!}B!^ES~GDt4qLPxwYB)^7)XA zZwo9zDy-B0B+jT6V=!=bo(zs_8{eBA78gT9GH$(DVhz;4VAYwz+bOIdZ-PNb|I&rl z^XG=vFLF)1{&nT2*0vMz#}7^9hXzzf&ZdKlEj{LihP;|;Ywqn35ajP?H?7t|i-Un% z&&kxee@9B{nwgv1+S-~0)E1{ob1^Wn`F2isurqThKK=3%&;`@{0{!D- z&CSj80t;uPu&FaJFtSXKH#ajgGj}=sEad7US6jP0|Db@0j)?(5@sf<7`~a9>s;wCa zm^)spe{uxGFmrJYI9cOh7s$>8Npkt-5EWB1UKc`{W{y5Ce$1+nM9Cr;);=Ju#N^62OSlJMn7omiUgP&ErsYzT~iGxcW aE(`!K@+CXylaC4j0000 + + + + Code Coverage of pyEDAA.ProjectModel + + + + + +
+
+

Code Coverage of pyEDAA.ProjectModel: + 71% +

+ +
+ +
+ + +
+
+

+ Files + Functions + Classes +

+

+ coverage.py v7.6.4, + created at 2024-11-08 22:18 +0000 +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Filefunctionstatementsmissingexcludedbranchespartialcoverage
pyEDAA/ProjectModel/Attributes.pyKeyValueAttribute.__init__20000100%
pyEDAA/ProjectModel/Attributes.pyKeyValueAttribute.__getitem__10000100%
pyEDAA/ProjectModel/Attributes.pyKeyValueAttribute.__setitem__10000100%
pyEDAA/ProjectModel/Attributes.py(no function)100000100%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVivadoFileMixIn._registerAttributes10000100%
pyEDAA/ProjectModel/Xilinx/Vivado.pyConstraintFile._registerAttributes20000100%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVerilogSourceFile._registerAttributes220000%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVHDLSourceFile._registerAttributes20000100%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVivadoProjectFile.__init__20000100%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVivadoProjectFile.ProjectModel10000100%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVivadoProjectFile.Parse8302160%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVivadoProjectFile._ParseRootElement4004188%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVivadoProjectFile._ParseFileSets30040100%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVivadoProjectFile._ParseFileSet80080100%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVivadoProjectFile._ParseFile11508147%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVivadoProjectFile._ParseVHDLFile151014193%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVivadoProjectFile._ParseDefaultFile110000%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVivadoProjectFile._ParseXDCFile10000100%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVivadoProjectFile._ParseVerilogFile110000%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVivadoProjectFile._ParseXCIFile110000%
pyEDAA/ProjectModel/Xilinx/Vivado.pyVivadoProjectFile._ParseFileSetConfig40060100%
pyEDAA/ProjectModel/Xilinx/Vivado.py(no function)530000100%
pyEDAA/ProjectModel/__init__.pyAttribute.resolve7506123%
pyEDAA/ProjectModel/__init__.pyFileType.__init__20000100%
pyEDAA/ProjectModel/__init__.pyFileType.__new__30000100%
pyEDAA/ProjectModel/__init__.pyFileType.__getattr__30020100%
pyEDAA/ProjectModel/__init__.pyFileType.__contains__10000100%
pyEDAA/ProjectModel/__init__.pyFile.__init__231010194%
pyEDAA/ProjectModel/__init__.pyFile._registerAttributes10000100%
pyEDAA/ProjectModel/__init__.pyFile.FileType10000100%
pyEDAA/ProjectModel/__init__.pyFile.Path10000100%
pyEDAA/ProjectModel/__init__.pyFile.ResolvedPath8306357%
pyEDAA/ProjectModel/__init__.pyFile.Project10000100%
pyEDAA/ProjectModel/__init__.pyFile.Project3002180%
pyEDAA/ProjectModel/__init__.pyFile.Design10000100%
pyEDAA/ProjectModel/__init__.pyFile.Design7206254%
pyEDAA/ProjectModel/__init__.pyFile.FileSet10000100%
pyEDAA/ProjectModel/__init__.pyFile.FileSet20000100%
pyEDAA/ProjectModel/__init__.pyFile.Validate168012650%
pyEDAA/ProjectModel/__init__.pyFile.__len__110000%
pyEDAA/ProjectModel/__init__.pyFile.__getitem__11502154%
pyEDAA/ProjectModel/__init__.pyFile.__setitem__3102160%
pyEDAA/ProjectModel/__init__.pyFile.__delitem__3102160%
pyEDAA/ProjectModel/__init__.pyFile.__str__110000%
pyEDAA/ProjectModel/__init__.pyVHDLSourceFile.__init__2113210239%
pyEDAA/ProjectModel/__init__.pyVHDLSourceFile.Validate9400056%
pyEDAA/ProjectModel/__init__.pyVHDLSourceFile.VHDLLibrary50040100%
pyEDAA/ProjectModel/__init__.pyVHDLSourceFile.VHDLLibrary20000100%
pyEDAA/ProjectModel/__init__.pyVHDLSourceFile.VHDLVersion50040100%
pyEDAA/ProjectModel/__init__.pyVHDLSourceFile.VHDLVersion10000100%
pyEDAA/ProjectModel/__init__.pyVHDLSourceFile.__repr__110000%
pyEDAA/ProjectModel/__init__.pyVerilogMixIn.VerilogVersion50040100%
pyEDAA/ProjectModel/__init__.pyVerilogMixIn.VerilogVersion10000100%
pyEDAA/ProjectModel/__init__.pySystemVerilogMixIn.SVVersion50040100%
pyEDAA/ProjectModel/__init__.pySystemVerilogMixIn.SVVersion10000100%
pyEDAA/ProjectModel/__init__.pyVerilogBaseFile.__init__20000100%
pyEDAA/ProjectModel/__init__.pySystemRDLSourceFile.__init__220000%
pyEDAA/ProjectModel/__init__.pySystemRDLSourceFile.SystemRDLVersion550400%
pyEDAA/ProjectModel/__init__.pySystemRDLSourceFile.SystemRDLVersion110000%
pyEDAA/ProjectModel/__init__.pyFileSet.__init__240060100%
pyEDAA/ProjectModel/__init__.pyFileSet.Name10000100%
pyEDAA/ProjectModel/__init__.pyFileSet.Name110000%
pyEDAA/ProjectModel/__init__.pyFileSet.TopLevel110000%
pyEDAA/ProjectModel/__init__.pyFileSet.TopLevel10000100%
pyEDAA/ProjectModel/__init__.pyFileSet.Project10000100%
pyEDAA/ProjectModel/__init__.pyFileSet.Project10000100%
pyEDAA/ProjectModel/__init__.pyFileSet.Design5104178%
pyEDAA/ProjectModel/__init__.pyFileSet.Design5204144%
pyEDAA/ProjectModel/__init__.pyFileSet.Directory10000100%
pyEDAA/ProjectModel/__init__.pyFileSet.Directory10000100%
pyEDAA/ProjectModel/__init__.pyFileSet.ResolvedPath136010448%
pyEDAA/ProjectModel/__init__.pyFileSet.Parent110000%
pyEDAA/ProjectModel/__init__.pyFileSet.Parent20000100%
pyEDAA/ProjectModel/__init__.pyFileSet.FileSets10000100%
pyEDAA/ProjectModel/__init__.pyFileSet.Files2115022330%
pyEDAA/ProjectModel/__init__.pyFileSet.AddFileSet8306357%
pyEDAA/ProjectModel/__init__.pyFileSet.AddFileSets20020100%
pyEDAA/ProjectModel/__init__.pyFileSet.FileSetCount110000%
pyEDAA/ProjectModel/__init__.pyFileSet.TotalFileSetCount440200%
pyEDAA/ProjectModel/__init__.pyFileSet.AddFile11246182%
pyEDAA/ProjectModel/__init__.pyFileSet.AddFiles20020100%
pyEDAA/ProjectModel/__init__.pyFileSet.FileCount110000%
pyEDAA/ProjectModel/__init__.pyFileSet.TotalFileCount440200%
pyEDAA/ProjectModel/__init__.pyFileSet.Validate2010016850%
pyEDAA/ProjectModel/__init__.pyFileSet.GetOrCreateVHDLLibrary90040100%
pyEDAA/ProjectModel/__init__.pyFileSet.VHDLLibrary7306154%
pyEDAA/ProjectModel/__init__.pyFileSet.VHDLLibrary10000100%
pyEDAA/ProjectModel/__init__.pyFileSet.VHDLVersion7106185%
pyEDAA/ProjectModel/__init__.pyFileSet.VHDLVersion10000100%
pyEDAA/ProjectModel/__init__.pyFileSet.VerilogVersion7106185%
pyEDAA/ProjectModel/__init__.pyFileSet.VerilogVersion10000100%
pyEDAA/ProjectModel/__init__.pyFileSet.SVVersion7106185%
pyEDAA/ProjectModel/__init__.pyFileSet.SVVersion10000100%
pyEDAA/ProjectModel/__init__.pyFileSet.SRDLVersion770600%
pyEDAA/ProjectModel/__init__.pyFileSet.SRDLVersion110000%
pyEDAA/ProjectModel/__init__.pyFileSet.__len__110000%
pyEDAA/ProjectModel/__init__.pyFileSet.__getitem__6302150%
pyEDAA/ProjectModel/__init__.pyFileSet.__setitem__3102160%
pyEDAA/ProjectModel/__init__.pyFileSet.__delitem__3102160%
pyEDAA/ProjectModel/__init__.pyFileSet.__str__110000%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.__init__20208286%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.Name10000100%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.Project10000100%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.Project7206362%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.Design10000100%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.Design141401200%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.Files220200%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.VHDLVersion5104178%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.VHDLVersion10000100%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.AddDependency110000%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.AddFile4222150%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.AddFiles440400%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.FileCount110000%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.__len__110000%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.__getitem__660200%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.__setitem__330200%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.__delitem__330200%
pyEDAA/ProjectModel/__init__.pyVHDLLibrary.__str__110000%
pyEDAA/ProjectModel/__init__.pyDesign.__init__170020100%
pyEDAA/ProjectModel/__init__.pyDesign.Name10000100%
pyEDAA/ProjectModel/__init__.pyDesign.Name110000%
pyEDAA/ProjectModel/__init__.pyDesign.TopLevel110000%
pyEDAA/ProjectModel/__init__.pyDesign.TopLevel110000%
pyEDAA/ProjectModel/__init__.pyDesign.Project10000100%
pyEDAA/ProjectModel/__init__.pyDesign.Project10000100%
pyEDAA/ProjectModel/__init__.pyDesign.Directory10000100%
pyEDAA/ProjectModel/__init__.pyDesign.Directory10000100%
pyEDAA/ProjectModel/__init__.pyDesign.ResolvedPath8306357%
pyEDAA/ProjectModel/__init__.pyDesign.DefaultFileSet10000100%
pyEDAA/ProjectModel/__init__.pyDesign.DefaultFileSet990800%
pyEDAA/ProjectModel/__init__.pyDesign.FileSets10000100%
pyEDAA/ProjectModel/__init__.pyDesign.Files134012172%
pyEDAA/ProjectModel/__init__.pyDesign.Validate2311016754%
pyEDAA/ProjectModel/__init__.pyDesign.VHDLLibraries10000100%
pyEDAA/ProjectModel/__init__.pyDesign.VHDLVersion5104178%
pyEDAA/ProjectModel/__init__.pyDesign.VHDLVersion10000100%
pyEDAA/ProjectModel/__init__.pyDesign.VerilogVersion5104178%
pyEDAA/ProjectModel/__init__.pyDesign.VerilogVersion10000100%
pyEDAA/ProjectModel/__init__.pyDesign.SVVersion5104178%
pyEDAA/ProjectModel/__init__.pyDesign.SVVersion10000100%
pyEDAA/ProjectModel/__init__.pyDesign.SRDLVersion550400%
pyEDAA/ProjectModel/__init__.pyDesign.SRDLVersion110000%
pyEDAA/ProjectModel/__init__.pyDesign.ExternalVHDLLibraries110000%
pyEDAA/ProjectModel/__init__.pyDesign.AddFileSet990600%
pyEDAA/ProjectModel/__init__.pyDesign.AddFileSets220200%
pyEDAA/ProjectModel/__init__.pyDesign.FileSetCount110000%
pyEDAA/ProjectModel/__init__.pyDesign.TotalFileSetCount440200%
pyEDAA/ProjectModel/__init__.pyDesign.AddFile3102160%
pyEDAA/ProjectModel/__init__.pyDesign.AddFiles220200%
pyEDAA/ProjectModel/__init__.pyDesign.AddVHDLLibrary440400%
pyEDAA/ProjectModel/__init__.pyDesign.__len__110000%
pyEDAA/ProjectModel/__init__.pyDesign.__getitem__6302150%
pyEDAA/ProjectModel/__init__.pyDesign.__setitem__3102160%
pyEDAA/ProjectModel/__init__.pyDesign.__delitem__3102160%
pyEDAA/ProjectModel/__init__.pyDesign.__str__110000%
pyEDAA/ProjectModel/__init__.pyProject.__init__80000100%
pyEDAA/ProjectModel/__init__.pyProject.Name10000100%
pyEDAA/ProjectModel/__init__.pyProject.RootDirectory10000100%
pyEDAA/ProjectModel/__init__.pyProject.RootDirectory10000100%
pyEDAA/ProjectModel/__init__.pyProject.ResolvedPath40020100%
pyEDAA/ProjectModel/__init__.pyProject.Designs10000100%
pyEDAA/ProjectModel/__init__.pyProject.DefaultDesign10000100%
pyEDAA/ProjectModel/__init__.pyProject.Validate2110014654%
pyEDAA/ProjectModel/__init__.pyProject.DesignCount110000%
pyEDAA/ProjectModel/__init__.pyProject.VHDLVersion10000100%
pyEDAA/ProjectModel/__init__.pyProject.VHDLVersion10000100%
pyEDAA/ProjectModel/__init__.pyProject.VerilogVersion10000100%
pyEDAA/ProjectModel/__init__.pyProject.VerilogVersion10000100%
pyEDAA/ProjectModel/__init__.pyProject.SVVersion10000100%
pyEDAA/ProjectModel/__init__.pyProject.SVVersion10000100%
pyEDAA/ProjectModel/__init__.pyProject.SRDLVersion110000%
pyEDAA/ProjectModel/__init__.pyProject.SRDLVersion110000%
pyEDAA/ProjectModel/__init__.pyProject.__len__110000%
pyEDAA/ProjectModel/__init__.pyProject.__getitem__6302150%
pyEDAA/ProjectModel/__init__.pyProject.__setitem__3102160%
pyEDAA/ProjectModel/__init__.pyProject.__delitem__3102160%
pyEDAA/ProjectModel/__init__.pyProject.__str__110000%
pyEDAA/ProjectModel/__init__.py(no function)4260000100%
Total 120427483988571%
+

+ No items found using the specified filter. +

+
+ + + diff --git a/coverage/index.html b/coverage/index.html new file mode 100644 index 00000000..901d504d --- /dev/null +++ b/coverage/index.html @@ -0,0 +1,138 @@ + + + + + Code Coverage of pyEDAA.ProjectModel + + + + + +
+
+

Code Coverage of pyEDAA.ProjectModel: + 71% +

+ +
+ +
+ + +
+
+

+ Files + Functions + Classes +

+

+ coverage.py v7.6.4, + created at 2024-11-08 22:18 +0000 +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Filestatementsmissingexcludedbranchespartialcoverage
pyEDAA/ProjectModel/Attributes.py140000100%
pyEDAA/ProjectModel/Xilinx/Vivado.py12014046487%
pyEDAA/ProjectModel/__init__.py107026083528169%
Total120427483988571%
+

+ No items found using the specified filter. +

+

1 empty file skipped.

+
+ + + diff --git a/coverage/keybd_closed_cb_ce680311.png b/coverage/keybd_closed_cb_ce680311.png new file mode 100644 index 0000000000000000000000000000000000000000..ba119c47df81ed2bbd27a06988abf700139c4f99 GIT binary patch literal 9004 zcmeHLc{tSF+aIY=A^R4_poB4tZAN2XC;O7M(inrW3}(h&Q4}dl*&-65$i9^&vW6_# zcM4g`Qix=GhkBl;=lwnJ@Ap2}^}hc-b6vBXb3XUyzR%~}_c`-Dw+!?&>5p(90RRB> zXe~7($~PP3eT?=X<@3~Q1w84vX~IoSx~1#~02+TopXK(db;4v6!{+W`RHLkkHO zo;+s?)puc`+$yOwHv>I$5^8v^F3<|$44HA8AFnFB0cAP|C`p}aSMJK*-CUB{eQ!;K z-9Ju3OQ+xVPr3P#o4>_lNBT;M+1vgV&B~6!naOGHb-LFA9TkfHv1IFA1Y!Iz!Zl3) z%c#-^zNWPq7U_}6I7aHSmFWi125RZrNBKyvnV^?64)zviS;E!UD%LaGRl6@zn!3E{ zJ`B$5``cH_3a)t1#6I7d==JeB_IcSU%=I#DrRCBGm8GvCmA=+XHEvC2SIfsNa0(h9 z7P^C4U`W@@`9p>2f^zyb5B=lpc*RZMn-%%IqrxSWQF8{ec3i?-AB(_IVe z)XgT>Y^u41MwOMFvU=I4?!^#jaS-%bjnx@ zmL44yVEslR_ynm18F!u}Ru#moEn3EE?1=9@$B1Z5aLi5b8{&?V(IAYBzIar!SiY3< z`l0V)djHtrImy}(!7x-Pmq+njM)JFQ9mx*(C+9a3M)(_SW|lrN=gfxFhStu^zvynS zm@gl;>d8i8wpUkX42vS3BEzE3-yctH%t0#N%s+6-&_<*Fe7+h=`=FM?DOg1)eGL~~ zQvIFm$D*lqEh07XrXY=jb%hdyP4)`wyMCb$=-z9(lOme9=tirVkb)_GOl2MJn;=Ky z^0pV1owR7KP-BSxhI@@@+gG0roD-kXE1;!#R7KY1QiUbyDdTElm|ul7{mMdF1%UDJ z_vp=Vo!TCF?D*?u% zk~}4!xK2MSQd-QKC0${G=ZRv2x8%8ZqdfR!?Dv=5Mj^8WU)?iH;C?o6rSQy*^YwQb zf@5V)q=xah#a3UEIBC~N7on(p4jQd4K$|i7k`d8mw|M{Mxapl46Z^X^9U}JgqH#;T z`CTzafpMD+J-LjzF+3Xau>xM_sXisRj6m-287~i9g|%gHc}v77>n_+p7ZgmJszx!b zSmL4wV;&*5Z|zaCk`rOYFdOjZLLQr!WSV6AlaqYh_OE)>rYdtx`gk$yAMO=-E1b~J zIZY6gM*}1UWsJ)TW(pf1=h?lJy_0TFOr|nALGW>$IE1E7z+$`^2WJY+>$$nJo8Rs` z)xS>AH{N~X3+b=2+8Q_|n(1JoGv55r>TuwBV~MXE&9?3Zw>cIxnOPNs#gh~C4Zo=k z&!s;5)^6UG>!`?hh0Q|r|Qbm>}pgtOt23Vh!NSibozH$`#LSiYL)HR4bkfEJMa zBHwC3TaHx|BzD|MXAr>mm&FbZXeEX-=W}Ji&!pji4sO$#0Wk^Q7j%{8#bJPn$C=E% zPlB}0)@Ti^r_HMJrTMN?9~4LQbIiUiOKBVNm_QjABKY4;zC88yVjvB>ZETNzr%^(~ zI3U&Ont?P`r&4 z#Bp)jcVV_N_{c1_qW}_`dQm)D`NG?h{+S!YOaUgWna4i8SuoLcXAZ|#Jh&GNn7B}3 z?vZ8I{LpmCYT=@6)dLPd@|(;d<08ufov%+V?$mgUYQHYTrc%eA=CDUzK}v|G&9}yJ z)|g*=+RH1IQ>rvkY9UIam=fkxWDyGIKQ2RU{GqOQjD8nG#sl+$V=?wpzJdT=wlNWr z1%lw&+;kVs(z?e=YRWRA&jc75rQ~({*TS<( z8X!j>B}?Bxrrp%wEE7yBefQ?*nM20~+ZoQK(NO_wA`RNhsqVkXHy|sod@mqen=B#@ zmLi=x2*o9rWqTMWoB&qdZph$~qkJJTVNc*8^hU?gH_fY{GYPEBE8Q{j0Y$tvjMv%3 z)j#EyBf^7n)2d8IXDYX2O0S%ZTnGhg4Ss#sEIATKpE_E4TU=GimrD5F6K(%*+T-!o z?Se7^Vm`$ZKDwq+=~jf?w0qC$Kr&R-;IF#{iLF*8zKu8(=#chRO;>x zdM;h{i{RLpJgS!B-ueTFs8&4U4+D8|7nP~UZ@P`J;*0sj^#f_WqT#xpA?@qHonGB& zQ<^;OLtOG1w#)N~&@b0caUL7syAsAxV#R`n>-+eVL9aZwnlklzE>-6!1#!tVA`uNo z>Gv^P)sohc~g_1YMC;^f(N<{2y5C^;QCEXo;LQ^#$0 zr>jCrdoeXuff!dJ^`#=Wy2Gumo^Qt7BZrI~G+Pyl_kL>is3P0^JlE;Sjm-YfF~I>t z_KeNpK|5U&F4;v?WS&#l(jxUWDarfcIcl=-6!8>^S`57!M6;hZea5IFA@)2+*Rt85 zi-MBs_b^DU8LygXXQGkG+86N7<%M|baM(orG*ASffC`p!?@m{qd}IcYmZyi^d}#Q& zNjk-0@CajpUI-gPm20ERVDO!L8@p`tMJ69FD(ASIkdoLdiRV6h9TPKRz>2WK4upHd z6OZK33EP?`GoJkXh)S035}uLUO$;TlXwNdMg-WOhLB)7a`-%*a9lFmjf6n+4ZmIHN z-V@$ z8PXsoR4*`5RwXz=A8|5;aXKtSHFccj%dG7cO~UBJnt)61K>-uPX)`vu{7fcX6_>zZ zw_2V&Li+7mxbf!f7{Rk&VVyY!UtZywac%g!cH+xh#j$a`uf?XWl<``t`36W;p7=_* zO6uf~2{sAdkZn=Ts@p0>8N8rzw2ZLS@$ibV-c-QmG@%|3gUUrRxu=e*ekhTa+f?8q z3$JVGPr9w$VQG~QCq~Y=2ThLIH!T@(>{NihJ6nj*HA_C#Popv)CBa)+UI-bx8u8zfCT^*1|k z&N9oFYsZEijPn31Yx_yO5pFs>0tOAV=oRx~Wpy5ie&S_449m4R^{LWQMA~}vocV1O zIf#1ZV85E>tvZE4mz~zn{hs!pkIQM;EvZMimqiPAJu-9P@mId&nb$lsrICS=)zU3~ zn>a#9>}5*3N)9;PTMZ)$`5k} z?iG}Rwj$>Y*|(D3S3e&fxhaPHma8@vwu(cwdlaCjX+NIK6=$H4U`rfzcWQVOhp{fnzuZhgCCGpw|p zTi`>cv~xVzdx|^`C0vXdlMwPae3S?>3|7v$e*Bs6-5gS>>FMHk_r2M(ADOV{KV7+6 zA@5Q(mdx%7J}MY}K461iuQ}5GwDGI=Yc&g0MZHu)7gC3{5@QZj6SJl*o0MS2Cl_ia zyK?9QmC9tJ6yn{EA-erJ4wk$+!E#X(s~9h^HOmQ_|6V_s1)k;%9Q6Niw}SyT?jxl4 z;HYz2$Nj$8Q_*Xo`TWEUx^Q9b+ik@$o39`mlY&P}G8wnjdE+Dlj?uL;$aB$n;x zWoh-M_u>9}_Ok@d_uidMqz10zJc}RQijPW3Fs&~1am=j*+A$QWTvxf9)6n;n8zTQW z!Q_J1%apTsJzLF`#^P_#mRv2Ya_keUE7iMSP!ha-WQoo0vZZG?gyR;+4q8F6tL#u< zRj8Hu5f-p1$J;)4?WpGL{4@HmJ6&tF9A5Tc8Trp>;Y>{^s?Q1&bam}?OjsnKd?|Z82aix26wUOLxbEW~E)|CgJ#)MLf_me# zv4?F$o@A~Um)6>HlM0=3Bd-vc91EM}D+t6-@!}O%i*&Wl%@#C8X+?5+nv`oPu!!=5 znbL+Fk_#J_%8vOq^FIv~5N(nk03kyo1p@l|1c+rO^zCG3bk2?|%AF;*|4si1XM<`a z1NY0-8$wv?&129!(g_A1lXR!+pD*1*cF?T~e1d6*G1Fz)jcSaZoKpxtA%FNnKP2jo zLXn@OR#1z@6zuH%mMB98}-t zHJqClsZ!G5xMSgIs_=<8sBePXxfoXsuvy`|buON9BX%s-o>OVLA)k3W=wKnw1?so$ zEjm0aS=zu@Xu#;{A)QTjJ$a9_={++ACkRY*sk3jLk&Fu}RxR<-DXR<`5`$VNG*wJE zidM6VzaQ!M0gbQM98@x@;#0qUS8O)p6mrYwTk*;8J~!ovbY6jon^Ki}uggd3#J5G8 z>awvtF85Y<9yE{Iag}J7O7)1O=ylk^255@XmV5J06-{xaaSNASZoTKKp~$tSxdUI~ zU1RZ&UuW37Ro&_ryj^cSt$Jd&pt|+h!A&dwcr&`S=R5E`=6Tm`+(qGm@$YZ8(8@a$ zXfo@Rwtvm7N3RMmVCb7radAs-@QtCXx^CQ-<)V>QPLZy@jH{#dc4#(y zV)6Hp{ZMz!|NG8!>i01gZMy)G<8Hf2X7e&LH_gOaajW<<^Xi55@OnlY*|S|*TS8;u_nHbv7lgmmZ+Q<5 zi!*lLCJmdpyzl(L${$C?(pVo|oR%r~x_B_ocPePa_);27^=n4L=`toZ;xdBut9rSv z?wDQ7j2I3WQBdhz%X7`2YaG_y|wA!7|s?k;A&WNMLMTZEzCaE^d??E&u?f=ejQBR~|< z)=thyP2(p8r6mt?Ad}tXAP_GvF9|P630I;$1cpQ+Ay7C34hK^ZV3H4kjPV8&NP>G5 zKRDEIBrFl{M#j4mfP0)68&?mqJP1S?2mU0djAGTjDV;wZ?6vplNn~3Hn$nP>%!dMi zz@bnC7zzi&k&s{QDWkf&zgrVXKUJjY3Gv3bL0}S4h>OdgEJ$Q^&p-VAr3J}^a*+rz z!jW7(h*+GuCyqcC{MD(Ovj^!{pB^OKUe|uy&bD?CN>KZrf3?v>>l*xSvnQiH-o^ViN$%FRdm9url;%(*jf5H$*S)8;i0xWHdl>$p);nH9v0)YfW?Vz$! zNCeUbi9`NEg(i^57y=fzM@1o*z*Bf6?QCV>2p9}(BLlYsOCfMjFv1pw1mlo)Py{8v zppw{MDfEeWN+n>Ne~oI7%9cU}mz0r3!es2gNF0t5jkGipjIo2lz;-e)7}Ul_#!eDv zw;#>kI>;#-pyfeu3Fsd^2F@6=oh#8r9;A!G0`-mm7%{=S;Ec(bJ=I_`FodKGQVNEY zmXwr4{9*jpDl%4{ggQZ5Ac z%wYTdl*!1c5^)%^E78Q&)ma|27c6j(a=)g4sGrp$r{jv>>M2 z6y)E5|Aooe!PSfKzvKA>`a6pfK3=E8vL14ksP&f=>gOP?}rG6ye@9ZR3 zJF*vsh*P$w390i!FV~~_Hv6t2Zl<4VUi|rNja#boFt{%q~xGb z(2petq9A*_>~B*>?d?Olx^lmYg4)}sH2>G42RE; literal 0 HcmV?d00001 diff --git a/coverage/status.json b/coverage/status.json new file mode 100644 index 00000000..8d9629d4 --- /dev/null +++ b/coverage/status.json @@ -0,0 +1 @@ +{"note":"This file is an internal implementation detail to speed up HTML report generation. Its format can change at any time. You might be looking for the JSON report: https://coverage.rtfd.io/cmd.html#cmd-json","format":5,"version":"7.6.4","globals":"c88f02a83713e852518744457a32a5c8","files":{"z_bb657af29d23493a_Attributes_py":{"hash":"2197b72ee1db4dd698406a51d0b3d95b","index":{"url":"z_bb657af29d23493a_Attributes_py.html","file":"pyEDAA/ProjectModel/Attributes.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":14,"n_excluded":0,"n_missing":0,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_f31a6c1cb708999d_Vivado_py":{"hash":"f35053e5df38473202cbe96d14d12b9c","index":{"url":"z_f31a6c1cb708999d_Vivado_py.html","file":"pyEDAA/ProjectModel/Xilinx/Vivado.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":120,"n_excluded":0,"n_missing":14,"n_branches":46,"n_partial_branches":4,"n_missing_branches":8}}},"z_bb657af29d23493a___init___py":{"hash":"58eef0684752ffbefb99f3b78af865b0","index":{"url":"z_bb657af29d23493a___init___py.html","file":"pyEDAA/ProjectModel/__init__.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":1070,"n_excluded":8,"n_missing":260,"n_branches":352,"n_partial_branches":81,"n_missing_branches":177}}}}} \ No newline at end of file diff --git a/coverage/style_cb_8e611ae1.css b/coverage/style_cb_8e611ae1.css new file mode 100644 index 00000000..3cdaf05a --- /dev/null +++ b/coverage/style_cb_8e611ae1.css @@ -0,0 +1,337 @@ +@charset "UTF-8"; +/* Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 */ +/* For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt */ +/* Don't edit this .css file. Edit the .scss file instead! */ +html, body, h1, h2, h3, p, table, td, th { margin: 0; padding: 0; border: 0; font-weight: inherit; font-style: inherit; font-size: 100%; font-family: inherit; vertical-align: baseline; } + +body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; font-size: 1em; background: #fff; color: #000; } + +@media (prefers-color-scheme: dark) { body { background: #1e1e1e; } } + +@media (prefers-color-scheme: dark) { body { color: #eee; } } + +html > body { font-size: 16px; } + +a:active, a:focus { outline: 2px dashed #007acc; } + +p { font-size: .875em; line-height: 1.4em; } + +table { border-collapse: collapse; } + +td { vertical-align: top; } + +table tr.hidden { display: none !important; } + +p#no_rows { display: none; font-size: 1.15em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; } + +a.nav { text-decoration: none; color: inherit; } + +a.nav:hover { text-decoration: underline; color: inherit; } + +.hidden { display: none; } + +header { background: #f8f8f8; width: 100%; z-index: 2; border-bottom: 1px solid #ccc; } + +@media (prefers-color-scheme: dark) { header { background: black; } } + +@media (prefers-color-scheme: dark) { header { border-color: #333; } } + +header .content { padding: 1rem 3.5rem; } + +header h2 { margin-top: .5em; font-size: 1em; } + +header h2 a.button { font-family: inherit; font-size: inherit; border: 1px solid; border-radius: .2em; background: #eee; color: inherit; text-decoration: none; padding: .1em .5em; margin: 1px calc(.1em + 1px); cursor: pointer; border-color: #ccc; } + +@media (prefers-color-scheme: dark) { header h2 a.button { background: #333; } } + +@media (prefers-color-scheme: dark) { header h2 a.button { border-color: #444; } } + +header h2 a.button.current { border: 2px solid; background: #fff; border-color: #999; cursor: default; } + +@media (prefers-color-scheme: dark) { header h2 a.button.current { background: #1e1e1e; } } + +@media (prefers-color-scheme: dark) { header h2 a.button.current { border-color: #777; } } + +header p.text { margin: .5em 0 -.5em; color: #666; font-style: italic; } + +@media (prefers-color-scheme: dark) { header p.text { color: #aaa; } } + +header.sticky { position: fixed; left: 0; right: 0; height: 2.5em; } + +header.sticky .text { display: none; } + +header.sticky h1, header.sticky h2 { font-size: 1em; margin-top: 0; display: inline-block; } + +header.sticky .content { padding: 0.5rem 3.5rem; } + +header.sticky .content p { font-size: 1em; } + +header.sticky ~ #source { padding-top: 6.5em; } + +main { position: relative; z-index: 1; } + +footer { margin: 1rem 3.5rem; } + +footer .content { padding: 0; color: #666; font-style: italic; } + +@media (prefers-color-scheme: dark) { footer .content { color: #aaa; } } + +#index { margin: 1rem 0 0 3.5rem; } + +h1 { font-size: 1.25em; display: inline-block; } + +#filter_container { float: right; margin: 0 2em 0 0; line-height: 1.66em; } + +#filter_container #filter { width: 10em; padding: 0.2em 0.5em; border: 2px solid #ccc; background: #fff; color: #000; } + +@media (prefers-color-scheme: dark) { #filter_container #filter { border-color: #444; } } + +@media (prefers-color-scheme: dark) { #filter_container #filter { background: #1e1e1e; } } + +@media (prefers-color-scheme: dark) { #filter_container #filter { color: #eee; } } + +#filter_container #filter:focus { border-color: #007acc; } + +#filter_container :disabled ~ label { color: #ccc; } + +@media (prefers-color-scheme: dark) { #filter_container :disabled ~ label { color: #444; } } + +#filter_container label { font-size: .875em; color: #666; } + +@media (prefers-color-scheme: dark) { #filter_container label { color: #aaa; } } + +header button { font-family: inherit; font-size: inherit; border: 1px solid; border-radius: .2em; background: #eee; color: inherit; text-decoration: none; padding: .1em .5em; margin: 1px calc(.1em + 1px); cursor: pointer; border-color: #ccc; } + +@media (prefers-color-scheme: dark) { header button { background: #333; } } + +@media (prefers-color-scheme: dark) { header button { border-color: #444; } } + +header button:active, header button:focus { outline: 2px dashed #007acc; } + +header button.run { background: #eeffee; } + +@media (prefers-color-scheme: dark) { header button.run { background: #373d29; } } + +header button.run.show_run { background: #dfd; border: 2px solid #00dd00; margin: 0 .1em; } + +@media (prefers-color-scheme: dark) { header button.run.show_run { background: #373d29; } } + +header button.mis { background: #ffeeee; } + +@media (prefers-color-scheme: dark) { header button.mis { background: #4b1818; } } + +header button.mis.show_mis { background: #fdd; border: 2px solid #ff0000; margin: 0 .1em; } + +@media (prefers-color-scheme: dark) { header button.mis.show_mis { background: #4b1818; } } + +header button.exc { background: #f7f7f7; } + +@media (prefers-color-scheme: dark) { header button.exc { background: #333; } } + +header button.exc.show_exc { background: #eee; border: 2px solid #808080; margin: 0 .1em; } + +@media (prefers-color-scheme: dark) { header button.exc.show_exc { background: #333; } } + +header button.par { background: #ffffd5; } + +@media (prefers-color-scheme: dark) { header button.par { background: #650; } } + +header button.par.show_par { background: #ffa; border: 2px solid #bbbb00; margin: 0 .1em; } + +@media (prefers-color-scheme: dark) { header button.par.show_par { background: #650; } } + +#help_panel, #source p .annotate.long { display: none; position: absolute; z-index: 999; background: #ffffcc; border: 1px solid #888; border-radius: .2em; color: #333; padding: .25em .5em; } + +#source p .annotate.long { white-space: normal; float: right; top: 1.75em; right: 1em; height: auto; } + +#help_panel_wrapper { float: right; position: relative; } + +#keyboard_icon { margin: 5px; } + +#help_panel_state { display: none; } + +#help_panel { top: 25px; right: 0; padding: .75em; border: 1px solid #883; color: #333; } + +#help_panel .keyhelp p { margin-top: .75em; } + +#help_panel .legend { font-style: italic; margin-bottom: 1em; } + +.indexfile #help_panel { width: 25em; } + +.pyfile #help_panel { width: 18em; } + +#help_panel_state:checked ~ #help_panel { display: block; } + +kbd { border: 1px solid black; border-color: #888 #333 #333 #888; padding: .1em .35em; font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-weight: bold; background: #eee; border-radius: 3px; } + +#source { padding: 1em 0 1em 3.5rem; font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; } + +#source p { position: relative; white-space: pre; } + +#source p * { box-sizing: border-box; } + +#source p .n { float: left; text-align: right; width: 3.5rem; box-sizing: border-box; margin-left: -3.5rem; padding-right: 1em; color: #999; user-select: none; } + +@media (prefers-color-scheme: dark) { #source p .n { color: #777; } } + +#source p .n.highlight { background: #ffdd00; } + +#source p .n a { scroll-margin-top: 6em; text-decoration: none; color: #999; } + +@media (prefers-color-scheme: dark) { #source p .n a { color: #777; } } + +#source p .n a:hover { text-decoration: underline; color: #999; } + +@media (prefers-color-scheme: dark) { #source p .n a:hover { color: #777; } } + +#source p .t { display: inline-block; width: 100%; box-sizing: border-box; margin-left: -.5em; padding-left: 0.3em; border-left: 0.2em solid #fff; } + +@media (prefers-color-scheme: dark) { #source p .t { border-color: #1e1e1e; } } + +#source p .t:hover { background: #f2f2f2; } + +@media (prefers-color-scheme: dark) { #source p .t:hover { background: #282828; } } + +#source p .t:hover ~ .r .annotate.long { display: block; } + +#source p .t .com { color: #008000; font-style: italic; line-height: 1px; } + +@media (prefers-color-scheme: dark) { #source p .t .com { color: #6a9955; } } + +#source p .t .key { font-weight: bold; line-height: 1px; } + +#source p .t .str { color: #0451a5; } + +@media (prefers-color-scheme: dark) { #source p .t .str { color: #9cdcfe; } } + +#source p.mis .t { border-left: 0.2em solid #ff0000; } + +#source p.mis.show_mis .t { background: #fdd; } + +@media (prefers-color-scheme: dark) { #source p.mis.show_mis .t { background: #4b1818; } } + +#source p.mis.show_mis .t:hover { background: #f2d2d2; } + +@media (prefers-color-scheme: dark) { #source p.mis.show_mis .t:hover { background: #532323; } } + +#source p.run .t { border-left: 0.2em solid #00dd00; } + +#source p.run.show_run .t { background: #dfd; } + +@media (prefers-color-scheme: dark) { #source p.run.show_run .t { background: #373d29; } } + +#source p.run.show_run .t:hover { background: #d2f2d2; } + +@media (prefers-color-scheme: dark) { #source p.run.show_run .t:hover { background: #404633; } } + +#source p.exc .t { border-left: 0.2em solid #808080; } + +#source p.exc.show_exc .t { background: #eee; } + +@media (prefers-color-scheme: dark) { #source p.exc.show_exc .t { background: #333; } } + +#source p.exc.show_exc .t:hover { background: #e2e2e2; } + +@media (prefers-color-scheme: dark) { #source p.exc.show_exc .t:hover { background: #3c3c3c; } } + +#source p.par .t { border-left: 0.2em solid #bbbb00; } + +#source p.par.show_par .t { background: #ffa; } + +@media (prefers-color-scheme: dark) { #source p.par.show_par .t { background: #650; } } + +#source p.par.show_par .t:hover { background: #f2f2a2; } + +@media (prefers-color-scheme: dark) { #source p.par.show_par .t:hover { background: #6d5d0c; } } + +#source p .r { position: absolute; top: 0; right: 2.5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; } + +#source p .annotate { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; color: #666; padding-right: .5em; } + +@media (prefers-color-scheme: dark) { #source p .annotate { color: #ddd; } } + +#source p .annotate.short:hover ~ .long { display: block; } + +#source p .annotate.long { width: 30em; right: 2.5em; } + +#source p input { display: none; } + +#source p input ~ .r label.ctx { cursor: pointer; border-radius: .25em; } + +#source p input ~ .r label.ctx::before { content: "▶ "; } + +#source p input ~ .r label.ctx:hover { background: #e8f4ff; color: #666; } + +@media (prefers-color-scheme: dark) { #source p input ~ .r label.ctx:hover { background: #0f3a42; } } + +@media (prefers-color-scheme: dark) { #source p input ~ .r label.ctx:hover { color: #aaa; } } + +#source p input:checked ~ .r label.ctx { background: #d0e8ff; color: #666; border-radius: .75em .75em 0 0; padding: 0 .5em; margin: -.25em 0; } + +@media (prefers-color-scheme: dark) { #source p input:checked ~ .r label.ctx { background: #056; } } + +@media (prefers-color-scheme: dark) { #source p input:checked ~ .r label.ctx { color: #aaa; } } + +#source p input:checked ~ .r label.ctx::before { content: "▼ "; } + +#source p input:checked ~ .ctxs { padding: .25em .5em; overflow-y: scroll; max-height: 10.5em; } + +#source p label.ctx { color: #999; display: inline-block; padding: 0 .5em; font-size: .8333em; } + +@media (prefers-color-scheme: dark) { #source p label.ctx { color: #777; } } + +#source p .ctxs { display: block; max-height: 0; overflow-y: hidden; transition: all .2s; padding: 0 .5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; white-space: nowrap; background: #d0e8ff; border-radius: .25em; margin-right: 1.75em; text-align: right; } + +@media (prefers-color-scheme: dark) { #source p .ctxs { background: #056; } } + +#index { font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 0.875em; } + +#index table.index { margin-left: -.5em; } + +#index td, #index th { text-align: right; padding: .25em .5em; border-bottom: 1px solid #eee; } + +@media (prefers-color-scheme: dark) { #index td, #index th { border-color: #333; } } + +#index td.name, #index th.name { text-align: left; width: auto; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; min-width: 15em; } + +#index th { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; font-style: italic; color: #333; cursor: pointer; } + +@media (prefers-color-scheme: dark) { #index th { color: #ddd; } } + +#index th:hover { background: #eee; } + +@media (prefers-color-scheme: dark) { #index th:hover { background: #333; } } + +#index th .arrows { color: #666; font-size: 85%; font-family: sans-serif; font-style: normal; pointer-events: none; } + +#index th[aria-sort="ascending"], #index th[aria-sort="descending"] { white-space: nowrap; background: #eee; padding-left: .5em; } + +@media (prefers-color-scheme: dark) { #index th[aria-sort="ascending"], #index th[aria-sort="descending"] { background: #333; } } + +#index th[aria-sort="ascending"] .arrows::after { content: " ▲"; } + +#index th[aria-sort="descending"] .arrows::after { content: " ▼"; } + +#index td.name { font-size: 1.15em; } + +#index td.name a { text-decoration: none; color: inherit; } + +#index td.name .no-noun { font-style: italic; } + +#index tr.total td, #index tr.total_dynamic td { font-weight: bold; border-top: 1px solid #ccc; border-bottom: none; } + +#index tr.region:hover { background: #eee; } + +@media (prefers-color-scheme: dark) { #index tr.region:hover { background: #333; } } + +#index tr.region:hover td.name { text-decoration: underline; color: inherit; } + +#scroll_marker { position: fixed; z-index: 3; right: 0; top: 0; width: 16px; height: 100%; background: #fff; border-left: 1px solid #eee; will-change: transform; } + +@media (prefers-color-scheme: dark) { #scroll_marker { background: #1e1e1e; } } + +@media (prefers-color-scheme: dark) { #scroll_marker { border-color: #333; } } + +#scroll_marker .marker { background: #ccc; position: absolute; min-height: 3px; width: 100%; } + +@media (prefers-color-scheme: dark) { #scroll_marker .marker { background: #444; } } diff --git a/coverage/z_bb657af29d23493a_Attributes_py.html b/coverage/z_bb657af29d23493a_Attributes_py.html new file mode 100644 index 00000000..a7aa7752 --- /dev/null +++ b/coverage/z_bb657af29d23493a_Attributes_py.html @@ -0,0 +1,152 @@ + + + + + Coverage for pyEDAA/ProjectModel/Attributes.py: 100% + + + + + +
+
+

+ Coverage for pyEDAA/ProjectModel/Attributes.py: + 100% +

+ +

+ 14 statements   + + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.4, + created at 2024-11-08 22:18 +0000 +

+ +
+
+
+

1# ==================================================================================================================== # 

+

2# _____ ____ _ _ ____ _ _ __ __ _ _ # 

+

3# _ __ _ _| ____| _ \ / \ / \ | _ \ _ __ ___ (_) ___ ___| |_| \/ | ___ __| | ___| | # 

+

4# | '_ \| | | | _| | | | |/ _ \ / _ \ | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ | # 

+

5# | |_) | |_| | |___| |_| / ___ \ / ___ \ _| __/| | | (_) | | __/ (__| |_| | | | (_) | (_| | __/ | # 

+

6# | .__/ \__, |_____|____/_/ \_\/_/ \_(_)_| |_| \___// |\___|\___|\__|_| |_|\___/ \__,_|\___|_| # 

+

7# |_| |___/ |__/ # 

+

8# ==================================================================================================================== # 

+

9# Authors: # 

+

10# Patrick Lehmann # 

+

11# # 

+

12# License: # 

+

13# ==================================================================================================================== # 

+

14# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany # 

+

15# # 

+

16# Licensed under the Apache License, Version 2.0 (the "License"); # 

+

17# you may not use this file except in compliance with the License. # 

+

18# You may obtain a copy of the License at # 

+

19# # 

+

20# http://www.apache.org/licenses/LICENSE-2.0 # 

+

21# # 

+

22# Unless required by applicable law or agreed to in writing, software # 

+

23# distributed under the License is distributed on an "AS IS" BASIS, # 

+

24# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # 

+

25# See the License for the specific language governing permissions and # 

+

26# limitations under the License. # 

+

27# # 

+

28# SPDX-License-Identifier: Apache-2.0 # 

+

29# ==================================================================================================================== # 

+

30# 

+

31"""A set of common attributes to store meta information on ProjectModel entities (project, design, fileset, file, ...).""" 

+

32from typing import Dict 

+

33from pyTooling.Decorators import export 

+

34 

+

35from pyEDAA.ProjectModel import Attribute 

+

36 

+

37 

+

38@export 

+

39class KeyValueAttribute(Attribute): 

+

40 KEY = "ID" 

+

41 

+

42 _keyValuePairs: Dict[str, str] 

+

43 

+

44 def __init__(self) -> None: 

+

45 super().__init__() 

+

46 

+

47 self._keyValuePairs = {} 

+

48 

+

49 def __getitem__(self, item: str) -> str: 

+

50 return self._keyValuePairs[item] 

+

51 

+

52 def __setitem__(self, key: str, value: str) -> None: 

+

53 self._keyValuePairs[key] = value 

+
+ + + diff --git a/coverage/z_bb657af29d23493a___init___py.html b/coverage/z_bb657af29d23493a___init___py.html new file mode 100644 index 00000000..eb593cd2 --- /dev/null +++ b/coverage/z_bb657af29d23493a___init___py.html @@ -0,0 +1,1967 @@ + + + + + Coverage for pyEDAA/ProjectModel/__init__.py: 69% + + + + + +
+
+

+ Coverage for pyEDAA/ProjectModel/__init__.py: + 69% +

+ +

+ 1070 statements   + + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.4, + created at 2024-11-08 22:18 +0000 +

+ +
+
+
+

1# ==================================================================================================================== # 

+

2# _____ ____ _ _ ____ _ _ __ __ _ _ # 

+

3# _ __ _ _| ____| _ \ / \ / \ | _ \ _ __ ___ (_) ___ ___| |_| \/ | ___ __| | ___| | # 

+

4# | '_ \| | | | _| | | | |/ _ \ / _ \ | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ | # 

+

5# | |_) | |_| | |___| |_| / ___ \ / ___ \ _| __/| | | (_) | | __/ (__| |_| | | | (_) | (_| | __/ | # 

+

6# | .__/ \__, |_____|____/_/ \_\/_/ \_(_)_| |_| \___// |\___|\___|\__|_| |_|\___/ \__,_|\___|_| # 

+

7# |_| |___/ |__/ # 

+

8# ==================================================================================================================== # 

+

9# Authors: # 

+

10# Patrick Lehmann # 

+

11# # 

+

12# License: # 

+

13# ==================================================================================================================== # 

+

14# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany # 

+

15# Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture # 

+

16# # 

+

17# Licensed under the Apache License, Version 2.0 (the "License"); # 

+

18# you may not use this file except in compliance with the License. # 

+

19# You may obtain a copy of the License at # 

+

20# # 

+

21# http://www.apache.org/licenses/LICENSE-2.0 # 

+

22# # 

+

23# Unless required by applicable law or agreed to in writing, software # 

+

24# distributed under the License is distributed on an "AS IS" BASIS, # 

+

25# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # 

+

26# See the License for the specific language governing permissions and # 

+

27# limitations under the License. # 

+

28# # 

+

29# SPDX-License-Identifier: Apache-2.0 # 

+

30# ==================================================================================================================== # 

+

31# 

+

32"""An abstract model of EDA tool projects.""" 

+

33__author__ = "Patrick Lehmann" 

+

34__email__ = "Paebbels@gmail.com" 

+

35__copyright__ = "2014-2024, Patrick Lehmann, Unai Martinez-Corral" 

+

36__license__ = "Apache License, Version 2.0" 

+

37__version__ = "0.5.0" 

+

38__keywords__ = ["eda project", "model", "abstract", "xilinx", "vivado", "osvvm", "file set", "file group", "test bench", "test harness"] 

+

39 

+

40from os.path import relpath as path_relpath 

+

41from pathlib import Path as pathlib_Path 

+

42from sys import version_info 

+

43from typing import Dict, Union, Optional as Nullable, List, Iterable, Generator, Tuple, Any as typing_Any, Type, Set, Any 

+

44 

+

45from pyTooling.Common import getFullyQualifiedName 

+

46from pyTooling.Decorators import export 

+

47from pyTooling.MetaClasses import ExtendedType 

+

48from pyTooling.Graph import Graph, Vertex 

+

49from pySVModel import SystemVerilogVersion 

+

50from pyVHDLModel import VHDLVersion 

+

51from pySystemRDLModel import SystemRDLVersion 

+

52 

+

53 

+

54@export 

+

55class Attribute(metaclass=ExtendedType): 

+

56 KEY: str 

+

57 VALUE_TYPE: typing_Any 

+

58 

+

59 @staticmethod 

+

60 def resolve(obj: typing_Any, key: Type['Attribute']): 

+

61 if isinstance(obj, File): 61 ↛ 63line 61 didn't jump to line 63 because the condition on line 61 was always true

+

62 return obj._fileSet[key] 

+

63 elif isinstance(obj, FileSet): 

+

64 return obj._design[key] 

+

65 elif isinstance(obj, Design): 

+

66 return obj._project[key] 

+

67 else: 

+

68 raise Exception("Resolution error") 

+

69 

+

70 

+

71@export 

+

72class FileType(ExtendedType): 

+

73 """ 

+

74 A :term:`meta-class` to construct *FileType* classes. 

+

75 

+

76 Modifications done by this meta-class: 

+

77 * Register all classes of type :class:`FileType` or derived variants in a class field :attr:`FileType.FileTypes` in this meta-class. 

+

78 """ 

+

79 

+

80 FileTypes: Dict[str, 'FileType'] = {} #: Dictionary of all classes of type :class:`FileType` or derived variants 

+

81 Any: 'FileType' 

+

82 

+

83 def __init__(cls, name: str, bases: Tuple[type, ...], dictionary: Dict[str, typing_Any], **kwargs): 

+

84 super().__init__(name, bases, dictionary, **kwargs) 

+

85 cls.Any = cls 

+

86 

+

87 def __new__(cls, className, baseClasses, classMembers: Dict, *args, **kwargs): 

+

88 fileType = super().__new__(cls, className, baseClasses, classMembers, *args, **kwargs) 

+

89 cls.FileTypes[className] = fileType 

+

90 return fileType 

+

91 

+

92 def __getattr__(cls, item) -> 'FileType': 

+

93 if item[:2] != "__" and item[-2:] != "__": 

+

94 return cls.FileTypes[item] 

+

95 else: 

+

96 return super().__getattribute__(item) 

+

97 

+

98 def __contains__(cls, item) -> bool: 

+

99 return issubclass(item, cls) 

+

100 

+

101 

+

102@export 

+

103class File(metaclass=FileType, slots=True): 

+

104 """ 

+

105 A :term:`File` represents a file in a design. This :term:`base-class` is used 

+

106 for all derived file classes. 

+

107 

+

108 A file can be created standalone and later associated to a fileset, design and 

+

109 project. Or a fileset, design and/or project can be associated immediately 

+

110 while creating a file. 

+

111 

+

112 :arg path: Relative or absolute path to the file. 

+

113 :arg project: Project the file is associated with. 

+

114 :arg design: Design the file is associated with. 

+

115 :arg fileSet: Fileset the file is associated with. 

+

116 """ 

+

117 

+

118 _path: pathlib_Path 

+

119 _fileType: 'FileType' 

+

120 _project: Nullable['Project'] 

+

121 _design: Nullable['Design'] 

+

122 _fileSet: Nullable['FileSet'] 

+

123 _attributes: Dict[Type[Attribute], typing_Any] 

+

124 

+

125 def __init__( 

+

126 self, 

+

127 path: pathlib_Path, 

+

128 project: Nullable["Project"] = None, 

+

129 design: Nullable["Design"] = None, 

+

130 fileSet: Nullable["FileSet"] = None 

+

131 ): 

+

132 self._fileType = getattr(FileTypes, self.__class__.__name__) 

+

133 self._path = path 

+

134 if project is not None: 

+

135 self._project = project 

+

136 self._design = design 

+

137 if fileSet is not None: 137 ↛ 138line 137 didn't jump to line 138 because the condition on line 137 was never true

+

138 self.FileSet = fileSet 

+

139 elif design is not None: 

+

140 self._project = design._project 

+

141 self._design = design 

+

142 self.FileSet = design.DefaultFileSet if fileSet is None else fileSet 

+

143 elif fileSet is not None: 

+

144 design = fileSet._design 

+

145 if design is not None: 

+

146 self._project = design._project 

+

147 else: 

+

148 self._project = None 

+

149 self._design = design 

+

150 self.FileSet = fileSet 

+

151 else: 

+

152 self._project = None 

+

153 self._design = None 

+

154 self._fileSet = None 

+

155 

+

156 self._attributes = {} 

+

157 self._registerAttributes() 

+

158 

+

159 def _registerAttributes(self) -> None: 

+

160 pass 

+

161 

+

162 @property 

+

163 def FileType(self) -> 'FileType': 

+

164 """Read-only property to return the file type of this file.""" 

+

165 return self._fileType 

+

166 

+

167 @property 

+

168 def Path(self) -> pathlib_Path: 

+

169 """Read-only property returning the path of this file.""" 

+

170 return self._path 

+

171 

+

172 # TODO: setter? 

+

173 

+

174 @property 

+

175 def ResolvedPath(self) -> pathlib_Path: 

+

176 """Read-only property returning the resolved path of this file.""" 

+

177 if self._path.is_absolute(): 177 ↛ 178line 177 didn't jump to line 178 because the condition on line 177 was never true

+

178 return self._path.resolve() 

+

179 elif self._fileSet is not None: 179 ↛ 189line 179 didn't jump to line 189 because the condition on line 179 was always true

+

180 path = (self._fileSet.ResolvedPath / self._path).resolve() 

+

181 

+

182 if path.is_absolute(): 182 ↛ 186line 182 didn't jump to line 186 because the condition on line 182 was always true

+

183 return path 

+

184 else: 

+

185 # WORKAROUND: https://stackoverflow.com/questions/67452690/pathlib-path-relative-to-vs-os-path-relpath 

+

186 return pathlib_Path(path_relpath(path, pathlib_Path.cwd())) 

+

187 else: 

+

188 # TODO: message and exception type 

+

189 raise Exception("") 

+

190 

+

191 @property 

+

192 def Project(self) -> Nullable['Project']: 

+

193 """Property setting or returning the project this file is used in.""" 

+

194 return self._project 

+

195 

+

196 @Project.setter 

+

197 def Project(self, value: 'Project') -> None: 

+

198 self._project = value 

+

199 

+

200 if self._fileSet is None: 200 ↛ exitline 200 didn't return from function 'Project' because the condition on line 200 was always true

+

201 self._project.DefaultDesign.DefaultFileSet.AddFile(self) 

+

202 

+

203 @property 

+

204 def Design(self) -> Nullable['Design']: 

+

205 """Property setting or returning the design this file is used in.""" 

+

206 return self._design 

+

207 

+

208 @Design.setter 

+

209 def Design(self, value: 'Design') -> None: 

+

210 self._design = value 

+

211 

+

212 if self._fileSet is None: 212 ↛ 215line 212 didn't jump to line 215 because the condition on line 212 was always true

+

213 self._design.DefaultFileSet.AddFile(self) 

+

214 

+

215 if self._project is None: 215 ↛ 217line 215 didn't jump to line 217 because the condition on line 215 was always true

+

216 self._project = value._project 

+

217 elif self._project is not value._project: 

+

218 raise Exception("The design's project is not identical to the already assigned project.") 

+

219 

+

220 @property 

+

221 def FileSet(self) -> Nullable['FileSet']: 

+

222 """Property setting or returning the fileset this file is used in.""" 

+

223 return self._fileSet 

+

224 

+

225 @FileSet.setter 

+

226 def FileSet(self, value: 'FileSet') -> None: 

+

227 self._fileSet = value 

+

228 value._files.append(self) 

+

229 

+

230 def Validate(self) -> None: 

+

231 """Validate this file.""" 

+

232 if self._path is None: 232 ↛ 233line 232 didn't jump to line 233 because the condition on line 232 was never true

+

233 raise Exception("Validation: File has no path.") 

+

234 try: 

+

235 path = self.ResolvedPath 

+

236 except Exception as ex: 

+

237 raise Exception(f"Validation: File '{self._path}' could not compute resolved path.") from ex 

+

238 if not path.exists(): 238 ↛ 239line 238 didn't jump to line 239 because the condition on line 238 was never true

+

239 raise Exception(f"Validation: File '{self._path}' (={path}) does not exist.") 

+

240 if not path.is_file(): 240 ↛ 241line 240 didn't jump to line 241 because the condition on line 240 was never true

+

241 raise Exception(f"Validation: File '{self._path}' (={path}) is not a file.") 

+

242 

+

243 if self._fileSet is None: 243 ↛ 244line 243 didn't jump to line 244 because the condition on line 243 was never true

+

244 raise Exception(f"Validation: File '{self._path}' has no fileset.") 

+

245 if self._design is None: 245 ↛ 246line 245 didn't jump to line 246 because the condition on line 245 was never true

+

246 raise Exception(f"Validation: File '{self._path}' has no design.") 

+

247 if self._project is None: 247 ↛ 248line 247 didn't jump to line 248 because the condition on line 247 was never true

+

248 raise Exception(f"Validation: File '{self._path}' has no project.") 

+

249 

+

250 def __len__(self) -> int: 

+

251 """ 

+

252 Returns number of attributes set on this file. 

+

253 

+

254 :returns: The number if attributes set on this file. 

+

255 """ 

+

256 return len(self._attributes) 

+

257 

+

258 def __getitem__(self, key: Type[Attribute]) -> Any: 

+

259 """Index access for returning attributes on this file. 

+

260 

+

261 :param key: The attribute type. 

+

262 :returns: The attribute's value. 

+

263 :raises TypeError: When parameter 'key' is not a subclass of Attribute. 

+

264 """ 

+

265 if not issubclass(key, Attribute): 265 ↛ 266line 265 didn't jump to line 266 because the condition on line 265 was never true

+

266 raise TypeError("Parameter 'key' is not an 'Attribute'.") 

+

267 

+

268 try: 

+

269 return self._attributes[key] 

+

270 except KeyError: 

+

271 try: 

+

272 return key.resolve(self, key) 

+

273 except KeyError: 

+

274 attribute = key() 

+

275 self._attributes[key] = attribute 

+

276 return attribute 

+

277 

+

278 def __setitem__(self, key: Type[Attribute], value: typing_Any) -> None: 

+

279 """ 

+

280 Index access for adding or setting attributes on this file. 

+

281 

+

282 :param key: The attribute type. 

+

283 :param value: The attributes value. 

+

284 :raises TypeError: When parameter 'key' is not a subclass of Attribute. 

+

285 """ 

+

286 if not issubclass(key, Attribute): 286 ↛ 287line 286 didn't jump to line 287 because the condition on line 286 was never true

+

287 raise TypeError("Parameter 'key' is not an 'Attribute'.") 

+

288 

+

289 self._attributes[key] = value 

+

290 

+

291 def __delitem__(self, key: Type[Attribute]) -> None: 

+

292 """ 

+

293 Index access for deleting attributes on this file. 

+

294 

+

295 :param key: The attribute type. 

+

296 """ 

+

297 if not issubclass(key, Attribute): 297 ↛ 298line 297 didn't jump to line 298 because the condition on line 297 was never true

+

298 raise TypeError("Parameter 'key' is not an 'Attribute'.") 

+

299 

+

300 del self._attributes[key] 

+

301 

+

302 def __str__(self) -> str: 

+

303 return f"{self._path}" 

+

304 

+

305 

+

306FileTypes = File 

+

307 

+

308 

+

309@export 

+

310class HumanReadableContent(metaclass=ExtendedType, mixin=True): 

+

311 """A file type representing human-readable contents.""" 

+

312 

+

313 

+

314@export 

+

315class XMLContent(HumanReadableContent, mixin=True): 

+

316 """A file type representing XML contents.""" 

+

317 

+

318 

+

319@export 

+

320class YAMLContent(HumanReadableContent, mixin=True): 

+

321 """A file type representing YAML contents.""" 

+

322 

+

323 

+

324@export 

+

325class JSONContent(HumanReadableContent, mixin=True): 

+

326 """A file type representing JSON contents.""" 

+

327 

+

328 

+

329@export 

+

330class INIContent(HumanReadableContent, mixin=True): 

+

331 """A file type representing INI contents.""" 

+

332 

+

333 

+

334@export 

+

335class TOMLContent(HumanReadableContent, mixin=True): 

+

336 """A file type representing TOML contents.""" 

+

337 

+

338 

+

339@export 

+

340class TCLContent(HumanReadableContent, mixin=True): 

+

341 """A file type representing content in TCL code.""" 

+

342 

+

343 

+

344@export 

+

345class SDCContent(TCLContent, mixin=True): 

+

346 """A file type representing contents as Synopsys Design Constraints (SDC).""" 

+

347 

+

348 

+

349@export 

+

350class PythonContent(HumanReadableContent, mixin=True): 

+

351 """A file type representing contents as Python source code.""" 

+

352 

+

353 

+

354@export 

+

355class TextFile(File, HumanReadableContent): 

+

356 """A text file (``*.txt``).""" 

+

357 

+

358 

+

359@export 

+

360class LogFile(File, HumanReadableContent): 

+

361 """A log file (``*.log``).""" 

+

362 

+

363 

+

364@export 

+

365class XMLFile(File, XMLContent): 

+

366 """An XML file (``*.xml``).""" 

+

367 

+

368 

+

369@export 

+

370class SourceFile(File): 

+

371 """Base-class of all source files.""" 

+

372 

+

373 

+

374@export 

+

375class HDLSourceFile(SourceFile): 

+

376 """Base-class of all HDL source files.""" 

+

377 

+

378 

+

379@export 

+

380class RDLSourceFile(SourceFile): 

+

381 """Base-class of all RDL source files.""" 

+

382 

+

383 

+

384@export 

+

385class NetlistFile(SourceFile): 

+

386 """Base-class of all netlist source files.""" 

+

387 

+

388 

+

389@export 

+

390class EDIFNetlistFile(NetlistFile): 

+

391 """Netlist file in EDIF (Electronic Design Interchange Format).""" 

+

392 

+

393 

+

394@export 

+

395class TCLSourceFile(SourceFile, TCLContent): 

+

396 """A TCL source file.""" 

+

397 

+

398 

+

399@export 

+

400class VHDLSourceFile(HDLSourceFile, HumanReadableContent): 

+

401 """ 

+

402 A VHDL source file (of any language version). 

+

403 

+

404 :arg path: Relative or absolute path to the file. 

+

405 :arg vhdlLibrary: VHDLLibrary this VHDL source file is associated wih. 

+

406 :arg vhdlVersion: VHDLVersion this VHDL source file is associated wih. 

+

407 :arg project: Project the file is associated with. 

+

408 :arg design: Design the file is associated with. 

+

409 :arg fileSet: Fileset the file is associated with. 

+

410 """ 

+

411 

+

412 _vhdlLibrary: Nullable['VHDLLibrary'] 

+

413 _vhdlVersion: VHDLVersion 

+

414 

+

415 def __init__(self, path: pathlib_Path, vhdlLibrary: Union[str, 'VHDLLibrary'] = None, vhdlVersion: Nullable[VHDLVersion] = None, project: Nullable["Project"] = None, design: Nullable["Design"] = None, fileSet: Nullable["FileSet"] = None): 

+

416 super().__init__(path, project, design, fileSet) 

+

417 

+

418 if isinstance(vhdlLibrary, str): 418 ↛ 419line 418 didn't jump to line 419 because the condition on line 418 was never true

+

419 if design is not None: 

+

420 try: 

+

421 vhdlLibrary = design.VHDLLibraries[vhdlLibrary] 

+

422 except KeyError as ex: 

+

423 raise Exception(f"VHDL library '{vhdlLibrary}' not found in design '{design.Name}'.") from ex 

+

424 elif project is not None: 

+

425 try: 

+

426 vhdlLibrary = project.DefaultDesign.VHDLLibraries[vhdlLibrary] 

+

427 except KeyError as ex: 

+

428 raise Exception(f"VHDL library '{vhdlLibrary}' not found in default design '{project.DefaultDesign.Name}'.") from ex 

+

429 else: 

+

430 raise Exception(f"Can't lookup VHDL library because neither 'project' nor 'design' is given as a parameter.") 

+

431 elif isinstance(vhdlLibrary, VHDLLibrary): 

+

432 self._vhdlLibrary = vhdlLibrary 

+

433 vhdlLibrary.AddFile(self) 

+

434 elif vhdlLibrary is None: 434 ↛ 437line 434 didn't jump to line 437 because the condition on line 434 was always true

+

435 self._vhdlLibrary = None 

+

436 else: 

+

437 ex = TypeError(f"Parameter 'vhdlLibrary' is neither a 'str' nor 'VHDLibrary'.") 

+

438 if version_info >= (3, 11): # pragma: no cover 

+

439 ex.add_note(f"Got type '{getFullyQualifiedName(vhdlLibrary)}'.") 

+

440 raise ex 

+

441 

+

442 self._vhdlVersion = vhdlVersion 

+

443 

+

444 def Validate(self) -> None: 

+

445 """Validate this VHDL source file.""" 

+

446 super().Validate() 

+

447 

+

448 try: 

+

449 _ = self.VHDLLibrary 

+

450 except Exception as ex: 

+

451 raise Exception(f"Validation: VHDLSourceFile '{self._path}' (={self.ResolvedPath}) has no VHDLLibrary assigned.") from ex 

+

452 try: 

+

453 _ = self.VHDLVersion 

+

454 except Exception as ex: 

+

455 raise Exception(f"Validation: VHDLSourceFile '{self._path}' (={self.ResolvedPath}) has no VHDLVersion assigned.") from ex 

+

456 

+

457 @property 

+

458 def VHDLLibrary(self) -> 'VHDLLibrary': 

+

459 """Property setting or returning the VHDL library this VHDL source file is used in.""" 

+

460 if self._vhdlLibrary is not None: 

+

461 return self._vhdlLibrary 

+

462 elif self._fileSet is not None: 

+

463 return self._fileSet.VHDLLibrary 

+

464 else: 

+

465 raise Exception("VHDLLibrary was neither set locally nor globally.") 

+

466 

+

467 @VHDLLibrary.setter 

+

468 def VHDLLibrary(self, value: 'VHDLLibrary') -> None: 

+

469 self._vhdlLibrary = value 

+

470 value._files.append(self) 

+

471 

+

472 @property 

+

473 def VHDLVersion(self) -> VHDLVersion: 

+

474 """Property setting or returning the VHDL version this VHDL source file is used in.""" 

+

475 if self._vhdlVersion is not None: 

+

476 return self._vhdlVersion 

+

477 elif self._fileSet is not None: 

+

478 return self._fileSet.VHDLVersion 

+

479 else: 

+

480 raise Exception("VHDLVersion was neither set locally nor globally.") 

+

481 

+

482 @VHDLVersion.setter 

+

483 def VHDLVersion(self, value: VHDLVersion) -> None: 

+

484 self._vhdlVersion = value 

+

485 

+

486 def __repr__(self) -> str: 

+

487 return f"<VHDL file: '{self.ResolvedPath}'; lib: '{self.VHDLLibrary}'; version: {self.VHDLVersion}>" 

+

488 

+

489 

+

490class VerilogMixIn(metaclass=ExtendedType, mixin=True): 

+

491 @property 

+

492 def VerilogVersion(self) -> SystemVerilogVersion: 

+

493 """Property setting or returning the Verilog version this Verilog source file is used in.""" 

+

494 if self._version is not None: 

+

495 return self._version 

+

496 elif self._fileSet is not None: 

+

497 return self._fileSet.VerilogVersion 

+

498 else: 

+

499 raise Exception("VerilogVersion was neither set locally nor globally.") 

+

500 

+

501 @VerilogVersion.setter 

+

502 def VerilogVersion(self, value: SystemVerilogVersion) -> None: 

+

503 self._version = value 

+

504 

+

505 

+

506class SystemVerilogMixIn(metaclass=ExtendedType, mixin=True): 

+

507 @property 

+

508 def SVVersion(self) -> SystemVerilogVersion: 

+

509 """Property setting or returning the SystemVerilog version this SystemVerilog source file is used in.""" 

+

510 if self._version is not None: 

+

511 return self._version 

+

512 elif self._fileSet is not None: 

+

513 return self._fileSet.SVVersion 

+

514 else: 

+

515 raise Exception("SVVersion was neither set locally nor globally.") 

+

516 

+

517 @SVVersion.setter 

+

518 def SVVersion(self, value: SystemVerilogVersion) -> None: 

+

519 self._version = value 

+

520 

+

521 

+

522@export 

+

523class VerilogBaseFile(HDLSourceFile, HumanReadableContent): 

+

524 _version: SystemVerilogVersion 

+

525 

+

526 def __init__(self, path: pathlib_Path, version: Nullable[SystemVerilogVersion] = None, project: Nullable["Project"] = None, design: Nullable["Design"] = None, fileSet: Nullable["FileSet"] = None): 

+

527 super().__init__(path, project, design, fileSet) 

+

528 

+

529 self._version = version 

+

530 

+

531 

+

532@export 

+

533class VerilogSourceFile(VerilogBaseFile, VerilogMixIn): 

+

534 """A Verilog source file (of any language version).""" 

+

535 

+

536 

+

537@export 

+

538class VerilogHeaderFile(VerilogBaseFile, VerilogMixIn): 

+

539 """A Verilog header file (of any language version).""" 

+

540 

+

541 

+

542@export 

+

543class SystemVerilogBaseFile(VerilogBaseFile): 

+

544 ... 

+

545 

+

546 

+

547@export 

+

548class SystemVerilogSourceFile(SystemVerilogBaseFile, SystemVerilogMixIn): 

+

549 """A SystemVerilog source file (of any language version).""" 

+

550 

+

551 

+

552@export 

+

553class SystemVerilogHeaderFile(SystemVerilogBaseFile, SystemVerilogMixIn): 

+

554 """A SystemVerilog header file (of any language version).""" 

+

555 

+

556 

+

557@export 

+

558class SystemRDLSourceFile(RDLSourceFile, HumanReadableContent): 

+

559 """A SystemRDL source file (of any language version).""" 

+

560 

+

561 _srdlVersion: SystemRDLVersion 

+

562 

+

563 def __init__(self, path: pathlib_Path, srdlVersion: Nullable[SystemRDLVersion] = None, project: Nullable["Project"] = None, design: Nullable["Design"] = None, fileSet: Nullable["FileSet"] = None): 

+

564 super().__init__(path, project, design, fileSet) 

+

565 

+

566 self._srdlVersion = srdlVersion 

+

567 

+

568 @property 

+

569 def SystemRDLVersion(self) -> SystemRDLVersion: 

+

570 """Property setting or returning the SystemRDL version this SystemRDL source file is used in.""" 

+

571 if self._srdlVersion is not None: 

+

572 return self._srdlVersion 

+

573 elif self._fileSet is not None: 

+

574 return self._fileSet.SRDLVersion 

+

575 else: 

+

576 raise Exception("SRDLVersion was neither set locally nor globally.") 

+

577 

+

578 @SystemRDLVersion.setter 

+

579 def SystemRDLVersion(self, value: SystemRDLVersion) -> None: 

+

580 self._srdlVersion = value 

+

581 

+

582 

+

583@export 

+

584class PythonSourceFile(SourceFile, PythonContent): 

+

585 """A Python source file.""" 

+

586 

+

587 

+

588# TODO: move to a Cocotb module 

+

589@export 

+

590class CocotbPythonFile(PythonSourceFile): 

+

591 """A Python source file used by Cocotb.""" 

+

592 

+

593 

+

594@export 

+

595class ConstraintFile(File, HumanReadableContent): 

+

596 """Base-class of all constraint files.""" 

+

597 

+

598 

+

599@export 

+

600class ProjectFile(File): 

+

601 """Base-class of all tool-specific project files.""" 

+

602 

+

603 

+

604@export 

+

605class CSourceFile(SourceFile): 

+

606 """Base-class of all ANSI-C source files.""" 

+

607 

+

608 

+

609@export 

+

610class CppSourceFile(SourceFile): 

+

611 """Base-class of all ANSI-C++ source files.""" 

+

612 

+

613 

+

614@export 

+

615class SettingFile(File): 

+

616 """Base-class of all tool-specific setting files.""" 

+

617 

+

618 

+

619@export 

+

620class SimulationAnalysisFile(File): 

+

621 """Base-class of all tool-specific analysis files.""" 

+

622 

+

623 

+

624@export 

+

625class SimulationElaborationFile(File): 

+

626 """Base-class of all tool-specific elaboration files.""" 

+

627 

+

628 

+

629@export 

+

630class SimulationStartFile(File): 

+

631 """Base-class of all tool-specific simulation start-up files.""" 

+

632 

+

633 

+

634@export 

+

635class SimulationRunFile(File): 

+

636 """Base-class of all tool-specific simulation run (execution) files.""" 

+

637 

+

638 

+

639@export 

+

640class WaveformConfigFile(File): 

+

641 """Base-class of all tool-specific waveform configuration files.""" 

+

642 

+

643 

+

644@export 

+

645class WaveformDatabaseFile(File): 

+

646 """Base-class of all tool-specific waveform database files.""" 

+

647 

+

648 

+

649@export 

+

650class WaveformExchangeFile(File): 

+

651 """Base-class of all tool-independent waveform exchange files.""" 

+

652 

+

653 

+

654@export 

+

655class FileSet(metaclass=ExtendedType, slots=True): 

+

656 """ 

+

657 A :term:`FileSet` represents a group of files. Filesets can have sub-filesets. 

+

658 

+

659 The order of insertion is preserved. A fileset can be created standalone and 

+

660 later associated to another fileset, design and/or project. Or a fileset, 

+

661 design and/or project can be associated immediately while creating the 

+

662 fileset. 

+

663 

+

664 :arg name: Name of this fileset. 

+

665 :arg topLevel: Name of the fileset's toplevel. 

+

666 :arg directory: Path of this fileset (absolute or relative to a parent fileset or design). 

+

667 :arg project: Project the file is associated with. 

+

668 :arg design: Design the file is associated with. 

+

669 :arg parent: Parent fileset if this fileset is nested. 

+

670 :arg vhdlLibrary: Default VHDL library for files in this fileset, if not specified for the file itself. 

+

671 :arg vhdlVersion: Default VHDL version for files in this fileset, if not specified for the file itself. 

+

672 :arg verilogVersion: Default Verilog version for files in this fileset, if not specified for the file itself. 

+

673 :arg svVersion: Default SystemVerilog version for files in this fileset, if not specified for the file itself. 

+

674 :arg srdlVersion: Default SystemRDL version for files in this fileset, if not specified for the file itself. 

+

675 """ 

+

676 

+

677 _name: str 

+

678 _topLevel: Nullable[str] 

+

679 _project: Nullable['Project'] 

+

680 _design: Nullable['Design'] 

+

681 _directory: pathlib_Path 

+

682 _parent: Nullable['FileSet'] 

+

683 _fileSets: Dict[str, 'FileSet'] 

+

684 _files: List[File] 

+

685 _set: Set 

+

686 _attributes: Dict[Type[Attribute], typing_Any] 

+

687 _vhdlLibraries: Dict[str, 'VHDLLibrary'] 

+

688 _vhdlLibrary: 'VHDLLibrary' 

+

689 _vhdlVersion: VHDLVersion 

+

690 _verilogVersion: SystemVerilogVersion 

+

691 _svVersion: SystemVerilogVersion 

+

692 _srdlVersion: SystemRDLVersion 

+

693 

+

694 def __init__( 

+

695 self, 

+

696 name: str, 

+

697 topLevel: Nullable[str] = None, 

+

698 directory: pathlib_Path = pathlib_Path("."), 

+

699 project: Nullable["Project"] = None, 

+

700 design: Nullable["Design"] = None, 

+

701 parent: Nullable['FileSet'] = None, 

+

702 vhdlLibrary: Union[str, 'VHDLLibrary'] = None, 

+

703 vhdlVersion: Nullable[VHDLVersion] = None, 

+

704 verilogVersion: Nullable[SystemVerilogVersion] = None, 

+

705 svVersion: Nullable[SystemVerilogVersion] = None, 

+

706 srdlVersion: Nullable[SystemRDLVersion] = None 

+

707 ): 

+

708 self._name = name 

+

709 self._topLevel = topLevel 

+

710 if project is not None: 

+

711 self._project = project 

+

712 self._design = design if design is not None else project.DefaultDesign 

+

713 

+

714 elif design is not None: 

+

715 self._project = design._project 

+

716 self._design = design 

+

717 else: 

+

718 self._project = None 

+

719 self._design = None 

+

720 self._directory = directory 

+

721 self._parent = parent 

+

722 self._fileSets = {} 

+

723 self._files = [] 

+

724 self._set = set() 

+

725 

+

726 if design is not None: 

+

727 design._fileSets[name] = self 

+

728 

+

729 self._attributes = {} 

+

730 self._vhdlLibraries = {} 

+

731 

+

732 # TODO: handle if vhdlLibrary is a string 

+

733 self._vhdlLibrary = vhdlLibrary 

+

734 self._vhdlVersion = vhdlVersion 

+

735 self._verilogVersion = verilogVersion 

+

736 self._svVersion = svVersion 

+

737 self._srdlVersion = srdlVersion 

+

738 

+

739 @property 

+

740 def Name(self) -> str: 

+

741 """Property setting or returning the fileset's name.""" 

+

742 return self._name 

+

743 

+

744 @Name.setter 

+

745 def Name(self, value: str) -> None: 

+

746 self._name = value 

+

747 

+

748 @property 

+

749 def TopLevel(self) -> str: 

+

750 """Property setting or returning the fileset's toplevel.""" 

+

751 return self._topLevel 

+

752 

+

753 @TopLevel.setter 

+

754 def TopLevel(self, value: str) -> None: 

+

755 self._topLevel = value 

+

756 

+

757 @property 

+

758 def Project(self) -> Nullable['Project']: 

+

759 """Property setting or returning the project this fileset is used in.""" 

+

760 return self._project 

+

761 

+

762 @Project.setter 

+

763 def Project(self, value: 'Project') -> None: 

+

764 self._project = value 

+

765 

+

766 @property 

+

767 def Design(self) -> Nullable['Design']: 

+

768 """Property setting or returning the design this fileset is used in.""" 

+

769 if self._design is not None: 

+

770 return self._design 

+

771 elif self._parent is not None: 771 ↛ 772line 771 didn't jump to line 772 because the condition on line 771 was never true

+

772 return self._parent.Design 

+

773 else: 

+

774 return None 

+

775 # TODO: raise exception instead 

+

776 # QUESTION: how to handle if design and parent is set? 

+

777 

+

778 @Design.setter 

+

779 def Design(self, value: 'Design') -> None: 

+

780 self._design = value 

+

781 if self._project is None: 781 ↛ 783line 781 didn't jump to line 783 because the condition on line 781 was always true

+

782 self._project = value._project 

+

783 elif self._project is not value._project: 

+

784 raise Exception("The design's project is not identical to the already assigned project.") 

+

785 

+

786 @property 

+

787 def Directory(self) -> pathlib_Path: 

+

788 """Property setting or returning the directory this fileset is located in.""" 

+

789 return self._directory 

+

790 

+

791 @Directory.setter 

+

792 def Directory(self, value: pathlib_Path) -> None: 

+

793 self._directory = value 

+

794 

+

795 @property 

+

796 def ResolvedPath(self) -> pathlib_Path: 

+

797 """Read-only property returning the resolved path of this fileset.""" 

+

798 if self._directory.is_absolute(): 798 ↛ 799line 798 didn't jump to line 799 because the condition on line 798 was never true

+

799 return self._directory.resolve() 

+

800 else: 

+

801 if self._parent is not None: 801 ↛ 802line 801 didn't jump to line 802 because the condition on line 801 was never true

+

802 directory = self._parent.ResolvedPath 

+

803 elif self._design is not None: 803 ↛ 805line 803 didn't jump to line 805 because the condition on line 803 was always true

+

804 directory = self._design.ResolvedPath 

+

805 elif self._project is not None: 

+

806 directory = self._project.ResolvedPath 

+

807 else: 

+

808 # TODO: message and exception type 

+

809 raise Exception("") 

+

810 

+

811 directory = (directory / self._directory).resolve() 

+

812 if directory.is_absolute(): 812 ↛ 816line 812 didn't jump to line 816 because the condition on line 812 was always true

+

813 return directory 

+

814 else: 

+

815 # WORKAROUND: https://stackoverflow.com/questions/67452690/pathlib-path-relative-to-vs-os-path-relpath 

+

816 return pathlib_Path(path_relpath(directory, pathlib_Path.cwd())) 

+

817 

+

818 @property 

+

819 def Parent(self) -> Nullable['FileSet']: 

+

820 """Property setting or returning the parent fileset this fileset is used in.""" 

+

821 return self._parent 

+

822 

+

823 @Parent.setter 

+

824 def Parent(self, value: 'FileSet') -> None: 

+

825 self._parent = value 

+

826 value._fileSets[self._name] = self 

+

827 # TODO: check it it already exists 

+

828 # QUESTION: make an Add fileset method? 

+

829 

+

830 @property 

+

831 def FileSets(self) -> Dict[str, 'FileSet']: 

+

832 """Read-only property returning the dictionary of sub-filesets.""" 

+

833 return self._fileSets 

+

834 

+

835 def Files(self, fileType: FileType = FileTypes.Any, fileSet: Union[bool, str, 'FileSet'] = None) -> Generator[File, None, None]: 

+

836 """ 

+

837 Method returning the files of this fileset. 

+

838 

+

839 :arg fileType: A filter for file types. Default: ``Any``. 

+

840 :arg fileSet: Specifies how to handle sub-filesets. 

+

841 """ 

+

842 if fileSet is False: 842 ↛ 843line 842 didn't jump to line 843 because the condition on line 842 was never true

+

843 for file in self._files: 

+

844 if file.FileType in fileType: 

+

845 yield file 

+

846 elif fileSet is None: 846 ↛ 854line 846 didn't jump to line 854 because the condition on line 846 was always true

+

847 for fileSet in self._fileSets.values(): 847 ↛ 848line 847 didn't jump to line 848 because the loop on line 847 never started

+

848 for file in fileSet.Files(fileType): 

+

849 yield file 

+

850 for file in self._files: 

+

851 if file.FileType in fileType: 

+

852 yield file 

+

853 else: 

+

854 if isinstance(fileSet, str): 

+

855 fileSetName = fileSet 

+

856 try: 

+

857 fileSet = self._fileSets[fileSetName] 

+

858 except KeyError as ex: 

+

859 raise Exception(f"Fileset {fileSetName} not bound to fileset {self.Name}.") from ex 

+

860 elif not isinstance(fileSet, FileSet): 

+

861 raise TypeError("Parameter 'fileSet' is not of type 'str' or 'FileSet' nor value 'None'.") 

+

862 

+

863 for file in fileSet.Files(fileType): 

+

864 yield file 

+

865 

+

866 def AddFileSet(self, fileSet: "FileSet") -> None: 

+

867 """ 

+

868 Method to add a single sub-fileset to this fileset. 

+

869 

+

870 :arg fileSet: A fileset to add to this fileset as sub-fileset. 

+

871 """ 

+

872 if not isinstance(fileSet, FileSet): 872 ↛ 873line 872 didn't jump to line 873 because the condition on line 872 was never true

+

873 raise ValueError("Parameter 'fileSet' is not of type ProjectModel.FileSet.") 

+

874 elif fileSet in self._fileSets: 874 ↛ 875line 874 didn't jump to line 875 because the condition on line 874 was never true

+

875 raise Exception("Sub-fileset already contains this fileset.") 

+

876 elif fileSet.Name in self._fileSets.keys(): 876 ↛ 877line 876 didn't jump to line 877 because the condition on line 876 was never true

+

877 raise Exception(f"Fileset already contains a sub-fileset named '{fileSet.Name}'.") 

+

878 

+

879 self._fileSets[fileSet.Name] = fileSet 

+

880 fileSet._parent = self 

+

881 

+

882 def AddFileSets(self, fileSets: Iterable["FileSet"]) -> None: 

+

883 """ 

+

884 Method to add a multiple sub-filesets to this fileset. 

+

885 

+

886 :arg fileSets: An iterable of filesets to add each to the fileset. 

+

887 """ 

+

888 for fileSet in fileSets: 

+

889 self.AddFileSet(fileSet) 

+

890 

+

891 @property 

+

892 def FileSetCount(self) -> int: 

+

893 """Returns number of file sets excl. sub-filesets.""" 

+

894 return len(self._fileSets) 

+

895 

+

896 @property 

+

897 def TotalFileSetCount(self) -> int: 

+

898 """Returns number of file sets incl. sub-filesets.""" 

+

899 fileSetCount = len(self._fileSets) 

+

900 for fileSet in self._fileSets.values(): 

+

901 fileSetCount += fileSet.TotalFileSetCount 

+

902 

+

903 return fileSetCount 

+

904 

+

905 def AddFile(self, file: File) -> None: 

+

906 """ 

+

907 Method to add a single file to this fileset. 

+

908 

+

909 :arg file: A file to add to this fileset. 

+

910 """ 

+

911 if not isinstance(file, File): 

+

912 raise TypeError("Parameter 'file' is not of type ProjectModel.File.") 

+

913 elif file._fileSet is not None: 

+

914 ex = ValueError(f"File '{file.Path!s}' is already part of fileset '{file.FileSet.Name}'.") 

+

915 if version_info >= (3, 11): # pragma: no cover 

+

916 ex.add_note(f"A file can't be assigned to another fileset.") 

+

917 raise ex 

+

918 elif file in self._set: 918 ↛ 919line 918 didn't jump to line 919 because the condition on line 918 was never true

+

919 ex = ValueError(f"File '{file.Path!s}' is already part of this fileset.") 

+

920 if version_info >= (3, 11): # pragma: no cover 

+

921 ex.add_note(f"A file can't be added twice to a fileset.") 

+

922 raise ex 

+

923 

+

924 self._files.append(file) 

+

925 self._set.add(file) 

+

926 file._fileSet = self 

+

927 

+

928 def AddFiles(self, files: Iterable[File]) -> None: 

+

929 """ 

+

930 Method to add a multiple files to this fileset. 

+

931 

+

932 :arg files: An iterable of files to add each to the fileset. 

+

933 """ 

+

934 for file in files: 

+

935 self.AddFile(file) 

+

936 

+

937 @property 

+

938 def FileCount(self) -> int: 

+

939 """Returns number of files excl. sub-filesets.""" 

+

940 return len(self._files) 

+

941 

+

942 @property 

+

943 def TotalFileCount(self) -> int: 

+

944 """Returns number of files incl. the files in sub-filesets.""" 

+

945 fileCount = len(self._files) 

+

946 for fileSet in self._fileSets.values(): 

+

947 fileCount += fileSet.FileCount 

+

948 

+

949 return fileCount 

+

950 

+

951 def Validate(self) -> None: 

+

952 """Validate this fileset.""" 

+

953 if self._name is None or self._name == "": 953 ↛ 954line 953 didn't jump to line 954 because the condition on line 953 was never true

+

954 raise Exception("Validation: FileSet has no name.") 

+

955 

+

956 if self._directory is None: 956 ↛ 957line 956 didn't jump to line 957 because the condition on line 956 was never true

+

957 raise Exception(f"Validation: FileSet '{self._name}' has no directory.") 

+

958 try: 

+

959 path = self.ResolvedPath 

+

960 except Exception as ex: 

+

961 raise Exception(f"Validation: FileSet '{self._name}' could not compute resolved path.") from ex 

+

962 if not path.exists(): 962 ↛ 963line 962 didn't jump to line 963 because the condition on line 962 was never true

+

963 raise Exception(f"Validation: FileSet '{self._name}'s directory '{path}' does not exist.") 

+

964 if not path.is_dir(): 964 ↛ 965line 964 didn't jump to line 965 because the condition on line 964 was never true

+

965 raise Exception(f"Validation: FileSet '{self._name}'s directory '{path}' is not a directory.") 

+

966 

+

967 if self._design is None: 967 ↛ 968line 967 didn't jump to line 968 because the condition on line 967 was never true

+

968 raise Exception(f"Validation: FileSet '{self._directory}' has no design.") 

+

969 if self._project is None: 969 ↛ 970line 969 didn't jump to line 970 because the condition on line 969 was never true

+

970 raise Exception(f"Validation: FileSet '{self._directory}' has no project.") 

+

971 

+

972 for fileSet in self._fileSets.values(): 972 ↛ 973line 972 didn't jump to line 973 because the loop on line 972 never started

+

973 fileSet.Validate() 

+

974 for file in self._files: 974 ↛ 975line 974 didn't jump to line 975 because the loop on line 974 never started

+

975 file.Validate() 

+

976 

+

977 def GetOrCreateVHDLLibrary(self, name) -> 'VHDLLibrary': 

+

978 if name in self._vhdlLibraries: 

+

979 return self._vhdlLibraries[name] 

+

980 elif name in self._design._vhdlLibraries: 

+

981 library = self._design._vhdlLibraries[name] 

+

982 self._vhdlLibraries[name] = library 

+

983 return library 

+

984 else: 

+

985 library = VHDLLibrary(name, design=self._design, vhdlVersion=self._vhdlVersion) 

+

986 self._vhdlLibraries[name] = library 

+

987 return library 

+

988 

+

989 @property 

+

990 def VHDLLibrary(self) -> 'VHDLLibrary': 

+

991 """Property setting or returning the VHDL library of this fileset.""" 

+

992 if self._vhdlLibrary is not None: 

+

993 return self._vhdlLibrary 

+

994 elif self._parent is not None: 994 ↛ 996line 994 didn't jump to line 996 because the condition on line 994 was always true

+

995 return self._parent.VHDLLibrary 

+

996 elif self._design is not None: 

+

997 return self._design.VHDLLibrary 

+

998 else: 

+

999 raise Exception("VHDLLibrary was neither set locally nor globally.") 

+

1000 

+

1001 @VHDLLibrary.setter 

+

1002 def VHDLLibrary(self, value: 'VHDLLibrary') -> None: 

+

1003 self._vhdlLibrary = value 

+

1004 

+

1005 @property 

+

1006 def VHDLVersion(self) -> VHDLVersion: 

+

1007 """Property setting or returning the VHDL version of this fileset.""" 

+

1008 if self._vhdlVersion is not None: 

+

1009 return self._vhdlVersion 

+

1010 elif self._parent is not None: 

+

1011 return self._parent.VHDLVersion 

+

1012 elif self._design is not None: 1012 ↛ 1015line 1012 didn't jump to line 1015 because the condition on line 1012 was always true

+

1013 return self._design.VHDLVersion 

+

1014 else: 

+

1015 raise Exception("VHDLVersion was neither set locally nor globally.") 

+

1016 

+

1017 @VHDLVersion.setter 

+

1018 def VHDLVersion(self, value: VHDLVersion) -> None: 

+

1019 self._vhdlVersion = value 

+

1020 

+

1021 @property 

+

1022 def VerilogVersion(self) -> SystemVerilogVersion: 

+

1023 """Property setting or returning the Verilog version of this fileset.""" 

+

1024 if self._verilogVersion is not None: 

+

1025 return self._verilogVersion 

+

1026 elif self._parent is not None: 

+

1027 return self._parent.VerilogVersion 

+

1028 elif self._design is not None: 1028 ↛ 1031line 1028 didn't jump to line 1031 because the condition on line 1028 was always true

+

1029 return self._design.VerilogVersion 

+

1030 else: 

+

1031 raise Exception("VerilogVersion was neither set locally nor globally.") 

+

1032 

+

1033 @VerilogVersion.setter 

+

1034 def VerilogVersion(self, value: SystemVerilogVersion) -> None: 

+

1035 self._verilogVersion = value 

+

1036 

+

1037 @property 

+

1038 def SVVersion(self) -> SystemVerilogVersion: 

+

1039 """Property setting or returning the SystemVerilog version of this fileset.""" 

+

1040 if self._svVersion is not None: 

+

1041 return self._svVersion 

+

1042 elif self._parent is not None: 

+

1043 return self._parent.SVVersion 

+

1044 elif self._design is not None: 1044 ↛ 1047line 1044 didn't jump to line 1047 because the condition on line 1044 was always true

+

1045 return self._design.SVVersion 

+

1046 else: 

+

1047 raise Exception("SVVersion was neither set locally nor globally.") 

+

1048 

+

1049 @SVVersion.setter 

+

1050 def SVVersion(self, value: SystemVerilogVersion) -> None: 

+

1051 self._svVersion = value 

+

1052 

+

1053 @property 

+

1054 def SRDLVersion(self) -> SystemRDLVersion: 

+

1055 if self._srdlVersion is not None: 

+

1056 return self._srdlVersion 

+

1057 elif self._parent is not None: 

+

1058 return self._parent.SRDLVersion 

+

1059 elif self._design is not None: 

+

1060 return self._design.SRDLVersion 

+

1061 else: 

+

1062 raise Exception("SRDLVersion was neither set locally nor globally.") 

+

1063 

+

1064 @SRDLVersion.setter 

+

1065 def SRDLVersion(self, value: SystemRDLVersion) -> None: 

+

1066 self._srdlVersion = value 

+

1067 

+

1068 def __len__(self) -> int: 

+

1069 """ 

+

1070 Returns number of attributes set on this fileset. 

+

1071 

+

1072 :returns: The number if attributes set on this fileset. 

+

1073 """ 

+

1074 return len(self._attributes) 

+

1075 

+

1076 def __getitem__(self, key: Type[Attribute]) -> Any: 

+

1077 """Index access for returning attributes on this fileset. 

+

1078 

+

1079 :param key: The attribute type. 

+

1080 :returns: The attribute's value. 

+

1081 :raises TypeError: When parameter 'key' is not a subclass of Attribute. 

+

1082 """ 

+

1083 if not issubclass(key, Attribute): 1083 ↛ 1084line 1083 didn't jump to line 1084 because the condition on line 1083 was never true

+

1084 raise TypeError("Parameter 'key' is not an 'Attribute'.") 

+

1085 

+

1086 try: 

+

1087 return self._attributes[key] 

+

1088 except KeyError: 

+

1089 return key.resolve(self, key) 

+

1090 

+

1091 def __setitem__(self, key: Type[Attribute], value: typing_Any) -> None: 

+

1092 """ 

+

1093 Index access for adding or setting attributes on this fileset. 

+

1094 

+

1095 :param key: The attribute type. 

+

1096 :param value: The attributes value. 

+

1097 :raises TypeError: When parameter 'key' is not a subclass of Attribute. 

+

1098 """ 

+

1099 if not issubclass(key, Attribute): 1099 ↛ 1100line 1099 didn't jump to line 1100 because the condition on line 1099 was never true

+

1100 raise TypeError("Parameter 'key' is not an 'Attribute'.") 

+

1101 

+

1102 self._attributes[key] = value 

+

1103 

+

1104 def __delitem__(self, key: Type[Attribute]) -> None: 

+

1105 """ 

+

1106 Index access for deleting attributes on this fileset. 

+

1107 

+

1108 :param key: The attribute type. 

+

1109 """ 

+

1110 if not issubclass(key, Attribute): 1110 ↛ 1111line 1110 didn't jump to line 1111 because the condition on line 1110 was never true

+

1111 raise TypeError("Parameter 'key' is not an 'Attribute'.") 

+

1112 

+

1113 del self._attributes[key] 

+

1114 

+

1115 def __str__(self) -> str: 

+

1116 """Returns the fileset's name.""" 

+

1117 return self._name 

+

1118 

+

1119 

+

1120@export 

+

1121class VHDLLibrary(metaclass=ExtendedType, slots=True): 

+

1122 """ 

+

1123 A :term:`VHDLLibrary` represents a group of VHDL source files compiled into the same VHDL library. 

+

1124 

+

1125 :arg name: The VHDL libraries' name. 

+

1126 :arg project: Project the VHDL library is associated with. 

+

1127 :arg design: Design the VHDL library is associated with. 

+

1128 :arg vhdlVersion: Default VHDL version for files in this VHDL library, if not specified for the file itself. 

+

1129 """ 

+

1130 

+

1131 _name: str 

+

1132 _project: Nullable['Project'] 

+

1133 _design: Nullable['Design'] 

+

1134 _files: List[File] 

+

1135 _vhdlVersion: VHDLVersion 

+

1136 

+

1137 _dependencyNode: Vertex 

+

1138 

+

1139 def __init__( 

+

1140 self, 

+

1141 name: str, 

+

1142 project: Nullable["Project"] = None, 

+

1143 design: Nullable["Design"] = None, 

+

1144 vhdlVersion: Nullable[VHDLVersion] = None 

+

1145 ): 

+

1146 self._name = name 

+

1147 if project is not None: 

+

1148 self._project = project 

+

1149 self._design = project._defaultDesign if design is None else design 

+

1150 self._dependencyNode = Vertex(value=self, graph=self._design._vhdlLibraryDependencyGraph) 

+

1151 

+

1152 if name in self._design._vhdlLibraries: 1152 ↛ 1153line 1152 didn't jump to line 1153 because the condition on line 1152 was never true

+

1153 raise Exception(f"Library '{name}' already in design '{self._design.Name}'.") 

+

1154 else: 

+

1155 self._design._vhdlLibraries[name] = self 

+

1156 

+

1157 elif design is not None: 

+

1158 self._project = design._project 

+

1159 self._design = design 

+

1160 self._dependencyNode = Vertex(value=self, graph=design._vhdlLibraryDependencyGraph) 

+

1161 

+

1162 if name in design._vhdlLibraries: 1162 ↛ 1163line 1162 didn't jump to line 1163 because the condition on line 1162 was never true

+

1163 raise Exception(f"Library '{name}' already in design '{design.Name}'.") 

+

1164 else: 

+

1165 design._vhdlLibraries[name] = self 

+

1166 

+

1167 else: 

+

1168 self._project = None 

+

1169 self._design = None 

+

1170 self._dependencyNode = None 

+

1171 

+

1172 self._files = [] 

+

1173 self._vhdlVersion = vhdlVersion 

+

1174 

+

1175 @property 

+

1176 def Name(self) -> str: 

+

1177 return self._name 

+

1178 

+

1179 @property 

+

1180 def Project(self) -> Nullable['Project']: 

+

1181 """Property setting or returning the project this VHDL library is used in.""" 

+

1182 return self._project 

+

1183 

+

1184 @Project.setter 

+

1185 def Project(self, value: 'Project') -> None: 

+

1186 if not isinstance(value, Project): 1186 ↛ 1187line 1186 didn't jump to line 1187 because the condition on line 1186 was never true

+

1187 raise TypeError("Parameter 'value' is not of type 'Project'.") 

+

1188 

+

1189 if value is None: 1189 ↛ 1191line 1189 didn't jump to line 1191 because the condition on line 1189 was never true

+

1190 # TODO: unlink VHDLLibrary from project 

+

1191 self._project = None 

+

1192 else: 

+

1193 self._project = value 

+

1194 if self._design is None: 1194 ↛ exitline 1194 didn't return from function 'Project' because the condition on line 1194 was always true

+

1195 self._design = value._defaultDesign 

+

1196 

+

1197 @property 

+

1198 def Design(self) -> Nullable['Design']: 

+

1199 """Property setting or returning the design this VHDL library is used in.""" 

+

1200 return self._design 

+

1201 

+

1202 @Design.setter 

+

1203 def Design(self, value: 'Design') -> None: 

+

1204 if not isinstance(value, Design): 

+

1205 raise TypeError("Parameter 'value' is not of type 'Design'.") 

+

1206 

+

1207 if value is None: 

+

1208 # TODO: unlink VHDLLibrary from design 

+

1209 self._design = None 

+

1210 else: 

+

1211 if self._design is None: 

+

1212 self._design = value 

+

1213 self._dependencyNode = Vertex(value=self, graph=self._design._vhdlLibraryDependencyGraph) 

+

1214 elif self._design is not value: 

+

1215 # TODO: move VHDLLibrary to other design 

+

1216 # TODO: create new vertex in dependency graph and remove vertex from old graph 

+

1217 self._design = value 

+

1218 else: 

+

1219 pass 

+

1220 

+

1221 if self._project is None: 

+

1222 self._project = value._project 

+

1223 elif self._project is not value._project: 

+

1224 raise Exception("The design's project is not identical to the already assigned project.") 

+

1225 

+

1226 @property 

+

1227 def Files(self) -> Generator[File, None, None]: 

+

1228 """Read-only property to return all files in this VHDL library.""" 

+

1229 for file in self._files: 

+

1230 yield file 

+

1231 

+

1232 @property 

+

1233 def VHDLVersion(self) -> VHDLVersion: 

+

1234 """Property setting or returning the VHDL version of this VHDL library.""" 

+

1235 if self._vhdlVersion is not None: 

+

1236 return self._vhdlVersion 

+

1237 elif self._design is not None: 1237 ↛ 1240line 1237 didn't jump to line 1240 because the condition on line 1237 was always true

+

1238 return self._design.VHDLVersion 

+

1239 else: 

+

1240 raise Exception("VHDLVersion is not set on VHDLLibrary nor parent object.") 

+

1241 

+

1242 @VHDLVersion.setter 

+

1243 def VHDLVersion(self, value: VHDLVersion) -> None: 

+

1244 self._vhdlVersion = value 

+

1245 

+

1246 def AddDependency(self, library: 'VHDLLibrary') -> None: 

+

1247 library.parent = self 

+

1248 

+

1249 def AddFile(self, vhdlFile: VHDLSourceFile) -> None: 

+

1250 if not isinstance(vhdlFile, VHDLSourceFile): 1250 ↛ 1251line 1250 didn't jump to line 1251 because the condition on line 1250 was never true

+

1251 ex = TypeError(f"Parameter 'vhdlFile' is not a 'VHDLSourceFile'.") 

+

1252 if version_info >= (3, 11): # pragma: no cover 

+

1253 ex.add_note(f"Got type '{getFullyQualifiedName(vhdlFile)}'.") 

+

1254 raise ex 

+

1255 

+

1256 self._files.append(vhdlFile) 

+

1257 

+

1258 def AddFiles(self, vhdlFiles: Iterable[VHDLSourceFile]) -> None: 

+

1259 for vhdlFile in vhdlFiles: 

+

1260 if not isinstance(vhdlFile, VHDLSourceFile): 

+

1261 raise TypeError(f"Item '{vhdlFile}' in parameter 'vhdlFiles' is not a 'VHDLSourceFile'.") 

+

1262 

+

1263 self._files.append(vhdlFile) 

+

1264 

+

1265 @property 

+

1266 def FileCount(self) -> int: 

+

1267 """Returns number of files.""" 

+

1268 return len(self._files) 

+

1269 

+

1270 def __len__(self) -> int: 

+

1271 """ 

+

1272 Returns number of attributes set on this VHDL library. 

+

1273 

+

1274 :returns: The number if attributes set on this VHDL library. 

+

1275 """ 

+

1276 return len(self._attributes) 

+

1277 

+

1278 def __getitem__(self, key: Type[Attribute]) -> Any: 

+

1279 """Index access for returning attributes on this VHDL library. 

+

1280 

+

1281 :param key: The attribute type. 

+

1282 :returns: The attribute's value. 

+

1283 :raises TypeError: When parameter 'key' is not a subclass of Attribute. 

+

1284 """ 

+

1285 if not issubclass(key, Attribute): 

+

1286 raise TypeError("Parameter 'key' is not an 'Attribute'.") 

+

1287 

+

1288 try: 

+

1289 return self._attributes[key] 

+

1290 except KeyError: 

+

1291 return key.resolve(self, key) 

+

1292 

+

1293 def __setitem__(self, key: Type[Attribute], value: typing_Any) -> None: 

+

1294 """ 

+

1295 Index access for adding or setting attributes on this VHDL library. 

+

1296 

+

1297 :param key: The attribute type. 

+

1298 :param value: The attributes value. 

+

1299 :raises TypeError: When parameter 'key' is not a subclass of Attribute. 

+

1300 """ 

+

1301 if not issubclass(key, Attribute): 

+

1302 raise TypeError("Parameter 'key' is not an 'Attribute'.") 

+

1303 

+

1304 self._attributes[key] = value 

+

1305 

+

1306 def __delitem__(self, key: Type[Attribute]) -> None: 

+

1307 """ 

+

1308 Index access for deleting attributes on this VHDL library. 

+

1309 

+

1310 :param key: The attribute type. 

+

1311 """ 

+

1312 if not issubclass(key, Attribute): 

+

1313 raise TypeError("Parameter 'key' is not an 'Attribute'.") 

+

1314 

+

1315 del self._attributes[key] 

+

1316 

+

1317 def __str__(self) -> str: 

+

1318 """Returns the VHDL library's name.""" 

+

1319 return self._name 

+

1320 

+

1321 

+

1322@export 

+

1323class Design(metaclass=ExtendedType, slots=True): 

+

1324 """ 

+

1325 A :term:`Design` represents a group of filesets and the source files therein. 

+

1326 

+

1327 Each design contains at least one fileset - the :term:`default fileset`. For 

+

1328 designs with VHDL source files, a independent `VHDLLibraries` overlay structure 

+

1329 exists. 

+

1330 

+

1331 :arg name: The design's name. 

+

1332 :arg topLevel: Name of the design's toplevel. 

+

1333 :arg directory: Path of this design (absolute or relative to the project). 

+

1334 :arg project: Project the design is associated with. 

+

1335 :arg vhdlVersion: Default VHDL version for files in this design, if not specified for the file itself. 

+

1336 :arg verilogVersion: Default Verilog version for files in this design, if not specified for the file itself. 

+

1337 :arg svVersion: Default SystemVerilog version for files in this design, if not specified for the file itself. 

+

1338 :arg srdlVersion: Default SystemRDL version for files in this fileset, if not specified for the file itself. 

+

1339 """ 

+

1340 

+

1341 _name: str 

+

1342 _topLevel: Nullable[str] 

+

1343 _project: Nullable['Project'] 

+

1344 _directory: pathlib_Path 

+

1345 _fileSets: Dict[str, FileSet] 

+

1346 _defaultFileSet: Nullable[FileSet] 

+

1347 _attributes: Dict[Type[Attribute], typing_Any] 

+

1348 

+

1349 _vhdlLibraries: Dict[str, VHDLLibrary] 

+

1350 _vhdlVersion: VHDLVersion 

+

1351 _verilogVersion: SystemVerilogVersion 

+

1352 _svVersion: SystemVerilogVersion 

+

1353 _srdlVersion: SystemRDLVersion 

+

1354 _externalVHDLLibraries: List 

+

1355 

+

1356 _vhdlLibraryDependencyGraph: Graph 

+

1357 _fileDependencyGraph: Graph 

+

1358 

+

1359 def __init__( 

+

1360 self, 

+

1361 name: str, 

+

1362 topLevel: Nullable[str] = None, 

+

1363 directory: pathlib_Path = pathlib_Path("."), 

+

1364 project: Nullable["Project"] = None, 

+

1365 vhdlVersion: Nullable[VHDLVersion] = None, 

+

1366 verilogVersion: Nullable[SystemVerilogVersion] = None, 

+

1367 svVersion: Nullable[SystemVerilogVersion] = None, 

+

1368 srdlVersion: Nullable[SystemRDLVersion] = None 

+

1369 ): 

+

1370 self._name = name 

+

1371 self._topLevel = topLevel 

+

1372 self._project = project 

+

1373 if project is not None: 

+

1374 project._designs[name] = self 

+

1375 self._directory = directory 

+

1376 self._fileSets = {} 

+

1377 self._defaultFileSet = FileSet("default", project=project, design=self) 

+

1378 self._attributes = {} 

+

1379 self._vhdlLibraries = {} 

+

1380 self._vhdlVersion = vhdlVersion 

+

1381 self._verilogVersion = verilogVersion 

+

1382 self._svVersion = svVersion 

+

1383 self._srdlVersion = srdlVersion 

+

1384 self._externalVHDLLibraries = [] 

+

1385 

+

1386 self._vhdlLibraryDependencyGraph = Graph() 

+

1387 self._fileDependencyGraph = Graph() 

+

1388 

+

1389 @property 

+

1390 def Name(self) -> str: 

+

1391 """Property setting or returning the design's name.""" 

+

1392 return self._name 

+

1393 

+

1394 @Name.setter 

+

1395 def Name(self, value: str) -> None: 

+

1396 self._name = value 

+

1397 

+

1398 @property 

+

1399 def TopLevel(self) -> str: 

+

1400 """Property setting or returning the fileset's toplevel.""" 

+

1401 return self._topLevel 

+

1402 

+

1403 @TopLevel.setter 

+

1404 def TopLevel(self, value: str) -> None: 

+

1405 self._topLevel = value 

+

1406 

+

1407 @property 

+

1408 def Project(self) -> Nullable['Project']: 

+

1409 """Property setting or returning the project this design is used in.""" 

+

1410 return self._project 

+

1411 

+

1412 @Project.setter 

+

1413 def Project(self, value: 'Project') -> None: 

+

1414 self._project = value 

+

1415 

+

1416 @property 

+

1417 def Directory(self) -> pathlib_Path: 

+

1418 """Property setting or returning the directory this design is located in.""" 

+

1419 return self._directory 

+

1420 

+

1421 @Directory.setter 

+

1422 def Directory(self, value: pathlib_Path) -> None: 

+

1423 self._directory = value 

+

1424 

+

1425 @property 

+

1426 def ResolvedPath(self) -> pathlib_Path: 

+

1427 """Read-only property returning the resolved path of this fileset.""" 

+

1428 if self._directory.is_absolute(): 1428 ↛ 1429line 1428 didn't jump to line 1429 because the condition on line 1428 was never true

+

1429 return self._directory.resolve() 

+

1430 elif self._project is not None: 1430 ↛ 1440line 1430 didn't jump to line 1440 because the condition on line 1430 was always true

+

1431 path = (self._project.ResolvedPath / self._directory).resolve() 

+

1432 

+

1433 if path.is_absolute(): 1433 ↛ 1437line 1433 didn't jump to line 1437 because the condition on line 1433 was always true

+

1434 return path 

+

1435 else: 

+

1436 # WORKAROUND: https://stackoverflow.com/questions/67452690/pathlib-path-relative-to-vs-os-path-relpath 

+

1437 return pathlib_Path(path_relpath(path, pathlib_Path.cwd())) 

+

1438 else: 

+

1439 # TODO: message and exception type 

+

1440 raise Exception("") 

+

1441 

+

1442 @property 

+

1443 def DefaultFileSet(self) -> FileSet: 

+

1444 """Property setting or returning the default fileset of this design.""" 

+

1445 return self._defaultFileSet 

+

1446 

+

1447 @DefaultFileSet.setter 

+

1448 def DefaultFileSet(self, value: Union[str, FileSet]) -> None: 

+

1449 if isinstance(value, str): 

+

1450 if value not in self._fileSets.keys(): 

+

1451 raise Exception(f"Fileset '{value}' is not in this design.") 

+

1452 

+

1453 self._defaultFileSet = self._fileSets[value] 

+

1454 elif isinstance(value, FileSet): 

+

1455 if value not in self.FileSets: 

+

1456 raise Exception(f"Fileset '{value}' is not associated to this design.") 

+

1457 

+

1458 self._defaultFileSet = value 

+

1459 else: 

+

1460 raise ValueError("Unsupported parameter type for 'value'.") 

+

1461 

+

1462 # TODO: return generator with another method 

+

1463 @property 

+

1464 def FileSets(self) -> Dict[str, FileSet]: 

+

1465 """Read-only property returning the dictionary of filesets.""" 

+

1466 return self._fileSets 

+

1467 

+

1468 def Files(self, fileType: FileType = FileTypes.Any, fileSet: Union[str, FileSet] = None) -> Generator[File, None, None]: 

+

1469 """ 

+

1470 Method returning the files of this design. 

+

1471 

+

1472 :arg fileType: A filter for file types. Default: ``Any``. 

+

1473 :arg fileSet: Specifies if all files from all filesets (``fileSet=None``) are files from a single fileset are returned. 

+

1474 """ 

+

1475 if fileSet is None: 

+

1476 for fileSet in self._fileSets.values(): 

+

1477 for file in fileSet.Files(fileType): 

+

1478 yield file 

+

1479 else: 

+

1480 if isinstance(fileSet, str): 1480 ↛ 1485line 1480 didn't jump to line 1485 because the condition on line 1480 was always true

+

1481 try: 

+

1482 fileSet = self._fileSets[fileSet] 

+

1483 except KeyError as ex: 

+

1484 raise Exception(f"Fileset {fileSet.Name} not bound to design {self.Name}.") from ex 

+

1485 elif not isinstance(fileSet, FileSet): 

+

1486 raise TypeError("Parameter 'fileSet' is not of type 'str' or 'FileSet' nor value 'None'.") 

+

1487 

+

1488 for file in fileSet.Files(fileType): 

+

1489 yield file 

+

1490 

+

1491 def Validate(self) -> None: 

+

1492 """Validate this design.""" 

+

1493 if self._name is None or self._name == "": 1493 ↛ 1494line 1493 didn't jump to line 1494 because the condition on line 1493 was never true

+

1494 raise Exception("Validation: Design has no name.") 

+

1495 

+

1496 if self._directory is None: 1496 ↛ 1497line 1496 didn't jump to line 1497 because the condition on line 1496 was never true

+

1497 raise Exception(f"Validation: Design '{self._name}' has no directory.") 

+

1498 try: 

+

1499 path = self.ResolvedPath 

+

1500 except Exception as ex: 

+

1501 raise Exception(f"Validation: Design '{self._name}' could not compute resolved path.") from ex 

+

1502 if not path.exists(): 1502 ↛ 1503line 1502 didn't jump to line 1503 because the condition on line 1502 was never true

+

1503 raise Exception(f"Validation: Design '{self._name}'s directory '{path}' does not exist.") 

+

1504 if not path.is_dir(): 1504 ↛ 1505line 1504 didn't jump to line 1505 because the condition on line 1504 was never true

+

1505 raise Exception(f"Validation: Design '{self._name}'s directory '{path}' is not a directory.") 

+

1506 

+

1507 if len(self._fileSets) == 0: 1507 ↛ 1508line 1507 didn't jump to line 1508 because the condition on line 1507 was never true

+

1508 raise Exception(f"Validation: Design '{self._name}' has no fileset.") 

+

1509 try: 

+

1510 if self._defaultFileSet is not self._fileSets[self._defaultFileSet.Name]: 1510 ↛ 1511line 1510 didn't jump to line 1511 because the condition on line 1510 was never true

+

1511 raise Exception(f"Validation: Design '{self._name}'s default fileset is the same as listed in filesets.") 

+

1512 except KeyError as ex: 

+

1513 raise Exception(f"Validation: Design '{self._name}'s default fileset is not in list of filesets.") from ex 

+

1514 if self._project is None: 1514 ↛ 1515line 1514 didn't jump to line 1515 because the condition on line 1514 was never true

+

1515 raise Exception(f"Validation: Design '{self._path}' has no project.") 

+

1516 

+

1517 for fileSet in self._fileSets.values(): 

+

1518 fileSet.Validate() 

+

1519 

+

1520 @property 

+

1521 def VHDLLibraries(self) -> Dict[str, VHDLLibrary]: 

+

1522 return self._vhdlLibraries 

+

1523 

+

1524 @property 

+

1525 def VHDLVersion(self) -> VHDLVersion: 

+

1526 if self._vhdlVersion is not None: 

+

1527 return self._vhdlVersion 

+

1528 elif self._project is not None: 1528 ↛ 1531line 1528 didn't jump to line 1531 because the condition on line 1528 was always true

+

1529 return self._project.VHDLVersion 

+

1530 else: 

+

1531 raise Exception("VHDLVersion was neither set locally nor globally.") 

+

1532 

+

1533 @VHDLVersion.setter 

+

1534 def VHDLVersion(self, value: VHDLVersion) -> None: 

+

1535 self._vhdlVersion = value 

+

1536 

+

1537 @property 

+

1538 def VerilogVersion(self) -> SystemVerilogVersion: 

+

1539 if self._verilogVersion is not None: 

+

1540 return self._verilogVersion 

+

1541 elif self._project is not None: 1541 ↛ 1544line 1541 didn't jump to line 1544 because the condition on line 1541 was always true

+

1542 return self._project.VerilogVersion 

+

1543 else: 

+

1544 raise Exception("VerilogVersion was neither set locally nor globally.") 

+

1545 

+

1546 @VerilogVersion.setter 

+

1547 def VerilogVersion(self, value: SystemVerilogVersion) -> None: 

+

1548 self._verilogVersion = value 

+

1549 

+

1550 @property 

+

1551 def SVVersion(self) -> SystemVerilogVersion: 

+

1552 if self._svVersion is not None: 

+

1553 return self._svVersion 

+

1554 elif self._project is not None: 1554 ↛ 1557line 1554 didn't jump to line 1557 because the condition on line 1554 was always true

+

1555 return self._project.SVVersion 

+

1556 else: 

+

1557 raise Exception("SVVersion was neither set locally nor globally.") 

+

1558 

+

1559 @SVVersion.setter 

+

1560 def SVVersion(self, value: SystemVerilogVersion) -> None: 

+

1561 self._svVersion = value 

+

1562 

+

1563 @property 

+

1564 def SRDLVersion(self) -> SystemRDLVersion: 

+

1565 if self._srdlVersion is not None: 

+

1566 return self._srdlVersion 

+

1567 elif self._project is not None: 

+

1568 return self._project.SRDLVersion 

+

1569 else: 

+

1570 raise Exception("SRDLVersion was neither set locally nor globally.") 

+

1571 

+

1572 @SRDLVersion.setter 

+

1573 def SRDLVersion(self, value: SystemRDLVersion) -> None: 

+

1574 self._srdlVersion = value 

+

1575 

+

1576 @property 

+

1577 def ExternalVHDLLibraries(self) -> List: 

+

1578 return self._externalVHDLLibraries 

+

1579 

+

1580 def AddFileSet(self, fileSet: FileSet) -> None: 

+

1581 if not isinstance(fileSet, FileSet): 

+

1582 raise ValueError("Parameter 'fileSet' is not of type ProjectModel.FileSet.") 

+

1583 elif fileSet in self._fileSets: 

+

1584 raise Exception("Design already contains this fileset.") 

+

1585 elif fileSet.Name in self._fileSets.keys(): 

+

1586 raise Exception(f"Design already contains a fileset named '{fileSet.Name}'.") 

+

1587 

+

1588 self._fileSets[fileSet.Name] = fileSet 

+

1589 fileSet.Design = self 

+

1590 fileSet._parent = self 

+

1591 

+

1592 def AddFileSets(self, fileSets: Iterable[FileSet]) -> None: 

+

1593 for fileSet in fileSets: 

+

1594 self.AddFileSet(fileSet) 

+

1595 

+

1596 @property 

+

1597 def FileSetCount(self) -> int: 

+

1598 """Returns number of file sets excl. sub-filesets.""" 

+

1599 return len(self._fileSets) 

+

1600 

+

1601 @property 

+

1602 def TotalFileSetCount(self) -> int: 

+

1603 """Returns number of file sets incl. sub-filesets.""" 

+

1604 fileSetCount = len(self._fileSets) 

+

1605 for fileSet in self._fileSets.values(): 

+

1606 fileSetCount += fileSet.TotalFileSetCount 

+

1607 

+

1608 return fileSetCount 

+

1609 

+

1610 def AddFile(self, file: File) -> None: 

+

1611 if file.FileSet is None: 1611 ↛ 1614line 1611 didn't jump to line 1614 because the condition on line 1611 was always true

+

1612 self._defaultFileSet.AddFile(file) 

+

1613 else: 

+

1614 raise ValueError(f"File '{file.Path!s}' is already part of fileset '{file.FileSet.Name}' and can't be assigned via Design to a default fileset.") 

+

1615 

+

1616 def AddFiles(self, files: Iterable[File]) -> None: 

+

1617 for file in files: 

+

1618 self.AddFile(file) 

+

1619 

+

1620 def AddVHDLLibrary(self, vhdlLibrary: VHDLLibrary) -> None: 

+

1621 if vhdlLibrary.Name in self._vhdlLibraries: 

+

1622 if self._vhdlLibraries[vhdlLibrary.Name] is vhdlLibrary: 

+

1623 raise Exception(f"The VHDLLibrary '{vhdlLibrary.Name}' was already added to the design.") 

+

1624 else: 

+

1625 raise Exception(f"A VHDLLibrary with same name ('{vhdlLibrary.Name}') already exists for this design.") 

+

1626 

+

1627 

+

1628 def __len__(self) -> int: 

+

1629 """ 

+

1630 Returns number of attributes set on this design. 

+

1631 

+

1632 :returns: The number if attributes set on this design. 

+

1633 """ 

+

1634 return len(self._attributes) 

+

1635 

+

1636 def __getitem__(self, key: Type[Attribute]) -> Any: 

+

1637 """Index access for returning attributes on this design. 

+

1638 

+

1639 :param key: The attribute type. 

+

1640 :returns: The attribute's value. 

+

1641 :raises TypeError: When parameter 'key' is not a subclass of Attribute. 

+

1642 """ 

+

1643 if not issubclass(key, Attribute): 1643 ↛ 1644line 1643 didn't jump to line 1644 because the condition on line 1643 was never true

+

1644 raise TypeError("Parameter 'key' is not an 'Attribute'.") 

+

1645 

+

1646 try: 

+

1647 return self._attributes[key] 

+

1648 except KeyError: 

+

1649 return key.resolve(self, key) 

+

1650 

+

1651 def __setitem__(self, key: Type[Attribute], value: typing_Any) -> None: 

+

1652 """ 

+

1653 Index access for adding or setting attributes on this design. 

+

1654 

+

1655 :param key: The attribute type. 

+

1656 :param value: The attributes value. 

+

1657 :raises TypeError: When parameter 'key' is not a subclass of Attribute. 

+

1658 """ 

+

1659 if not issubclass(key, Attribute): 1659 ↛ 1660line 1659 didn't jump to line 1660 because the condition on line 1659 was never true

+

1660 raise TypeError("Parameter 'key' is not an 'Attribute'.") 

+

1661 

+

1662 self._attributes[key] = value 

+

1663 

+

1664 def __delitem__(self, key: Type[Attribute]) -> None: 

+

1665 """ 

+

1666 Index access for deleting attributes on this design. 

+

1667 

+

1668 :param key: The attribute type. 

+

1669 """ 

+

1670 if not issubclass(key, Attribute): 1670 ↛ 1671line 1670 didn't jump to line 1671 because the condition on line 1670 was never true

+

1671 raise TypeError("Parameter 'key' is not an 'Attribute'.") 

+

1672 

+

1673 del self._attributes[key] 

+

1674 

+

1675 def __str__(self) -> str: 

+

1676 return self._name 

+

1677 

+

1678 

+

1679@export 

+

1680class Project(metaclass=ExtendedType, slots=True): 

+

1681 """ 

+

1682 A :term:`Project` represents a group of designs and the source files therein. 

+

1683 

+

1684 :arg name: The project's name. 

+

1685 :arg rootDirectory: Base-path to the project. 

+

1686 :arg vhdlVersion: Default VHDL version for files in this project, if not specified for the file itself. 

+

1687 :arg verilogVersion: Default Verilog version for files in this project, if not specified for the file itself. 

+

1688 :arg svVersion: Default SystemVerilog version for files in this project, if not specified for the file itself. 

+

1689 """ 

+

1690 

+

1691 _name: str 

+

1692 _rootDirectory: pathlib_Path 

+

1693 _designs: Dict[str, Design] 

+

1694 _defaultDesign: Design 

+

1695 _attributes: Dict[Type[Attribute], typing_Any] 

+

1696 

+

1697 _vhdlVersion: VHDLVersion 

+

1698 _verilogVersion: SystemVerilogVersion 

+

1699 _svVersion: SystemVerilogVersion 

+

1700 _srdlVersion: SystemRDLVersion 

+

1701 

+

1702 def __init__( 

+

1703 self, 

+

1704 name: str, 

+

1705 rootDirectory: pathlib_Path = pathlib_Path("."), 

+

1706 vhdlVersion: Nullable[VHDLVersion] = None, 

+

1707 verilogVersion: Nullable[SystemVerilogVersion] = None, 

+

1708 svVersion: Nullable[SystemVerilogVersion] = None 

+

1709 ): 

+

1710 self._name = name 

+

1711 self._rootDirectory = rootDirectory 

+

1712 self._designs = {} 

+

1713 self._defaultDesign = Design("default", project=self) 

+

1714 self._attributes = {} 

+

1715 self._vhdlVersion = vhdlVersion 

+

1716 self._verilogVersion = verilogVersion 

+

1717 self._svVersion = svVersion 

+

1718 

+

1719 @property 

+

1720 def Name(self) -> str: 

+

1721 """Property setting or returning the project's name.""" 

+

1722 return self._name 

+

1723 

+

1724 @property 

+

1725 def RootDirectory(self) -> pathlib_Path: 

+

1726 """Property setting or returning the root directory this project is located in.""" 

+

1727 return self._rootDirectory 

+

1728 

+

1729 @RootDirectory.setter 

+

1730 def RootDirectory(self, value: pathlib_Path) -> None: 

+

1731 self._rootDirectory = value 

+

1732 

+

1733 @property 

+

1734 def ResolvedPath(self) -> pathlib_Path: 

+

1735 """Read-only property returning the resolved path of this fileset.""" 

+

1736 path = self._rootDirectory.resolve() 

+

1737 if self._rootDirectory.is_absolute(): 

+

1738 return path 

+

1739 else: 

+

1740 # WORKAROUND: https://stackoverflow.com/questions/67452690/pathlib-path-relative-to-vs-os-path-relpath 

+

1741 return pathlib_Path(path_relpath(path, pathlib_Path.cwd())) 

+

1742 

+

1743 # TODO: return generator with another method 

+

1744 @property 

+

1745 def Designs(self) -> Dict[str, Design]: 

+

1746 return self._designs 

+

1747 

+

1748 @property 

+

1749 def DefaultDesign(self) -> Design: 

+

1750 return self._defaultDesign 

+

1751 

+

1752 def Validate(self) -> None: 

+

1753 """Validate this project.""" 

+

1754 if self._name is None or self._name == "": 1754 ↛ 1755line 1754 didn't jump to line 1755 because the condition on line 1754 was never true

+

1755 raise Exception("Validation: Project has no name.") 

+

1756 

+

1757 if self._rootDirectory is None: 1757 ↛ 1758line 1757 didn't jump to line 1758 because the condition on line 1757 was never true

+

1758 raise Exception(f"Validation: Project '{self._name}' has no root directory.") 

+

1759 try: 

+

1760 path = self.ResolvedPath 

+

1761 except Exception as ex: 

+

1762 raise Exception(f"Validation: Project '{self._name}' could not compute resolved path.") from ex 

+

1763 if not path.exists(): 1763 ↛ 1764line 1763 didn't jump to line 1764 because the condition on line 1763 was never true

+

1764 raise Exception(f"Validation: Project '{self._name}'s directory '{path}' does not exist.") 

+

1765 if not path.is_dir(): 1765 ↛ 1766line 1765 didn't jump to line 1766 because the condition on line 1765 was never true

+

1766 raise Exception(f"Validation: Project '{self._name}'s directory '{path}' is not a directory.") 

+

1767 

+

1768 if len(self._designs) == 0: 1768 ↛ 1769line 1768 didn't jump to line 1769 because the condition on line 1768 was never true

+

1769 raise Exception(f"Validation: Project '{self._name}' has no design.") 

+

1770 try: 

+

1771 if self._defaultDesign is not self._designs[self._defaultDesign.Name]: 1771 ↛ 1772line 1771 didn't jump to line 1772 because the condition on line 1771 was never true

+

1772 raise Exception(f"Validation: Project '{self._name}'s default design is the same as listed in designs.") 

+

1773 except KeyError as ex: 

+

1774 raise Exception(f"Validation: Project '{self._name}'s default design is not in list of designs.") from ex 

+

1775 

+

1776 for design in self._designs.values(): 

+

1777 design.Validate() 

+

1778 

+

1779 @property 

+

1780 def DesignCount(self) -> int: 

+

1781 """Returns number of designs.""" 

+

1782 return len(self._designs) 

+

1783 

+

1784 @property 

+

1785 def VHDLVersion(self) -> VHDLVersion: 

+

1786 # TODO: check for None and return exception 

+

1787 return self._vhdlVersion 

+

1788 

+

1789 @VHDLVersion.setter 

+

1790 def VHDLVersion(self, value: VHDLVersion) -> None: 

+

1791 self._vhdlVersion = value 

+

1792 

+

1793 @property 

+

1794 def VerilogVersion(self) -> SystemVerilogVersion: 

+

1795 # TODO: check for None and return exception 

+

1796 return self._verilogVersion 

+

1797 

+

1798 @VerilogVersion.setter 

+

1799 def VerilogVersion(self, value: SystemVerilogVersion) -> None: 

+

1800 self._verilogVersion = value 

+

1801 

+

1802 @property 

+

1803 def SVVersion(self) -> SystemVerilogVersion: 

+

1804 # TODO: check for None and return exception 

+

1805 return self._svVersion 

+

1806 

+

1807 @SVVersion.setter 

+

1808 def SVVersion(self, value: SystemVerilogVersion) -> None: 

+

1809 self._svVersion = value 

+

1810 

+

1811 @property 

+

1812 def SRDLVersion(self) -> SystemRDLVersion: 

+

1813 # TODO: check for None and return exception 

+

1814 return self._srdlVersion 

+

1815 

+

1816 @SRDLVersion.setter 

+

1817 def SRDLVersion(self, value: SystemRDLVersion) -> None: 

+

1818 self._srdlVersion = value 

+

1819 

+

1820 def __len__(self) -> int: 

+

1821 """ 

+

1822 Returns number of attributes set on this project. 

+

1823 

+

1824 :returns: The number if attributes set on this project. 

+

1825 """ 

+

1826 return len(self._attributes) 

+

1827 

+

1828 def __getitem__(self, key: Type[Attribute]) -> Any: 

+

1829 """Index access for returning attributes on this project. 

+

1830 

+

1831 :param key: The attribute type. 

+

1832 :returns: The attribute's value. 

+

1833 :raises TypeError: When parameter 'key' is not a subclass of Attribute. 

+

1834 """ 

+

1835 if not issubclass(key, Attribute): 1835 ↛ 1836line 1835 didn't jump to line 1836 because the condition on line 1835 was never true

+

1836 raise TypeError("Parameter 'key' is not an 'Attribute'.") 

+

1837 

+

1838 try: 

+

1839 return self._attributes[key] 

+

1840 except KeyError: 

+

1841 return key.resolve(self, key) 

+

1842 

+

1843 def __setitem__(self, key: Type[Attribute], value: typing_Any) -> None: 

+

1844 """ 

+

1845 Index access for adding or setting attributes on this project. 

+

1846 

+

1847 :param key: The attribute type. 

+

1848 :param value: The attributes value. 

+

1849 :raises TypeError: When parameter 'key' is not a subclass of Attribute. 

+

1850 """ 

+

1851 if not issubclass(key, Attribute): 1851 ↛ 1852line 1851 didn't jump to line 1852 because the condition on line 1851 was never true

+

1852 raise TypeError("Parameter 'key' is not an 'Attribute'.") 

+

1853 

+

1854 self._attributes[key] = value 

+

1855 

+

1856 def __delitem__(self, key: Type[Attribute]) -> None: 

+

1857 """ 

+

1858 Index access for deleting attributes on this project. 

+

1859 

+

1860 :param key: The attribute type. 

+

1861 """ 

+

1862 if not issubclass(key, Attribute): 1862 ↛ 1863line 1862 didn't jump to line 1863 because the condition on line 1862 was never true

+

1863 raise TypeError("Parameter 'key' is not an 'Attribute'.") 

+

1864 

+

1865 del self._attributes[key] 

+

1866 

+

1867 def __str__(self) -> str: 

+

1868 return self._name 

+
+ + + diff --git a/coverage/z_f31a6c1cb708999d_Vivado_py.html b/coverage/z_f31a6c1cb708999d_Vivado_py.html new file mode 100644 index 00000000..9d901ef3 --- /dev/null +++ b/coverage/z_f31a6c1cb708999d_Vivado_py.html @@ -0,0 +1,303 @@ + + + + + Coverage for pyEDAA/ProjectModel/Xilinx/Vivado.py: 87% + + + + + +
+
+

+ Coverage for pyEDAA/ProjectModel/Xilinx/Vivado.py: + 87% +

+ +

+ 120 statements   + + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.4, + created at 2024-11-08 22:18 +0000 +

+ +
+
+
+

1# ==================================================================================================================== # 

+

2# _____ ____ _ _ ____ _ _ __ __ _ _ # 

+

3# _ __ _ _| ____| _ \ / \ / \ | _ \ _ __ ___ (_) ___ ___| |_| \/ | ___ __| | ___| | # 

+

4# | '_ \| | | | _| | | | |/ _ \ / _ \ | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ | # 

+

5# | |_) | |_| | |___| |_| / ___ \ / ___ \ _| __/| | | (_) | | __/ (__| |_| | | | (_) | (_| | __/ | # 

+

6# | .__/ \__, |_____|____/_/ \_\/_/ \_(_)_| |_| \___// |\___|\___|\__|_| |_|\___/ \__,_|\___|_| # 

+

7# |_| |___/ |__/ # 

+

8# ==================================================================================================================== # 

+

9# Authors: # 

+

10# Patrick Lehmann # 

+

11# # 

+

12# License: # 

+

13# ==================================================================================================================== # 

+

14# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany # 

+

15# # 

+

16# Licensed under the Apache License, Version 2.0 (the "License"); # 

+

17# you may not use this file except in compliance with the License. # 

+

18# You may obtain a copy of the License at # 

+

19# # 

+

20# http://www.apache.org/licenses/LICENSE-2.0 # 

+

21# # 

+

22# Unless required by applicable law or agreed to in writing, software # 

+

23# distributed under the License is distributed on an "AS IS" BASIS, # 

+

24# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # 

+

25# See the License for the specific language governing permissions and # 

+

26# limitations under the License. # 

+

27# # 

+

28# SPDX-License-Identifier: Apache-2.0 # 

+

29# ==================================================================================================================== # 

+

30# 

+

31"""Specific file types and attributes for Xilinx Vivado.""" 

+

32from pathlib import Path 

+

33from typing import Iterable, Optional as Nullable 

+

34from xml.dom import minidom, Node 

+

35 

+

36from pyTooling.Decorators import export 

+

37from pyTooling.MetaClasses import ExtendedType 

+

38from pyVHDLModel import VHDLVersion 

+

39 

+

40from pyEDAA.ProjectModel import ProjectFile, XMLFile, XMLContent, SDCContent, Project, FileSet, Attribute, Design 

+

41from pyEDAA.ProjectModel import File as Model_File 

+

42from pyEDAA.ProjectModel import ConstraintFile as Model_ConstraintFile 

+

43from pyEDAA.ProjectModel import VerilogSourceFile as Model_VerilogSourceFile 

+

44from pyEDAA.ProjectModel import VHDLSourceFile as Model_VHDLSourceFile 

+

45 

+

46 

+

47@export 

+

48class UsedInAttribute(Attribute): 

+

49 KEY = "UsedIn" 

+

50 VALUE_TYPE = Iterable[str] 

+

51 

+

52 

+

53@export 

+

54class File(Model_File): 

+

55 pass 

+

56 

+

57 

+

58class VivadoFileMixIn(metaclass=ExtendedType, mixin=True): 

+

59 def _registerAttributes(self) -> None: 

+

60 self._attributes[UsedInAttribute] = [] 

+

61 

+

62 

+

63@export 

+

64class ConstraintFile(Model_ConstraintFile, VivadoFileMixIn): 

+

65 def _registerAttributes(self) -> None: 

+

66 super()._registerAttributes() 

+

67 VivadoFileMixIn._registerAttributes(self) 

+

68 

+

69 

+

70@export 

+

71class VerilogSourceFile(Model_VerilogSourceFile): 

+

72 def _registerAttributes(self) -> None: 

+

73 super()._registerAttributes() 

+

74 VivadoFileMixIn._registerAttributes(self) 

+

75 

+

76 

+

77@export 

+

78class VHDLSourceFile(Model_VHDLSourceFile): 

+

79 def _registerAttributes(self) -> None: 

+

80 super()._registerAttributes() 

+

81 VivadoFileMixIn._registerAttributes(self) 

+

82 

+

83 

+

84@export 

+

85class VivadoProjectFile(ProjectFile, XMLContent): 

+

86 """A Vivado project file (``*.xpr``).""" 

+

87 

+

88 _xprProject: Project 

+

89 

+

90 def __init__( 

+

91 self, 

+

92 path: Path, 

+

93 project: Nullable[Project] = None, 

+

94 design: Nullable[Design] = None, 

+

95 fileSet: Nullable[FileSet] = None 

+

96 ) -> None: 

+

97 super().__init__(path, project, design, fileSet) 

+

98 

+

99 self._xprProject = None 

+

100 

+

101 @property 

+

102 def ProjectModel(self) -> Project: 

+

103 return self._xprProject 

+

104 

+

105 def Parse(self) -> None: 

+

106 if not self._path.exists(): 106 ↛ 107line 106 didn't jump to line 107 because the condition on line 106 was never true

+

107 raise Exception(f"Vivado project file '{self._path!s}' not found.") from FileNotFoundError(f"File '{self._path!s}' not found.") 

+

108 

+

109 try: 

+

110 root = minidom.parse(str(self._path)).documentElement 

+

111 except Exception as ex: 

+

112 raise Exception(f"Couldn't open '{self._path!s}'.") from ex 

+

113 

+

114 self._xprProject = Project(self._path.stem, rootDirectory=self._path.parent) 

+

115 self._ParseRootElement(root) 

+

116 

+

117 def _ParseRootElement(self, root) -> None: 

+

118 for rootNode in root.childNodes: 118 ↛ exitline 118 didn't return from function '_ParseRootElement' because the loop on line 118 didn't complete

+

119 if rootNode.nodeName == "FileSets": 

+

120 self._ParseFileSets(rootNode) 

+

121 break 

+

122 

+

123 def _ParseFileSets(self, filesetsNode) -> None: 

+

124 for fileSetsNode in filesetsNode.childNodes: 

+

125 if fileSetsNode.nodeType == Node.ELEMENT_NODE and fileSetsNode.tagName == "FileSet": 

+

126 self._ParseFileSet(fileSetsNode) 

+

127 

+

128 def _ParseFileSet(self, filesetNode) -> None: 

+

129 filesetName = filesetNode.getAttribute("Name") 

+

130 fileset = FileSet(filesetName, design=self._xprProject.DefaultDesign) 

+

131 

+

132 for fileNode in filesetNode.childNodes: 

+

133 if fileNode.nodeType == Node.ELEMENT_NODE: 

+

134 if fileNode.tagName == "File": 

+

135 self._ParseFile(fileNode, fileset) 

+

136 elif fileNode.nodeType == Node.ELEMENT_NODE and fileNode.tagName == "Config": 

+

137 self._ParseFileSetConfig(fileNode, fileset) 

+

138 

+

139 def _ParseFile(self, fileNode, fileset) -> None: 

+

140 croppedPath = fileNode.getAttribute("Path").replace("$PPRDIR/", "") 

+

141 filePath = Path(croppedPath) 

+

142 if filePath.suffix in (".vhd", ".vhdl"): 

+

143 self._ParseVHDLFile(fileNode, filePath, fileset) 

+

144 elif filePath.suffix == ".xdc": 144 ↛ 146line 144 didn't jump to line 146 because the condition on line 144 was always true

+

145 self._ParseXDCFile(fileNode, filePath, fileset) 

+

146 elif filePath.suffix == ".v": 

+

147 self._ParseVerilogFile(fileNode, filePath, fileset) 

+

148 elif filePath.suffix == ".xci": 

+

149 self._ParseXCIFile(fileNode, filePath, fileset) 

+

150 else: 

+

151 self._ParseDefaultFile(fileNode, filePath, fileset) 

+

152 

+

153 def _ParseVHDLFile(self, fileNode, path, fileset) -> None: 

+

154 vhdlFile = VHDLSourceFile(path) 

+

155 fileset.AddFile(vhdlFile) 

+

156 usedInAttr = vhdlFile[UsedInAttribute] 

+

157 

+

158 for childNode in fileNode.childNodes: 

+

159 if childNode.nodeType == Node.ELEMENT_NODE and childNode.tagName == "FileInfo": 

+

160 if childNode.getAttribute("SFType") == "VHDL2008": 

+

161 vhdlFile.VHDLVersion = VHDLVersion.VHDL2008 

+

162 else: 

+

163 vhdlFile.VHDLVersion = VHDLVersion.VHDL93 

+

164 

+

165 for fileAttribute in childNode.childNodes: 

+

166 if fileAttribute.nodeType == Node.ELEMENT_NODE and fileAttribute.tagName == "Attr": 

+

167 if fileAttribute.getAttribute("Name") == "Library": 

+

168 libraryName = fileAttribute.getAttribute("Val") 

+

169 vhdlFile.VHDLLibrary = fileset.GetOrCreateVHDLLibrary(libraryName) 

+

170 elif fileAttribute.getAttribute("Val") == "UsedIn": 170 ↛ 171line 170 didn't jump to line 171 because the condition on line 170 was never true

+

171 usedInAttr.append(fileAttribute.getAttribute("Val")) 

+

172 

+

173 def _ParseDefaultFile(self, _, path, fileset) -> None: 

+

174 File(path, fileSet=fileset) 

+

175 

+

176 def _ParseXDCFile(self, _, path, fileset) -> None: 

+

177 XDCConstraintFile(path, fileSet=fileset) 

+

178 

+

179 def _ParseVerilogFile(self, _, path, fileset) -> None: 

+

180 VerilogSourceFile(path, fileSet=fileset) 

+

181 

+

182 def _ParseXCIFile(self, _, path, fileset) -> None: 

+

183 IPCoreInstantiationFile(path, fileSet=fileset) 

+

184 

+

185 def _ParseFileSetConfig(self, fileNode, fileset) -> None: 

+

186 for option in fileNode.childNodes: 

+

187 if option.nodeType == Node.ELEMENT_NODE and option.tagName == "Option": 

+

188 if option.getAttribute("Name") == "TopModule": 

+

189 fileset.TopLevel = option.getAttribute("Val") 

+

190 

+

191 

+

192@export 

+

193class XDCConstraintFile(ConstraintFile, SDCContent): 

+

194 """A Vivado constraint file (Xilinx Design Constraints; ``*.xdc``).""" 

+

195 

+

196 

+

197@export 

+

198class IPCoreDescriptionFile(XMLFile): 

+

199 pass 

+

200 

+

201 

+

202@export 

+

203class IPCoreInstantiationFile(XMLFile): 

+

204 """A Vivado IP core instantiation file (Xilinx IPCore Instance; ``*.xci``).""" 

+
+ + + diff --git a/genindex.html b/genindex.html new file mode 100644 index 00000000..5dbdb0d3 --- /dev/null +++ b/genindex.html @@ -0,0 +1,2486 @@ + + + + + + + Index — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ + +

Index

+ +
+ _ + | A + | B + | C + | D + | E + | F + | G + | H + | I + | J + | K + | L + | M + | N + | O + | P + | Q + | R + | S + | T + | U + | V + | W + | X + | Y + +
+

_

+ + + +
+ +

A

+ + + +
+ +

B

+ + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + +
+ +

F

+ + + +
+ +

G

+ + +
+ +

H

+ + + +
+ +

I

+ + + +
+ +

J

+ + +
+ +

K

+ + +
+ +

L

+ + + +
+ +

M

+ + + +
+ +

N

+ + + +
+ +

O

+ + +
+ +

P

+ + + +
+ +

Q

+ + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

U

+ + + +
+ +

V

+ + + +
+ +

W

+ + + +
+ +

X

+ + + +
+ +

Y

+ + +
+ + + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..2df7c31e --- /dev/null +++ b/index.html @@ -0,0 +1,208 @@ + + + + + + + + The pyEDAA.ProjectModel Documentation — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ + _images/logo_on_light.svg + +
+
Sourcecode on GitHub Code license Documentation - Read Now! Documentation License Documentation License
+
PyPI - Tag PyPI - Status PyPI - Python Version
+
GitHub Workflow - Build and Test Status Libraries.io status for latest release Codacy - Quality Codacy - Line Coverage Codecov - Branch Coverage
+
+
+
+

The pyEDAA.ProjectModel Documentation

+

An abstract model of HDL design projects and EDA tooling.

+
+

Main Goals

+

This package provides a unified abstract project model for HDL designs and EDA tools. +Third-party frameworks can derive own classes and implement additional logic to create a concrete project model for +their tools.

+

Frameworks consuming this model can build higher level features and services on top of such a model, while supporting +multiple input sources.

+
+
+

Use Cases

+ +
+
+

News

+
+

Oct. 2021 - Reading *.xpr and *.pro Files

+
+
    +
  • Xilinx Vivado’s *.xpr and OSVVM’s *.pro files can now be read.

  • +
  • Filesets can be nested.

  • +
  • The dataset can be validated.

  • +
+
+

Sep. 2021 - Extracted ProjectModel from pyIPCMI

+
+
    +
  • The project model has been extracted from pyIPCMI.

  • +
  • ProjectModel became first citizen of EDA² and got integrated into the pyEDAA namespace at PyPI.

  • +
+
+
+

Contributors

+ +
+
+

License

+

This Python package (source code) is licensed under Apache License 2.0. |br| +The accompanying documentation is licensed under Creative Commons - Attribution 4.0 (CC-BY 4.0).

+
+

This document was generated on 08.Nov 2024 - 22:19.

+
+
+
+
+
+
+
+
+
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..b82c798b70ee8001fe43db793323221062758b1c GIT binary patch literal 5799 zcmV;Y7Fg*cAX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGk#c|}A) zK`u~oZ)#;@bWLw$Wo!x~AXa5^b7^mGIv_AEH3}mjRA^-&a%F8{X>Md?av*PJAarPH zb0B7EY-J#6b0A}HZE$jBb8}^6Aa!$TZf78RY-wUH3V7PholSS!#ubM5{1rT>U8D=i zNl#bZsgz@@m28Ew)pX?pQ6mWrNbq1lC+x59;ER|qN+9OGcd$sJkia}I0dk&;0S4Ia z-(Ox_oZlAtf5oc2$sa{F-|qju&L4M~nE$B$cHV#IdF}kATxWl3);jz1{A}i1<{~Ra zk&J4-S@i_U`7gVqD0ec1);2MM+Wog(|i}EFZj27kFH?>?^iuJc|lSuO{$_b@OH)%PMD4EzyB#E5VE|O)zpXBax zvB)WrD+xR3*4MVigH)l4v!8KT4bu!Oap!f}R|)3IsPw-1@-H6RSLMlSHfz zd|{#$2fi?IY6D-AD5Zffh@8^?VJZv`!W~fo3~PDhV8~(hVFMxk;{OtR)dTHB&_}cJ zW4M7ovVjQ}cloYZiLq7O(6&P=w84y^>T571tg<=@6Hqk`<^*VeI3uXq8H^#QWCpW> zs+7T$&V*G#Nnb)_Hap(brZro5;_`uLi0d} z(2eDu0)qO3awPT?6s~(E97jEcg!cyBDCj95uro-c^XGDZakDJwp-+Y zlioVc69xsS34?>Qgad*}!XUxAQj-EygaLvZ!k_^KVQ{d1uuw=nSSXksEDlNz7Dn=I zIglFqj+E31O|$AhPsuJTfxT!4N(=Q;UhIL4_ERkK-KNB2Bp4x4-=*_U$yxxz1I^MB z&`N1BU-Ip>_}*MZ4?~nm#`L|#sj&q>op@jXWq4qqEO-Eb^mk}qGHfJ}@ZMiu{rpLk zSt>EZW>)*K;~|@aJ0h}4K%4tesG}mAh3f4c4$faT3N135hf{z}g1W$k0j1!=P??c`# zt9H*X9v{1I9}>I+w4VXZkZ=f)fE8IyKn@~ykm|p%p%@*49P+U^63qa9tx%(tUHi95 zA+S3ETx3)Tjyj{_+}+=cLZ&(NXO0|q?HTRBEBq(OGQ``#?mu2$U#Aa6g6$(K48s=z zTiDhFQKVV^%y*{}cHW8nSz+CCTw4 z=~zNyLG@?(IWI0As>_qr`!z=*k!f}NgHrrM8Lf79b)*Re{$3>8PvZCHqg_39AC(b# zmu{XjQ8vc~Am+Nr>0AGx4$ns2AEH`u(48Ub1*?DkJNYi2@?t&q*`7NlHN@4YD_GO2 z*>O*WsMj2HaM&z)xG{6uoWCCl)SDSeCwhXzu{=RRLi~>j6jUl;B862IxJ&^B2qsj3 z)IouQ${I{2f(i%|ET~w*L<+5|P^rR7FjT65Y7G@>d|`)5BqzD+#+Qo(iAbItfyfcL zIw5|N1SC=P+JyYc5|B)BWlQ~}2}q=A)Fs4Eo`58pKvhEjBnnWdxHSpwlPN%f3!wp`|usGa&K zlPQ_BNYkm5v``Z&kgQZwsf)B&Q*pT-X*yMqmTGFnj}~n@HIEi*Ql*ZOYeE%{k!vc2 zjS*@h^^B28PIL#xtzLfF30WpYC*=-}jX5jVuS|bh&I%Tqh_I-lPDWWckx)-z3W>+{rsc!s+=Rb^;F(aJpp_>LeZ_-$ctP;E6m;#Oak)pp$u+ zcyjuCcrqmx=_x(BFcT`MK&SNxV@;}jf}PqU3^pChqfYM;=9*q<1Ukh>7;9pM5biV| zX|m~*J(yE{q^aa&cO!Rgqdl{keEPQjJZRJuZk>Uf#;sF;Q@L#nYC5;hLCu3U7`SQO zItD$pTW8^>cbiX92Tt)eLBMI=CI~gv+oXV|ds~mV=h|kVY2Tmk?(c6#UD;8uIp{Ku zX36^BfoCE#=4r4H`HY7K*=RgAOiy9l0AGy<2lVy<&>*9Y=MpGxJUqyG)&5Vb7}(>cI}GaC>|Oily8Xb(^YSt+)So%# z!Py-McW}@Vpa%v$1b9%;Lr@0TtPMv=ph@0m61zB8p)->wB({tZgNSIbrXUtwS+#Y zb;DYoM&_l+A=x| z=NO#=HH--Y`o#pH>|#l|ak1au6Da?vrKjIdGRhI*eR4|!4l z36_*aV(^qrVXL5+9 zr!lEU2eQaU2jX?3)8N9NK89(-^NyW4S1e z>xwk4%h6b_MdP>-jq55jmP^p~Ql-aUqwHbe`hO1#C;|@+X@nyN7hSeNQ!0cGLA z!L8w89$vc_g;WI|7Z<244-M-tFAym*FA!!lFAb$OFHCZ8OQ`JBFD=dT=YJ#;sXL1T z7M@K*E6?V^rRM`;wPzEtR&Z!&_1Qok`Po#ohHM^#h+HIGMJ^I6BbNu&k&Bc3Ta-gd zA4T#g3cQqh4v&^J9+Q|fBA1#hB#WFhCQHAq^OyvsAz2lraqsTo2WKvn$&4D2&y5C@ z%Z>(=#g7J&!;l70#@MbLmV}Q~IvgHLGLBffL@rCRj$FD-7IkorV7f?FOX?$;Y?fpk z#&n5%mgF7I^g&rH$v3R&1IifN6=caTi)+;FBvjKt?HaAaWNT7ziZwYvvAQ6XPE8WZ zEEWZ)P7{O{rb)vY%j7^kWut(0vQa1}*&L9GY>edFawzM3zQJin{DHaZy=xdJn+^c< zOou=!MrXk6(m`N7@BsjHO2>ffqyqs>(jl-C=_yEm^c0vndIZWEJwdW;Dv&GgKVDvs zdSqL*;-DwCRSRCH4@J^EB!yHOTHC;GU8hug1NMX*8zj*XVDGDAs=t9lQ926RKbjz5 z7ioe}y`)J2b(AJVa&0qUcL^MJF`I{#!WIVGbMlP5cu1(?*g~PIN*jaisu@RLESyyz zFwnp%Vi{VpKydAG4K6t>r2IIBmmE$Zwgn4FGVUdmZktmz;|@@ob%!0Jw9BgB>rO0Q zlFhTY+^x4`9dDpVFhj&2%nqssg6Ux;0tr5#ZV2WFI5(UfRAB_;3CfP(3_-pQriV(L zAV8Se2?7M@o`62S1|WdT*xP=*#7}|4W_fYV@8X-;#W<&nb2b;(JTAr=T-%1(s8Cm$bSbVdvIOkun&b;ECbHz8?iglh9{|qb6X-*zi^9pi6 zmUmJW^K>fCiBybJsF){DF;1JpPnhDHD#bZTigkJv@5Cs+DN(GGq4=jkan42Zu((vl zcGiz~&J*WsC&qbB%rl%A=QjO2`7WOFV!g;WPbucHwk`rDGY<-9GY<@?vm-Q=&pbF( zkMBd_jOL-CmF7X>oaTW+1>@xb4ddmZ6yt?~9OGq4<_!t9%wUzBIp|m1Ege+T5Tmv2!X(zUkMmYX0IEtypzPE!P<{2GeVl_j1X?>C2WOg&0F_G* z0s5qepcK**K-TC1l4Coe+>mDJ=8sX6q?%O+&5>#sy}ElJLQ<=rNUQ#7-x{kan|(4g z#9`s^Ai;&>!|X@H4^U%xfB@MLz=Nb3&L=Q#c!(e!hvP$CO_3l>u{OP>+-qf>n33LuRj8>g53-2y%p14Fn;A z3kQM>aw0ndrTC}#C1iKAM7mPqbB9wvs2{b^zd>PV6}y7q^O>2H6cI70Vl ziDvj?aUv=ISezI&z_Bb5ih^TNB$nah;ZY?FC*McF$)PdP2^I-7bt2m;R_V6obaWIR#5oD$f@nC2t~zL zDITvj7YA>178Bu5LnA^*DPJg`qDB=WQn5n&^fjs&F}zFq)HbRVF$)p$r@c`o3AYBHxM#B_7F5qv_~ziY?lkO%vvbRdP|^ zq?#~Elsbd>=GKHkqLyE@H^rvRL2<)u!aVT`Ao3e+lSYYB29e&Nn>2=;&Yp=;iq!w1 zxg7%mJx(d&q=;0CI5}dKBHkcTN)abX6z94rB9$Uekf^1IlO|Fr;^c^@eovHG>i0y6 zqJB?~80z=Lkki>S5!CUVQQQolb)4E4K7VmQu|B98jqATibN zrir6|H%Bz}`=Ufrzb{G*_4{%}P`@vRoX(zMQU8A~Xzn+>sBevYoj<=zH;>|vxhx<5 z{+O@kXFtuYx9WBJ7iX8^DcNP^{7HRkwe{;YOHr(=RX=38lu5B~IMu6X?c!(M;%BOX ztxyebR(qY=zuEw+27xGttN3Dp?-DNwWzOSP*n5vrB7K_ ze*k?s{q<&9{groLw^ffXXV=S{As@oCsg2Eiu}xMlqI+%r*Yh7|ooolRZhVKe??6lP zyxmZnzs=PTd(gLX{j)u6Wp~AHmmXVJz2C2{{>N-V|HQr)+W%=Y*QJO|LXy>6Plq>K|ZUG|OkngUG5C`aG(; zT4;-@b-s%tc^2*mGT&)`^6hK$rP$_0IeRoap99b8eiXESMO*1ip>}K4`Sw4tSDLun zzEt=By)@SO;q$iXU;d)Et9~-SRWaXa(bK2TZ<|%!*3!-MTkYK*7CaJb_mHLXWk^f? zl0Pi2&hA8^HvBx_WP77Q)ybq`V-$!OxK zGm^i7gOl2Cox5^Zavfj4^HSSHWhSGQt!5^FE4rKdEn>Fv{pB&s(uY@CvE8IvGVHY7 zpQ)ytZ@>0(^BcHn?xoiJu6%{Ar->sAwSwEL`g}8A)RtO`CsC-bN6ZG+&~Jf`mEFFD zhceGEGUd!<47yqKXoB|r6N8-pvP+6`Cj$btExZ-1TW)y3ZrE{LxWn471UoD + + + + + + Python Module Index — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ + +

Python Module Index

+ +
+ p +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ p
+ pyEDAA +
    + pyEDAA.ProjectModel +
    + pyEDAA.ProjectModel.Altera +
    + pyEDAA.ProjectModel.Altera.Quartus +
    + pyEDAA.ProjectModel.Attributes +
    + pyEDAA.ProjectModel.GHDL +
    + pyEDAA.ProjectModel.Intel +
    + pyEDAA.ProjectModel.Intel.QuartusPrime +
    + pyEDAA.ProjectModel.MentorGraphics +
    + pyEDAA.ProjectModel.MentorGraphics.ModelSim +
    + pyEDAA.ProjectModel.MentorGraphics.QuestaSim +
    + pyEDAA.ProjectModel.OSVVM +
    + pyEDAA.ProjectModel.Verilog +
    + pyEDAA.ProjectModel.VHDL +
    + pyEDAA.ProjectModel.Xilinx +
    + pyEDAA.ProjectModel.Xilinx.ISE +
    + pyEDAA.ProjectModel.Xilinx.Vivado +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/pyEDAA.ProjectModel/index.html b/pyEDAA.ProjectModel/index.html new file mode 100644 index 00000000..dfe2a75b --- /dev/null +++ b/pyEDAA.ProjectModel/index.html @@ -0,0 +1,1258 @@ + + + + + + + + Python Class Reference — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Python Class Reference

+

Reference of all packages and modules:

+
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.Quartus.html b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.Quartus.html new file mode 100644 index 00000000..acaf85df --- /dev/null +++ b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.Quartus.html @@ -0,0 +1,581 @@ + + + + + + + + pyEDAA.ProjectModel.Altera.Quartus — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

pyEDAA.ProjectModel.Altera.Quartus

+

Classes

+ +
+
+class pyEDAA.ProjectModel.Altera.Quartus.QuartusProjectFile(path, project=None, design=None, fileSet=None)[source]
+

A Quartus project file (*.qpf).

+

Inheritance

+
+

Inheritance diagram of QuartusProjectFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of QuartusProjectFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.Altera.Quartus.SDCConstraintFile(path, project=None, design=None, fileSet=None)[source]
+

A Quartus constraint file (Synopsys Design Constraints; *.sdc).

+

Inheritance

+
+

Inheritance diagram of SDCConstraintFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of SDCConstraintFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.html b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.html new file mode 100644 index 00000000..7d18f4f3 --- /dev/null +++ b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.html @@ -0,0 +1,246 @@ + + + + + + + + pyEDAA.ProjectModel.Altera — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + + + \ No newline at end of file diff --git a/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Attributes.html b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Attributes.html new file mode 100644 index 00000000..aef93bfd --- /dev/null +++ b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Attributes.html @@ -0,0 +1,232 @@ + + + + + + + + pyEDAA.ProjectModel.Attributes — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

pyEDAA.ProjectModel.Attributes

+

Classes

+ +
+
+class pyEDAA.ProjectModel.Attributes.KeyValueAttribute[source]
+

Inheritance

+
+

Inheritance diagram of KeyValueAttribute

+
+
+
+
+__init__()[source]
+
+
Return type:
+

None

+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/pyEDAA.ProjectModel/pyEDAA.ProjectModel.GHDL.html b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.GHDL.html new file mode 100644 index 00000000..cb2797b3 --- /dev/null +++ b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.GHDL.html @@ -0,0 +1,391 @@ + + + + + + + + pyEDAA.ProjectModel.GHDL — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

pyEDAA.ProjectModel.GHDL

+

Classes

+
    +
  • GHDLWaveformFile: +GHDL’s waveform file (*.ghw) supporting VHDL and Verilog simulation results.

  • +
+
+
+class pyEDAA.ProjectModel.GHDL.GHDLWaveformFile(path, project=None, design=None, fileSet=None)[source]
+

GHDL’s waveform file (*.ghw) supporting VHDL and Verilog simulation results.

+

Inheritance

+
+

Inheritance diagram of GHDLWaveformFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of GHDLWaveformFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.QuartusPrime.html b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.QuartusPrime.html new file mode 100644 index 00000000..aa643915 --- /dev/null +++ b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.QuartusPrime.html @@ -0,0 +1,581 @@ + + + + + + + + pyEDAA.ProjectModel.Intel.QuartusPrime — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

pyEDAA.ProjectModel.Intel.QuartusPrime

+

Classes

+ +
+
+class pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile(path, project=None, design=None, fileSet=None)[source]
+

A Quartus project file (*.qpf).

+

Inheritance

+
+

Inheritance diagram of QuartusProjectFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of QuartusProjectFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile(path, project=None, design=None, fileSet=None)[source]
+

A Quartus constraint file (Synopsys Design Constraints; *.sdc).

+

Inheritance

+
+

Inheritance diagram of SDCConstraintFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of SDCConstraintFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.html b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.html new file mode 100644 index 00000000..fea24c24 --- /dev/null +++ b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.html @@ -0,0 +1,246 @@ + + + + + + + + pyEDAA.ProjectModel.Intel — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + + + \ No newline at end of file diff --git a/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.ModelSim.html b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.ModelSim.html new file mode 100644 index 00000000..01ba5cc0 --- /dev/null +++ b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.ModelSim.html @@ -0,0 +1,764 @@ + + + + + + + + pyEDAA.ProjectModel.MentorGraphics.ModelSim — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

pyEDAA.ProjectModel.MentorGraphics.ModelSim

+

Classes

+ +
+
+class pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimProjectFile(path, project=None, design=None, fileSet=None)[source]
+

Inheritance

+
+

Inheritance diagram of ModelSimProjectFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of ModelSimProjectFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimINIFile(path, project=None, design=None, fileSet=None)[source]
+

Inheritance

+
+

Inheritance diagram of ModelSimINIFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of ModelSimINIFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.MentorGraphics.ModelSim.WaveDoFile(path, project=None, design=None, fileSet=None)[source]
+

Inheritance

+
+

Inheritance diagram of WaveDoFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of WaveDoFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.QuestaSim.html b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.QuestaSim.html new file mode 100644 index 00000000..cbc136a8 --- /dev/null +++ b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.QuestaSim.html @@ -0,0 +1,764 @@ + + + + + + + + pyEDAA.ProjectModel.MentorGraphics.QuestaSim — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

pyEDAA.ProjectModel.MentorGraphics.QuestaSim

+

Classes

+ +
+
+class pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile(path, project=None, design=None, fileSet=None)[source]
+

Inheritance

+
+

Inheritance diagram of ModelSimProjectFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of ModelSimProjectFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile(path, project=None, design=None, fileSet=None)[source]
+

Inheritance

+
+

Inheritance diagram of ModelSimINIFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of ModelSimINIFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile(path, project=None, design=None, fileSet=None)[source]
+

Inheritance

+
+

Inheritance diagram of WaveDoFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of WaveDoFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.html b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.html new file mode 100644 index 00000000..178bd2c9 --- /dev/null +++ b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.html @@ -0,0 +1,318 @@ + + + + + + + + pyEDAA.ProjectModel.MentorGraphics — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

pyEDAA.ProjectModel.MentorGraphics

+

Submodules

+
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/pyEDAA.ProjectModel/pyEDAA.ProjectModel.OSVVM.html b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.OSVVM.html new file mode 100644 index 00000000..7c5c83ba --- /dev/null +++ b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.OSVVM.html @@ -0,0 +1,391 @@ + + + + + + + + pyEDAA.ProjectModel.OSVVM — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

pyEDAA.ProjectModel.OSVVM

+

Classes

+ +
+
+class pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile(path, project=None, design=None, fileSet=None)[source]
+

An OSVVM project file (*.pro).

+

Inheritance

+
+

Inheritance diagram of OSVVMProjectFile

+
+
Parameters:
+
+
+
+
+
+__init__(path, project=None, design=None, fileSet=None)[source]
+
+
Parameters:
+
+
+
+
+ +
+
+Any
+

alias of OSVVMProjectFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/pyEDAA.ProjectModel/pyEDAA.ProjectModel.VHDL.html b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.VHDL.html new file mode 100644 index 00000000..2b2ad3c3 --- /dev/null +++ b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.VHDL.html @@ -0,0 +1,201 @@ + + + + + + + + pyEDAA.ProjectModel.VHDL — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

pyEDAA.ProjectModel.VHDL

+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Verilog.html b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Verilog.html new file mode 100644 index 00000000..8736e993 --- /dev/null +++ b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Verilog.html @@ -0,0 +1,391 @@ + + + + + + + + pyEDAA.ProjectModel.Verilog — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

pyEDAA.ProjectModel.Verilog

+

Classes

+
    +
  • ValueChangeDumpFile: +Verilog’s waveform file (*.vcd) for exchanging value changes as defined by IEEE Std. 1364.

  • +
+
+
+class pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile(path, project=None, design=None, fileSet=None)[source]
+

Verilog’s waveform file (*.vcd) for exchanging value changes as defined by IEEE Std. 1364.

+

Inheritance

+
+

Inheritance diagram of ValueChangeDumpFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of ValueChangeDumpFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.ISE.html b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.ISE.html new file mode 100644 index 00000000..f1fff95b --- /dev/null +++ b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.ISE.html @@ -0,0 +1,580 @@ + + + + + + + + pyEDAA.ProjectModel.Xilinx.ISE — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

pyEDAA.ProjectModel.Xilinx.ISE

+

Classes

+ +
+
+class pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile(path, project=None, design=None, fileSet=None)[source]
+

Inheritance

+
+

Inheritance diagram of ISEProjectFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of ISEProjectFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile(path, project=None, design=None, fileSet=None)[source]
+

Inheritance

+
+

Inheritance diagram of UCFConstraintFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of UCFConstraintFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.Vivado.html b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.Vivado.html new file mode 100644 index 00000000..83183f3b --- /dev/null +++ b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.Vivado.html @@ -0,0 +1,1740 @@ + + + + + + + + pyEDAA.ProjectModel.Xilinx.Vivado — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

pyEDAA.ProjectModel.Xilinx.Vivado

+

Classes

+ +
+
+class pyEDAA.ProjectModel.Xilinx.Vivado.UsedInAttribute[source]
+

Inheritance

+
+

Inheritance diagram of UsedInAttribute

+
+ +
+
+class pyEDAA.ProjectModel.Xilinx.Vivado.File(path, project=None, design=None, fileSet=None)[source]
+

Inheritance

+
+

Inheritance diagram of File

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of File

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()[source]
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)[source]
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)[source]
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)[source]
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()[source]
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)[source]
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()[source]
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile(path, project=None, design=None, fileSet=None)[source]
+

Inheritance

+
+

Inheritance diagram of ConstraintFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of ConstraintFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile(path, version=None, project=None, design=None, fileSet=None)[source]
+

Inheritance

+
+

Inheritance diagram of VerilogSourceFile

+
+
Parameters:
+
    +
  • path (Path)

  • +
  • version (SystemVerilogVersion | None)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • fileSet (FileSet | None)

  • +
+
+
+
+
+Any
+

alias of VerilogSourceFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+property VerilogVersion: SystemVerilogVersion
+

Property setting or returning the Verilog version this Verilog source file is used in.

+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, version=None, project=None, design=None, fileSet=None)
+
+
Parameters:
+
    +
  • path (Path)

  • +
  • version (SystemVerilogVersion | None)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • fileSet (FileSet | None)

  • +
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile(path, vhdlLibrary=None, vhdlVersion=None, project=None, design=None, fileSet=None)[source]
+

Inheritance

+
+

Inheritance diagram of VHDLSourceFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of VHDLSourceFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+property VHDLLibrary: VHDLLibrary
+

Property setting or returning the VHDL library this VHDL source file is used in.

+
+ +
+
+property VHDLVersion: VHDLVersion
+

Property setting or returning the VHDL version this VHDL source file is used in.

+
+ +
+
+Validate()[source]
+

Validate this VHDL source file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, vhdlLibrary=None, vhdlVersion=None, project=None, design=None, fileSet=None)[source]
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__repr__()[source]
+

Return repr(self).

+
+
Return type:
+

str

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile(path, project=None, design=None, fileSet=None)[source]
+

A Vivado project file (*.xpr).

+

Inheritance

+
+

Inheritance diagram of VivadoProjectFile

+
+
Parameters:
+
+
+
+
+
+__init__(path, project=None, design=None, fileSet=None)[source]
+
+
Parameters:
+
+
+
Return type:
+

None

+
+
+
+ +
+
+Any
+

alias of VivadoProjectFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile(path, project=None, design=None, fileSet=None)[source]
+

A Vivado constraint file (Xilinx Design Constraints; *.xdc).

+

Inheritance

+
+

Inheritance diagram of XDCConstraintFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of XDCConstraintFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile(path, project=None, design=None, fileSet=None)[source]
+

Inheritance

+
+

Inheritance diagram of IPCoreDescriptionFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of IPCoreDescriptionFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile(path, project=None, design=None, fileSet=None)[source]
+

A Vivado IP core instantiation file (Xilinx IPCore Instance; *.xci).

+

Inheritance

+
+

Inheritance diagram of IPCoreInstantiationFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of IPCoreInstantiationFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.html b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.html new file mode 100644 index 00000000..b5a1f383 --- /dev/null +++ b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.html @@ -0,0 +1,391 @@ + + + + + + + + pyEDAA.ProjectModel.Xilinx — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

pyEDAA.ProjectModel.Xilinx

+

Submodules

+
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/pyEDAA.ProjectModel/pyEDAA.ProjectModel.html b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.html new file mode 100644 index 00000000..139ca64a --- /dev/null +++ b/pyEDAA.ProjectModel/pyEDAA.ProjectModel.html @@ -0,0 +1,7964 @@ + + + + + + + + pyEDAA.ProjectModel — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

pyEDAA.ProjectModel

+

Submodules

+
+ +
+

Classes

+ +
+
+class pyEDAA.ProjectModel.Attribute[source]
+

Inheritance

+
+

Inheritance diagram of Attribute

+
+ +
+
+class pyEDAA.ProjectModel.FileType(name, bases, dictionary, **kwargs)[source]
+

A meta-class to construct FileType classes.

+

Modifications done by this meta-class: +* Register all classes of type FileType or derived variants in a class field FileType.FileTypes in this meta-class.

+

Inheritance

+
+

Inheritance diagram of FileType

+
+
Parameters:
+

classMembers (Dict)

+
+
+
+
+FileTypes: Dict[str, FileType] = {'CSourceFile': <class 'pyEDAA.ProjectModel.CSourceFile'>, 'CocotbPythonFile': <class 'pyEDAA.ProjectModel.CocotbPythonFile'>, 'ConstraintFile': <class 'pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile'>, 'CppSourceFile': <class 'pyEDAA.ProjectModel.CppSourceFile'>, 'EDIFNetlistFile': <class 'pyEDAA.ProjectModel.EDIFNetlistFile'>, 'File': <class 'pyEDAA.ProjectModel.Xilinx.Vivado.File'>, 'GHDLWaveformFile': <class 'pyEDAA.ProjectModel.GHDL.GHDLWaveformFile'>, 'HDLSourceFile': <class 'pyEDAA.ProjectModel.HDLSourceFile'>, 'IPCoreDescriptionFile': <class 'pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile'>, 'IPCoreInstantiationFile': <class 'pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile'>, 'ISEProjectFile': <class 'pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile'>, 'LogFile': <class 'pyEDAA.ProjectModel.LogFile'>, 'ModelSimINIFile': <class 'pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile'>, 'ModelSimProjectFile': <class 'pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile'>, 'NetlistFile': <class 'pyEDAA.ProjectModel.NetlistFile'>, 'OSVVMProjectFile': <class 'pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile'>, 'ProjectFile': <class 'pyEDAA.ProjectModel.ProjectFile'>, 'PythonSourceFile': <class 'pyEDAA.ProjectModel.PythonSourceFile'>, 'QuartusProjectFile': <class 'pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile'>, 'RDLSourceFile': <class 'pyEDAA.ProjectModel.RDLSourceFile'>, 'SDCConstraintFile': <class 'pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile'>, 'SettingFile': <class 'pyEDAA.ProjectModel.SettingFile'>, 'SimulationAnalysisFile': <class 'pyEDAA.ProjectModel.SimulationAnalysisFile'>, 'SimulationElaborationFile': <class 'pyEDAA.ProjectModel.SimulationElaborationFile'>, 'SimulationRunFile': <class 'pyEDAA.ProjectModel.SimulationRunFile'>, 'SimulationStartFile': <class 'pyEDAA.ProjectModel.SimulationStartFile'>, 'SourceFile': <class 'pyEDAA.ProjectModel.SourceFile'>, 'SystemRDLSourceFile': <class 'pyEDAA.ProjectModel.SystemRDLSourceFile'>, 'SystemVerilogBaseFile': <class 'pyEDAA.ProjectModel.SystemVerilogBaseFile'>, 'SystemVerilogHeaderFile': <class 'pyEDAA.ProjectModel.SystemVerilogHeaderFile'>, 'SystemVerilogSourceFile': <class 'pyEDAA.ProjectModel.SystemVerilogSourceFile'>, 'TCLSourceFile': <class 'pyEDAA.ProjectModel.TCLSourceFile'>, 'TextFile': <class 'pyEDAA.ProjectModel.TextFile'>, 'UCFConstraintFile': <class 'pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile'>, 'VHDLSourceFile': <class 'pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile'>, 'ValueChangeDumpFile': <class 'pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile'>, 'VerilogBaseFile': <class 'pyEDAA.ProjectModel.VerilogBaseFile'>, 'VerilogHeaderFile': <class 'pyEDAA.ProjectModel.VerilogHeaderFile'>, 'VerilogSourceFile': <class 'pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile'>, 'VivadoProjectFile': <class 'pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile'>, 'WaveDoFile': <class 'pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile'>, 'WaveformConfigFile': <class 'pyEDAA.ProjectModel.WaveformConfigFile'>, 'WaveformDatabaseFile': <class 'pyEDAA.ProjectModel.WaveformDatabaseFile'>, 'WaveformExchangeFile': <class 'pyEDAA.ProjectModel.WaveformExchangeFile'>, 'XDCConstraintFile': <class 'pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile'>, 'XMLFile': <class 'pyEDAA.ProjectModel.XMLFile'>}
+

Dictionary of all classes of type FileType or derived variants

+
+ +
+
+__init__(name, bases, dictionary, **kwargs)[source]
+
+
Parameters:
+
+
+
+
+ +
+
+static __new__(cls, className, baseClasses, classMembers, *args, **kwargs)[source]
+

Construct a new class using this meta-class.

+
+
Parameters:
+
    +
  • className – The name of the class to construct.

  • +
  • baseClasses – The tuple of base-classes the class is derived from.

  • +
  • members – The dictionary of members for the constructed class.

  • +
  • slots – If true, store object attributes in __slots__ instead of __dict__.

  • +
  • mixin – If true, make the class a Mixin-Class. +If false, create slots if slots is true. +If none, preserve behavior of primary base-class.

  • +
  • singleton – If true, make the class a Singleton.

  • +
  • classMembers (Dict)

  • +
+
+
Returns:
+

The new class.

+
+
Raises:
+
+
+
+
+ +
+
+property HasClassAttributes: bool
+

Read-only property to check if the class has Attributes (__pyattr__).

+
+
Returns:
+

True, if the class has Attributes.

+
+
+
+ +
+
+property HasMethodAttributes: bool
+

Read-only property to check if the class has methods with Attributes (__methodsWithAttributes__).

+
+
Returns:
+

True, if the class has any method with Attributes.

+
+
+
+ +
+
+__base__
+

alias of ExtendedType

+
+ +
+
+__call__(*args, **kwargs)
+

Call self as a function.

+
+ +
+
+__delattr__(name, /)
+

Implement delattr(self, name).

+
+ +
+
+__dir__()
+

Specialized __dir__ implementation for types.

+
+ +
+
+__getattribute__(name, /)
+

Return getattr(self, name).

+
+ +
+
+__instancecheck__(instance, /)
+

Check if an object is an instance.

+
+ +
+
+__or__(value, /)
+

Return self|value.

+
+ +
+
+__prepare__(bases, /, **kwds)
+

Create the namespace for the class statement

+
+ +
+
+__repr__()
+

Return repr(self).

+
+ +
+
+__ror__(value, /)
+

Return value|self.

+
+ +
+
+__setattr__(name, value, /)
+

Implement setattr(self, name, value).

+
+ +
+
+__sizeof__()
+

Return memory consumption of the type object.

+
+ +
+
+__subclasscheck__(subclass, /)
+

Check if a class is a subclass.

+
+ +
+
+__subclasses__()
+

Return a list of immediate subclasses.

+
+ +
+
+classmethod _checkForAbstractMethods(baseClasses, members)
+

Check if the current class contains abstract methods and return a tuple of them.

+

These abstract methods might be inherited from any base-class. If there are inherited abstract methods, check if +they are now implemented (overridden) by the current class that’s right now constructed.

+
+
Parameters:
+
    +
  • baseClasses (Tuple[type]) – The tuple of base-classes the class is derived from.

  • +
  • members (Dict[str, Any]) – The dictionary of members for the constructed class.

  • +
+
+
Return type:
+

Tuple[Dict[str, Callable], Dict[str, Any]]

+
+
Returns:
+

A tuple of abstract method’s names.

+
+
+
+ +
+
+classmethod _iterateBaseClassPaths(baseClasses)
+

Return a generator to iterate all possible inheritance paths for a given list of base-classes.

+

An inheritance path is expressed as a tuple of base-classes from current base-class (left-most item) to +object (right-most item).

+
+
Parameters:
+

baseClasses (Tuple[type]) – List (tuple) of base-classes.

+
+
Return type:
+

Generator[Tuple[type, ...], None, None]

+
+
Returns:
+

Generator to iterate all inheritance paths. An inheritance path is a tuple of types (base-classes).

+
+
+
+ +
+
+classmethod _wrapNewMethodIfAbstract(newClass)
+

If the class has abstract methods, replace the _new__ method, so it raises an exception.

+
+
Parameters:
+

newClass – The newly constructed class for further modifications.

+
+
Return type:
+

bool

+
+
Returns:
+

True, if the class is abstract.

+
+
Raises:
+

AbstractClassError – If the class is abstract and can’t be instantiated.

+
+
+
+ +
+
+classmethod _wrapNewMethodIfSingleton(newClass, singleton)
+

If a class is a singleton, wrap the _new__ method, so it returns a cached object, if a first object was created.

+

Only the first object creation initializes the object.

+

This implementation is threadsafe.

+
+
Parameters:
+
    +
  • newClass – The newly constructed class for further modifications.

  • +
  • singleton (bool) – If True, the class allows only a single instance to exist.

  • +
+
+
Return type:
+

bool

+
+
Returns:
+

True, if the class is a singleton.

+
+
+
+ +
+
+mro()
+

Return a type’s method resolution order.

+
+ +
+ +
+
+class pyEDAA.ProjectModel.File(path, project=None, design=None, fileSet=None)[source]
+

A File represents a file in a design. This base-class is used +for all derived file classes.

+

A file can be created standalone and later associated to a fileset, design and +project. Or a fileset, design and/or project can be associated immediately +while creating a file.

+
+
Parameters:
+
    +
  • path (Path) – Relative or absolute path to the file.

  • +
  • project (Optional[Project]) – Project the file is associated with.

  • +
  • design (Optional[Design]) – Design the file is associated with.

  • +
  • fileSet (Optional[FileSet]) – Fileset the file is associated with.

  • +
  • path

  • +
  • project

  • +
  • design

  • +
  • fileSet

  • +
+
+
+

Inheritance

+
+

Inheritance diagram of File

+
+
+__init__(path, project=None, design=None, fileSet=None)[source]
+
+
Parameters:
+
+
+
+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+Validate()[source]
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__len__()[source]
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__getitem__(key)[source]
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__setitem__(key, value)[source]
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)[source]
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()[source]
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+
+Any
+

alias of File

+
+ +
+ +
+
+class pyEDAA.ProjectModel.HumanReadableContent[source]
+

A file type representing human-readable contents.

+

Inheritance

+
+

Inheritance diagram of HumanReadableContent

+
+ +
+
+class pyEDAA.ProjectModel.XMLContent[source]
+

A file type representing XML contents.

+

Inheritance

+
+

Inheritance diagram of XMLContent

+
+ +
+
+class pyEDAA.ProjectModel.YAMLContent[source]
+

A file type representing YAML contents.

+

Inheritance

+
+

Inheritance diagram of YAMLContent

+
+ +
+
+class pyEDAA.ProjectModel.JSONContent[source]
+

A file type representing JSON contents.

+

Inheritance

+
+

Inheritance diagram of JSONContent

+
+ +
+
+class pyEDAA.ProjectModel.INIContent[source]
+

A file type representing INI contents.

+

Inheritance

+
+

Inheritance diagram of INIContent

+
+ +
+
+class pyEDAA.ProjectModel.TOMLContent[source]
+

A file type representing TOML contents.

+

Inheritance

+
+

Inheritance diagram of TOMLContent

+
+ +
+
+class pyEDAA.ProjectModel.TCLContent[source]
+

A file type representing content in TCL code.

+

Inheritance

+
+

Inheritance diagram of TCLContent

+
+ +
+
+class pyEDAA.ProjectModel.SDCContent[source]
+

A file type representing contents as Synopsys Design Constraints (SDC).

+

Inheritance

+
+

Inheritance diagram of SDCContent

+
+ +
+
+class pyEDAA.ProjectModel.PythonContent[source]
+

A file type representing contents as Python source code.

+

Inheritance

+
+

Inheritance diagram of PythonContent

+
+ +
+
+class pyEDAA.ProjectModel.TextFile(path, project=None, design=None, fileSet=None)[source]
+

A text file (*.txt).

+

Inheritance

+
+

Inheritance diagram of TextFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of TextFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.LogFile(path, project=None, design=None, fileSet=None)[source]
+

A log file (*.log).

+

Inheritance

+
+

Inheritance diagram of LogFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of LogFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.XMLFile(path, project=None, design=None, fileSet=None)[source]
+

An XML file (*.xml).

+

Inheritance

+
+

Inheritance diagram of XMLFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of XMLFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.SourceFile(path, project=None, design=None, fileSet=None)[source]
+

Base-class of all source files.

+

Inheritance

+
+

Inheritance diagram of SourceFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of SourceFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.HDLSourceFile(path, project=None, design=None, fileSet=None)[source]
+

Base-class of all HDL source files.

+

Inheritance

+
+

Inheritance diagram of HDLSourceFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of HDLSourceFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.RDLSourceFile(path, project=None, design=None, fileSet=None)[source]
+

Base-class of all RDL source files.

+

Inheritance

+
+

Inheritance diagram of RDLSourceFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of RDLSourceFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.NetlistFile(path, project=None, design=None, fileSet=None)[source]
+

Base-class of all netlist source files.

+

Inheritance

+
+

Inheritance diagram of NetlistFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of NetlistFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.EDIFNetlistFile(path, project=None, design=None, fileSet=None)[source]
+

Netlist file in EDIF (Electronic Design Interchange Format).

+

Inheritance

+
+

Inheritance diagram of EDIFNetlistFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of EDIFNetlistFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.TCLSourceFile(path, project=None, design=None, fileSet=None)[source]
+

A TCL source file.

+

Inheritance

+
+

Inheritance diagram of TCLSourceFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of TCLSourceFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.VHDLSourceFile(path, vhdlLibrary=None, vhdlVersion=None, project=None, design=None, fileSet=None)[source]
+

A VHDL source file (of any language version).

+
+
Parameters:
+
    +
  • path (Path) – Relative or absolute path to the file.

  • +
  • vhdlLibrary (Union[str, VHDLLibrary]) – VHDLLibrary this VHDL source file is associated wih.

  • +
  • vhdlVersion (Optional[VHDLVersion]) – VHDLVersion this VHDL source file is associated wih.

  • +
  • project (Optional[Project]) – Project the file is associated with.

  • +
  • design (Optional[Design]) – Design the file is associated with.

  • +
  • fileSet (Optional[FileSet]) – Fileset the file is associated with.

  • +
  • path

  • +
  • vhdlLibrary

  • +
  • vhdlVersion

  • +
  • project

  • +
  • design

  • +
  • fileSet

  • +
+
+
+

Inheritance

+
+

Inheritance diagram of VHDLSourceFile

+
+
+__init__(path, vhdlLibrary=None, vhdlVersion=None, project=None, design=None, fileSet=None)[source]
+
+
Parameters:
+
+
+
+
+ +
+
+Validate()[source]
+

Validate this VHDL source file.

+
+
Return type:
+

None

+
+
+
+ +
+
+property VHDLLibrary: VHDLLibrary
+

Property setting or returning the VHDL library this VHDL source file is used in.

+
+ +
+
+property VHDLVersion: VHDLVersion
+

Property setting or returning the VHDL version this VHDL source file is used in.

+
+ +
+
+__repr__()[source]
+

Return repr(self).

+
+
Return type:
+

str

+
+
+
+ +
+
+Any
+

alias of VHDLSourceFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.VerilogBaseFile(path, version=None, project=None, design=None, fileSet=None)[source]
+

Inheritance

+
+

Inheritance diagram of VerilogBaseFile

+
+
Parameters:
+
    +
  • path (Path)

  • +
  • version (SystemVerilogVersion | None)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • fileSet (FileSet | None)

  • +
+
+
+
+
+__init__(path, version=None, project=None, design=None, fileSet=None)[source]
+
+
Parameters:
+
    +
  • path (Path)

  • +
  • version (SystemVerilogVersion | None)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • fileSet (FileSet | None)

  • +
+
+
+
+ +
+
+Any
+

alias of VerilogBaseFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.VerilogSourceFile(path, version=None, project=None, design=None, fileSet=None)[source]
+

A Verilog source file (of any language version).

+

Inheritance

+
+

Inheritance diagram of VerilogSourceFile

+
+
Parameters:
+
    +
  • path (Path)

  • +
  • version (SystemVerilogVersion | None)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • fileSet (FileSet | None)

  • +
+
+
+
+
+Any
+

alias of VerilogSourceFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+property VerilogVersion: SystemVerilogVersion
+

Property setting or returning the Verilog version this Verilog source file is used in.

+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, version=None, project=None, design=None, fileSet=None)
+
+
Parameters:
+
    +
  • path (Path)

  • +
  • version (SystemVerilogVersion | None)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • fileSet (FileSet | None)

  • +
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.VerilogHeaderFile(path, version=None, project=None, design=None, fileSet=None)[source]
+

A Verilog header file (of any language version).

+

Inheritance

+
+

Inheritance diagram of VerilogHeaderFile

+
+
Parameters:
+
    +
  • path (Path)

  • +
  • version (SystemVerilogVersion | None)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • fileSet (FileSet | None)

  • +
+
+
+
+
+Any
+

alias of VerilogHeaderFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+property VerilogVersion: SystemVerilogVersion
+

Property setting or returning the Verilog version this Verilog source file is used in.

+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, version=None, project=None, design=None, fileSet=None)
+
+
Parameters:
+
    +
  • path (Path)

  • +
  • version (SystemVerilogVersion | None)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • fileSet (FileSet | None)

  • +
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.SystemVerilogBaseFile(path, version=None, project=None, design=None, fileSet=None)[source]
+

Inheritance

+
+

Inheritance diagram of SystemVerilogBaseFile

+
+
Parameters:
+
    +
  • path (Path)

  • +
  • version (SystemVerilogVersion | None)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • fileSet (FileSet | None)

  • +
+
+
+
+
+Any
+

alias of SystemVerilogBaseFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, version=None, project=None, design=None, fileSet=None)
+
+
Parameters:
+
    +
  • path (Path)

  • +
  • version (SystemVerilogVersion | None)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • fileSet (FileSet | None)

  • +
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.SystemVerilogSourceFile(path, version=None, project=None, design=None, fileSet=None)[source]
+

A SystemVerilog source file (of any language version).

+

Inheritance

+
+

Inheritance diagram of SystemVerilogSourceFile

+
+
Parameters:
+
    +
  • path (Path)

  • +
  • version (SystemVerilogVersion | None)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • fileSet (FileSet | None)

  • +
+
+
+
+
+Any
+

alias of SystemVerilogSourceFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+property SVVersion: SystemVerilogVersion
+

Property setting or returning the SystemVerilog version this SystemVerilog source file is used in.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, version=None, project=None, design=None, fileSet=None)
+
+
Parameters:
+
    +
  • path (Path)

  • +
  • version (SystemVerilogVersion | None)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • fileSet (FileSet | None)

  • +
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.SystemVerilogHeaderFile(path, version=None, project=None, design=None, fileSet=None)[source]
+

A SystemVerilog header file (of any language version).

+

Inheritance

+
+

Inheritance diagram of SystemVerilogHeaderFile

+
+
Parameters:
+
    +
  • path (Path)

  • +
  • version (SystemVerilogVersion | None)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • fileSet (FileSet | None)

  • +
+
+
+
+
+Any
+

alias of SystemVerilogHeaderFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+property SVVersion: SystemVerilogVersion
+

Property setting or returning the SystemVerilog version this SystemVerilog source file is used in.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, version=None, project=None, design=None, fileSet=None)
+
+
Parameters:
+
    +
  • path (Path)

  • +
  • version (SystemVerilogVersion | None)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • fileSet (FileSet | None)

  • +
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.SystemRDLSourceFile(path, srdlVersion=None, project=None, design=None, fileSet=None)[source]
+

A SystemRDL source file (of any language version).

+

Inheritance

+
+

Inheritance diagram of SystemRDLSourceFile

+
+
Parameters:
+
    +
  • path (Path)

  • +
  • srdlVersion (SystemRDLVersion | None)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • fileSet (FileSet | None)

  • +
+
+
+
+
+__init__(path, srdlVersion=None, project=None, design=None, fileSet=None)[source]
+
+
Parameters:
+
    +
  • path (Path)

  • +
  • srdlVersion (SystemRDLVersion | None)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • fileSet (FileSet | None)

  • +
+
+
+
+ +
+
+property SystemRDLVersion: SystemRDLVersion
+

Property setting or returning the SystemRDL version this SystemRDL source file is used in.

+
+ +
+
+Any
+

alias of SystemRDLSourceFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.PythonSourceFile(path, project=None, design=None, fileSet=None)[source]
+

A Python source file.

+

Inheritance

+
+

Inheritance diagram of PythonSourceFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of PythonSourceFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.CocotbPythonFile(path, project=None, design=None, fileSet=None)[source]
+

A Python source file used by Cocotb.

+

Inheritance

+
+

Inheritance diagram of CocotbPythonFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of CocotbPythonFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.ConstraintFile(path, project=None, design=None, fileSet=None)[source]
+

Base-class of all constraint files.

+

Inheritance

+
+

Inheritance diagram of ConstraintFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of ConstraintFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.ProjectFile(path, project=None, design=None, fileSet=None)[source]
+

Base-class of all tool-specific project files.

+

Inheritance

+
+

Inheritance diagram of ProjectFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of ProjectFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.CSourceFile(path, project=None, design=None, fileSet=None)[source]
+

Base-class of all ANSI-C source files.

+

Inheritance

+
+

Inheritance diagram of CSourceFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of CSourceFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.CppSourceFile(path, project=None, design=None, fileSet=None)[source]
+

Base-class of all ANSI-C++ source files.

+

Inheritance

+
+

Inheritance diagram of CppSourceFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of CppSourceFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.SettingFile(path, project=None, design=None, fileSet=None)[source]
+

Base-class of all tool-specific setting files.

+

Inheritance

+
+

Inheritance diagram of SettingFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of SettingFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.SimulationAnalysisFile(path, project=None, design=None, fileSet=None)[source]
+

Base-class of all tool-specific analysis files.

+

Inheritance

+
+

Inheritance diagram of SimulationAnalysisFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of SimulationAnalysisFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.SimulationElaborationFile(path, project=None, design=None, fileSet=None)[source]
+

Base-class of all tool-specific elaboration files.

+

Inheritance

+
+

Inheritance diagram of SimulationElaborationFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of SimulationElaborationFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.SimulationStartFile(path, project=None, design=None, fileSet=None)[source]
+

Base-class of all tool-specific simulation start-up files.

+

Inheritance

+
+

Inheritance diagram of SimulationStartFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of SimulationStartFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.SimulationRunFile(path, project=None, design=None, fileSet=None)[source]
+

Base-class of all tool-specific simulation run (execution) files.

+

Inheritance

+
+

Inheritance diagram of SimulationRunFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of SimulationRunFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.WaveformConfigFile(path, project=None, design=None, fileSet=None)[source]
+

Base-class of all tool-specific waveform configuration files.

+

Inheritance

+
+

Inheritance diagram of WaveformConfigFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of WaveformConfigFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.WaveformDatabaseFile(path, project=None, design=None, fileSet=None)[source]
+

Base-class of all tool-specific waveform database files.

+

Inheritance

+
+

Inheritance diagram of WaveformDatabaseFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of WaveformDatabaseFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.WaveformExchangeFile(path, project=None, design=None, fileSet=None)[source]
+

Base-class of all tool-independent waveform exchange files.

+

Inheritance

+
+

Inheritance diagram of WaveformExchangeFile

+
+
Parameters:
+
+
+
+
+
+Any
+

alias of WaveformExchangeFile

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this file is used in.

+
+ +
+
+property FileSet: FileSet | None
+

Property setting or returning the fileset this file is used in.

+
+ +
+
+property FileType: FileType
+

Read-only property to return the file type of this file.

+
+ +
+
+property Path: Path
+

Read-only property returning the path of this file.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this file is used in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this file.

+
+ +
+
+Validate()
+

Validate this file.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)
+

Index access for deleting attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__getitem__(key)
+

Index access for returning attributes on this file.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__init__(path, project=None, design=None, fileSet=None)
+
+
Parameters:
+
+
+
+
+ +
+
+__len__()
+

Returns number of attributes set on this file.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this file.

+
+
+
+ +
+
+__setitem__(key, value)
+

Index access for adding or setting attributes on this file.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.FileSet(name, topLevel=None, directory=PosixPath('.'), project=None, design=None, parent=None, vhdlLibrary=None, vhdlVersion=None, verilogVersion=None, svVersion=None, srdlVersion=None)[source]
+

A FileSet represents a group of files. Filesets can have sub-filesets.

+

The order of insertion is preserved. A fileset can be created standalone and +later associated to another fileset, design and/or project. Or a fileset, +design and/or project can be associated immediately while creating the +fileset.

+
+
Parameters:
+
    +
  • name (str) – Name of this fileset.

  • +
  • topLevel (Optional[str]) – Name of the fileset’s toplevel.

  • +
  • directory (Path) – Path of this fileset (absolute or relative to a parent fileset or design).

  • +
  • project (Optional[Project]) – Project the file is associated with.

  • +
  • design (Optional[Design]) – Design the file is associated with.

  • +
  • parent (Optional[FileSet]) – Parent fileset if this fileset is nested.

  • +
  • vhdlLibrary (Union[str, VHDLLibrary]) – Default VHDL library for files in this fileset, if not specified for the file itself.

  • +
  • vhdlVersion (Optional[VHDLVersion]) – Default VHDL version for files in this fileset, if not specified for the file itself.

  • +
  • verilogVersion (Optional[SystemVerilogVersion]) – Default Verilog version for files in this fileset, if not specified for the file itself.

  • +
  • svVersion (Optional[SystemVerilogVersion]) – Default SystemVerilog version for files in this fileset, if not specified for the file itself.

  • +
  • srdlVersion (Optional[SystemRDLVersion]) – Default SystemRDL version for files in this fileset, if not specified for the file itself.

  • +
  • name

  • +
  • topLevel

  • +
  • directory

  • +
  • project

  • +
  • design

  • +
  • parent

  • +
  • vhdlLibrary

  • +
  • vhdlVersion

  • +
  • verilogVersion

  • +
  • svVersion

  • +
  • srdlVersion

  • +
+
+
+

Inheritance

+
+

Inheritance diagram of FileSet

+
+
+__init__(name, topLevel=None, directory=PosixPath('.'), project=None, design=None, parent=None, vhdlLibrary=None, vhdlVersion=None, verilogVersion=None, svVersion=None, srdlVersion=None)[source]
+
+
Parameters:
+
    +
  • name (str)

  • +
  • topLevel (str | None)

  • +
  • directory (Path)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • parent (FileSet | None)

  • +
  • vhdlLibrary (str | VHDLLibrary)

  • +
  • vhdlVersion (VHDLVersion | None)

  • +
  • verilogVersion (SystemVerilogVersion | None)

  • +
  • svVersion (SystemVerilogVersion | None)

  • +
  • srdlVersion (SystemRDLVersion | None)

  • +
+
+
+
+ +
+
+property Name: str
+

Property setting or returning the fileset’s name.

+
+ +
+
+property TopLevel: str
+

Property setting or returning the fileset’s toplevel.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this fileset is used in.

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this fileset is used in.

+
+ +
+
+property Directory: Path
+

Property setting or returning the directory this fileset is located in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this fileset.

+
+ +
+
+property Parent: FileSet | None
+

Property setting or returning the parent fileset this fileset is used in.

+
+ +
+
+property FileSets: Dict[str, FileSet]
+

Read-only property returning the dictionary of sub-filesets.

+
+ +
+
+Files(fileType=<class 'pyEDAA.ProjectModel.File'>, fileSet=None)[source]
+

Method returning the files of this fileset.

+
+
Parameters:
+
    +
  • fileType (FileType) – A filter for file types. Default: Any.

  • +
  • fileSet (Union[bool, str, FileSet]) – Specifies how to handle sub-filesets.

  • +
  • fileType

  • +
  • fileSet

  • +
+
+
Return type:
+

Generator[File, None, None]

+
+
+
+ +
+
+AddFileSet(fileSet)[source]
+

Method to add a single sub-fileset to this fileset.

+
+
Parameters:
+
    +
  • fileSet (FileSet) – A fileset to add to this fileset as sub-fileset.

  • +
  • fileSet

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+AddFileSets(fileSets)[source]
+

Method to add a multiple sub-filesets to this fileset.

+
+
Parameters:
+
    +
  • fileSets (Iterable[FileSet]) – An iterable of filesets to add each to the fileset.

  • +
  • fileSets

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+property FileSetCount: int
+

Returns number of file sets excl. sub-filesets.

+
+ +
+
+property TotalFileSetCount: int
+

Returns number of file sets incl. sub-filesets.

+
+ +
+
+AddFile(file)[source]
+

Method to add a single file to this fileset.

+
+
Parameters:
+
    +
  • file (File) – A file to add to this fileset.

  • +
  • file

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+AddFiles(files)[source]
+

Method to add a multiple files to this fileset.

+
+
Parameters:
+
    +
  • files (Iterable[File]) – An iterable of files to add each to the fileset.

  • +
  • files

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+property FileCount: int
+

Returns number of files excl. sub-filesets.

+
+ +
+
+property TotalFileCount: int
+

Returns number of files incl. the files in sub-filesets.

+
+ +
+
+Validate()[source]
+

Validate this fileset.

+
+
Return type:
+

None

+
+
+
+ +
+
+property VHDLLibrary: VHDLLibrary
+

Property setting or returning the VHDL library of this fileset.

+
+ +
+
+property VHDLVersion: VHDLVersion
+

Property setting or returning the VHDL version of this fileset.

+
+ +
+
+property VerilogVersion: SystemVerilogVersion
+

Property setting or returning the Verilog version of this fileset.

+
+ +
+
+property SVVersion: SystemVerilogVersion
+

Property setting or returning the SystemVerilog version of this fileset.

+
+ +
+
+__len__()[source]
+

Returns number of attributes set on this fileset.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this fileset.

+
+
+
+ +
+
+__getitem__(key)[source]
+

Index access for returning attributes on this fileset.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__setitem__(key, value)[source]
+

Index access for adding or setting attributes on this fileset.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)[source]
+

Index access for deleting attributes on this fileset.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()[source]
+

Returns the fileset’s name.

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.VHDLLibrary(name, project=None, design=None, vhdlVersion=None)[source]
+

A VHDLLibrary represents a group of VHDL source files compiled into the same VHDL library.

+
+
Parameters:
+
    +
  • name (str) – The VHDL libraries’ name.

  • +
  • project (Optional[Project]) – Project the VHDL library is associated with.

  • +
  • design (Optional[Design]) – Design the VHDL library is associated with.

  • +
  • vhdlVersion (Optional[VHDLVersion]) – Default VHDL version for files in this VHDL library, if not specified for the file itself.

  • +
  • name

  • +
  • project

  • +
  • design

  • +
  • vhdlVersion

  • +
+
+
+

Inheritance

+
+

Inheritance diagram of VHDLLibrary

+
+
+__init__(name, project=None, design=None, vhdlVersion=None)[source]
+
+
Parameters:
+
    +
  • name (str)

  • +
  • project (Project | None)

  • +
  • design (Design | None)

  • +
  • vhdlVersion (VHDLVersion | None)

  • +
+
+
+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this VHDL library is used in.

+
+ +
+
+property Design: Design | None
+

Property setting or returning the design this VHDL library is used in.

+
+ +
+
+property Files: Generator[File, None, None]
+

Read-only property to return all files in this VHDL library.

+
+ +
+
+property VHDLVersion: VHDLVersion
+

Property setting or returning the VHDL version of this VHDL library.

+
+ +
+
+property FileCount: int
+

Returns number of files.

+
+ +
+
+__len__()[source]
+

Returns number of attributes set on this VHDL library.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this VHDL library.

+
+
+
+ +
+
+__getitem__(key)[source]
+

Index access for returning attributes on this VHDL library.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__setitem__(key, value)[source]
+

Index access for adding or setting attributes on this VHDL library.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)[source]
+

Index access for deleting attributes on this VHDL library.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()[source]
+

Returns the VHDL library’s name.

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.Design(name, topLevel=None, directory=PosixPath('.'), project=None, vhdlVersion=None, verilogVersion=None, svVersion=None, srdlVersion=None)[source]
+

A Design represents a group of filesets and the source files therein.

+

Each design contains at least one fileset - the default fileset. For +designs with VHDL source files, a independent VHDLLibraries overlay structure +exists.

+
+
Parameters:
+
    +
  • name (str) – The design’s name.

  • +
  • topLevel (Optional[str]) – Name of the design’s toplevel.

  • +
  • directory (Path) – Path of this design (absolute or relative to the project).

  • +
  • project (Optional[Project]) – Project the design is associated with.

  • +
  • vhdlVersion (Optional[VHDLVersion]) – Default VHDL version for files in this design, if not specified for the file itself.

  • +
  • verilogVersion (Optional[SystemVerilogVersion]) – Default Verilog version for files in this design, if not specified for the file itself.

  • +
  • svVersion (Optional[SystemVerilogVersion]) – Default SystemVerilog version for files in this design, if not specified for the file itself.

  • +
  • srdlVersion (Optional[SystemRDLVersion]) – Default SystemRDL version for files in this fileset, if not specified for the file itself.

  • +
  • name

  • +
  • topLevel

  • +
  • directory

  • +
  • project

  • +
  • vhdlVersion

  • +
  • verilogVersion

  • +
  • svVersion

  • +
  • srdlVersion

  • +
+
+
+

Inheritance

+
+

Inheritance diagram of Design

+
+
+__init__(name, topLevel=None, directory=PosixPath('.'), project=None, vhdlVersion=None, verilogVersion=None, svVersion=None, srdlVersion=None)[source]
+
+
Parameters:
+
    +
  • name (str)

  • +
  • topLevel (str | None)

  • +
  • directory (Path)

  • +
  • project (Project | None)

  • +
  • vhdlVersion (VHDLVersion | None)

  • +
  • verilogVersion (SystemVerilogVersion | None)

  • +
  • svVersion (SystemVerilogVersion | None)

  • +
  • srdlVersion (SystemRDLVersion | None)

  • +
+
+
+
+ +
+
+property Name: str
+

Property setting or returning the design’s name.

+
+ +
+
+property TopLevel: str
+

Property setting or returning the fileset’s toplevel.

+
+ +
+
+property Project: Project | None
+

Property setting or returning the project this design is used in.

+
+ +
+
+property Directory: Path
+

Property setting or returning the directory this design is located in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this fileset.

+
+ +
+
+property DefaultFileSet: FileSet
+

Property setting or returning the default fileset of this design.

+
+ +
+
+property FileSets: Dict[str, FileSet]
+

Read-only property returning the dictionary of filesets.

+
+ +
+
+Files(fileType=<class 'pyEDAA.ProjectModel.File'>, fileSet=None)[source]
+

Method returning the files of this design.

+
+
Parameters:
+
    +
  • fileType (FileType) – A filter for file types. Default: Any.

  • +
  • fileSet (Union[str, FileSet]) – Specifies if all files from all filesets (fileSet=None) are files from a single fileset are returned.

  • +
  • fileType

  • +
  • fileSet

  • +
+
+
Return type:
+

Generator[File, None, None]

+
+
+
+ +
+
+Validate()[source]
+

Validate this design.

+
+
Return type:
+

None

+
+
+
+ +
+
+property FileSetCount: int
+

Returns number of file sets excl. sub-filesets.

+
+ +
+
+property TotalFileSetCount: int
+

Returns number of file sets incl. sub-filesets.

+
+ +
+
+__len__()[source]
+

Returns number of attributes set on this design.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this design.

+
+
+
+ +
+
+__getitem__(key)[source]
+

Index access for returning attributes on this design.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__setitem__(key, value)[source]
+

Index access for adding or setting attributes on this design.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)[source]
+

Index access for deleting attributes on this design.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()[source]
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+
+class pyEDAA.ProjectModel.Project(name, rootDirectory=PosixPath('.'), vhdlVersion=None, verilogVersion=None, svVersion=None)[source]
+

A Project represents a group of designs and the source files therein.

+
+
Parameters:
+
    +
  • name (str) – The project’s name.

  • +
  • rootDirectory (Path) – Base-path to the project.

  • +
  • vhdlVersion (Optional[VHDLVersion]) – Default VHDL version for files in this project, if not specified for the file itself.

  • +
  • verilogVersion (Optional[SystemVerilogVersion]) – Default Verilog version for files in this project, if not specified for the file itself.

  • +
  • svVersion (Optional[SystemVerilogVersion]) – Default SystemVerilog version for files in this project, if not specified for the file itself.

  • +
  • name

  • +
  • rootDirectory

  • +
  • vhdlVersion

  • +
  • verilogVersion

  • +
  • svVersion

  • +
+
+
+

Inheritance

+
+

Inheritance diagram of Project

+
+
+__init__(name, rootDirectory=PosixPath('.'), vhdlVersion=None, verilogVersion=None, svVersion=None)[source]
+
+
Parameters:
+
    +
  • name (str)

  • +
  • rootDirectory (Path)

  • +
  • vhdlVersion (VHDLVersion | None)

  • +
  • verilogVersion (SystemVerilogVersion | None)

  • +
  • svVersion (SystemVerilogVersion | None)

  • +
+
+
+
+ +
+
+property Name: str
+

Property setting or returning the project’s name.

+
+ +
+
+property RootDirectory: Path
+

Property setting or returning the root directory this project is located in.

+
+ +
+
+property ResolvedPath: Path
+

Read-only property returning the resolved path of this fileset.

+
+ +
+
+Validate()[source]
+

Validate this project.

+
+
Return type:
+

None

+
+
+
+ +
+
+property DesignCount: int
+

Returns number of designs.

+
+ +
+
+__len__()[source]
+

Returns number of attributes set on this project.

+
+
Return type:
+

int

+
+
Returns:
+

The number if attributes set on this project.

+
+
+
+ +
+
+__getitem__(key)[source]
+

Index access for returning attributes on this project.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

Any

+
+
Returns:
+

The attribute’s value.

+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
+
+ +
+
+__setitem__(key, value)[source]
+

Index access for adding or setting attributes on this project.

+
+
Parameters:
+
    +
  • key (Type[Attribute]) – The attribute type.

  • +
  • value (Any) – The attributes value.

  • +
+
+
Raises:
+

TypeError – When parameter ‘key’ is not a subclass of Attribute.

+
+
Return type:
+

None

+
+
+
+ +
+
+__delitem__(key)[source]
+

Index access for deleting attributes on this project.

+
+
Parameters:
+

key (Type[Attribute]) – The attribute type.

+
+
Return type:
+

None

+
+
+
+ +
+
+__str__()[source]
+

Return str(self).

+
+
Return type:
+

str

+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/search.html b/search.html new file mode 100644 index 00000000..9c7b7c37 --- /dev/null +++ b/search.html @@ -0,0 +1,157 @@ + + + + + + + Search — pyEDAA.ProjectModel 0.5.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Search

+ + + + +

+ Searching for multiple words only shows matches that contain + all words. +

+ + +
+ + + +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 00000000..d57c7eb3 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"01.09.2021": [[0, "id1"]], "1. Definitions.": [[6, "definitions"]], "2. Grant of Copyright License.": [[6, "grant-of-copyright-license"]], "3. Grant of Patent License.": [[6, "grant-of-patent-license"]], "4. Redistribution.": [[6, "redistribution"]], "5. Submission of Contributions.": [[6, "submission-of-contributions"]], "6. Trademarks.": [[6, "trademarks"]], "7. Disclaimer of Warranty.": [[6, "disclaimer-of-warranty"]], "8. Limitation of Liability.": [[6, "limitation-of-liability"]], "9. Accepting Warranty or Additional Liability.": [[6, "accepting-warranty-or-additional-liability"]], "Apache License 2.0": [[6, null]], "ChangeLog": [[0, null]], "Condensed definition of class Design": [[7, "condensed-definition-of-class-design"]], "Condensed definition of class File": [[8, "condensed-definition-of-class-file"]], "Condensed definition of class FileSet": [[9, "condensed-definition-of-class-fileset"]], "Condensed definition of class Project": [[10, "condensed-definition-of-class-project"]], "Condensed definition of class VHDLLibrary": [[11, "condensed-definition-of-class-vhdllibrary"]], "Content Types": [[3, "content-types"]], "Contributors": [[15, "contributors"]], "Coverage Report": [[13, null]], "Creative Commons Attribution 4.0 International": [[2, null]], "Dependency": [[1, null]], "Design": [[7, null]], "File": [[8, null]], "File Types": [[3, null]], "FileSet": [[9, null]], "Glossary": [[4, null]], "Index": [[14, null]], "Installation from PyPI using PIP": [[5, "installation-from-pypi-using-pip"]], "Installation from local directory using PIP": [[5, "installation-from-local-directory-using-pip"]], "Installation using setup.py": [[5, "installation-using-setup-py"]], "Installation/Updates": [[5, null]], "License": [[15, "license"]], "Main Goals": [[15, "main-goals"]], "Module Index": [[16, null]], "News": [[15, "news"]], "Oct. 2021 - Reading *.xpr and *.pro Files": [[15, "oct-2021-reading-xpr-and-pro-files"]], "Overall Hierarchy": [[3, "overall-hierarchy"]], "Packaging (Optional)": [[1, "packaging-optional"]], "Project": [[10, null]], "Project Model": [[12, null]], "Publishing (CI-Server only)": [[1, "publishing-ci-server-only"]], "Python Class Reference": [[17, null]], "Section 1 \u2013 Definitions.": [[2, "section-1-definitions"]], "Section 2 \u2013 Scope.": [[2, "section-2-scope"]], "Section 3 \u2013 License Conditions.": [[2, "section-3-license-conditions"]], "Section 4 \u2013 Sui Generis Database Rights.": [[2, "section-4-sui-generis-database-rights"]], "Section 5 \u2013 Disclaimer of Warranties and Limitation of Liability.": [[2, "section-5-disclaimer-of-warranties-and-limitation-of-liability"]], "Section 6 \u2013 Term and Termination.": [[2, "section-6-term-and-termination"]], "Section 7 \u2013 Other Terms and Conditions.": [[2, "section-7-other-terms-and-conditions"]], "Section 8 \u2013 Interpretation.": [[2, "section-8-interpretation"]], "Sep. 2021 - Extracted ProjectModel from pyIPCMI": [[15, "sep-2021-extracted-projectmodel-from-pyipcmi"]], "Sphinx Documentation (Optional)": [[1, "sphinx-documentation-optional"]], "Static Type Checking Report": [[34, null]], "The pyEDAA.ProjectModel Documentation": [[15, null]], "Todo": [[7, "id1"], [8, "id1"], [9, "id1"], [10, "id1"], [11, "id1"]], "Uninstallation using PIP": [[5, "uninstallation-using-pip"]], "Unit Testing / Coverage / Type Checking (Optional)": [[1, "unit-testing-coverage-type-checking-optional"]], "Upcoming Release": [[0, "upcoming-release"]], "Updating from PyPI using PIP": [[5, "updating-from-pypi-using-pip"]], "Use Cases": [[15, "use-cases"]], "Using Creative Commons Public Licenses": [[2, null]], "Using PIP": [[5, "using-pip"]], "Using setup.py (legacy)": [[5, "using-setup-py-legacy"]], "VHDL Library": [[11, null]], "pyEDAA.ProjectModel": [[18, null]], "pyEDAA.ProjectModel Package": [[1, "pyedaa-projectmodel-package"]], "pyEDAA.ProjectModel.Altera": [[19, null]], "pyEDAA.ProjectModel.Altera.Quartus": [[20, null]], "pyEDAA.ProjectModel.Attributes": [[21, null]], "pyEDAA.ProjectModel.GHDL": [[22, null]], "pyEDAA.ProjectModel.Intel": [[23, null]], "pyEDAA.ProjectModel.Intel.QuartusPrime": [[24, null]], "pyEDAA.ProjectModel.MentorGraphics": [[25, null]], "pyEDAA.ProjectModel.MentorGraphics.ModelSim": [[26, null]], "pyEDAA.ProjectModel.MentorGraphics.QuestaSim": [[27, null]], "pyEDAA.ProjectModel.OSVVM": [[28, null]], "pyEDAA.ProjectModel.VHDL": [[29, null]], "pyEDAA.ProjectModel.Verilog": [[30, null]], "pyEDAA.ProjectModel.Xilinx": [[31, null]], "pyEDAA.ProjectModel.Xilinx.ISE": [[32, null]], "pyEDAA.ProjectModel.Xilinx.Vivado": [[33, null]]}, "docnames": ["ChangeLog/index", "Dependency", "Doc-License", "FileTypes/index", "Glossary", "Installation", "License", "ProjectModel/Design", "ProjectModel/File", "ProjectModel/FileSet", "ProjectModel/Project", "ProjectModel/VHDLLibrary", "ProjectModel/index", "coverage/index", "genindex", "index", "py-modindex", "pyEDAA.ProjectModel/index", "pyEDAA.ProjectModel/pyEDAA.ProjectModel", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.Quartus", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Attributes", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.GHDL", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.QuartusPrime", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.ModelSim", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.QuestaSim", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.OSVVM", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.VHDL", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Verilog", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.ISE", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.Vivado", "typing/index"], "envversion": {"sphinx": 64, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1}, "filenames": ["ChangeLog/index.rst", "Dependency.rst", "Doc-License.rst", "FileTypes/index.rst", "Glossary.rst", "Installation.rst", "License.rst", "ProjectModel/Design.rst", "ProjectModel/File.rst", "ProjectModel/FileSet.rst", "ProjectModel/Project.rst", "ProjectModel/VHDLLibrary.rst", "ProjectModel/index.rst", "coverage/index.rst", "genindex.rst", "index.rst", "py-modindex.rst", "pyEDAA.ProjectModel/index.rst", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.rst", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.rst", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Altera.Quartus.rst", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Attributes.rst", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.GHDL.rst", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.rst", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Intel.QuartusPrime.rst", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.rst", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.ModelSim.rst", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.MentorGraphics.QuestaSim.rst", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.OSVVM.rst", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.VHDL.rst", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Verilog.rst", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.rst", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.ISE.rst", "pyEDAA.ProjectModel/pyEDAA.ProjectModel.Xilinx.Vivado.rst", "typing/index.rst"], "indexentries": {"__base__ (pyedaa.projectmodel.filetype attribute)": [[18, "pyEDAA.ProjectModel.FileType.__base__", false]], "__call__() (pyedaa.projectmodel.filetype method)": [[18, "pyEDAA.ProjectModel.FileType.__call__", false]], "__delattr__() (pyedaa.projectmodel.filetype method)": [[18, "pyEDAA.ProjectModel.FileType.__delattr__", false]], "__delitem__() (pyedaa.projectmodel.altera.quartus.quartusprojectfile method)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.QuartusProjectFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.altera.quartus.sdcconstraintfile method)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.SDCConstraintFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.cocotbpythonfile method)": [[18, "pyEDAA.ProjectModel.CocotbPythonFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.constraintfile method)": [[18, "pyEDAA.ProjectModel.ConstraintFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.cppsourcefile method)": [[18, "pyEDAA.ProjectModel.CppSourceFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.csourcefile method)": [[18, "pyEDAA.ProjectModel.CSourceFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.design method)": [[18, "pyEDAA.ProjectModel.Design.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.edifnetlistfile method)": [[18, "pyEDAA.ProjectModel.EDIFNetlistFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.file method)": [[18, "pyEDAA.ProjectModel.File.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.fileset method)": [[18, "pyEDAA.ProjectModel.FileSet.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.ghdl.ghdlwaveformfile method)": [[22, "pyEDAA.ProjectModel.GHDL.GHDLWaveformFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.hdlsourcefile method)": [[18, "pyEDAA.ProjectModel.HDLSourceFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.intel.quartusprime.quartusprojectfile method)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.intel.quartusprime.sdcconstraintfile method)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.logfile method)": [[18, "pyEDAA.ProjectModel.LogFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.mentorgraphics.modelsim.modelsiminifile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimINIFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.mentorgraphics.modelsim.modelsimprojectfile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimProjectFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.mentorgraphics.modelsim.wavedofile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.WaveDoFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.mentorgraphics.questasim.modelsiminifile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.mentorgraphics.questasim.modelsimprojectfile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.mentorgraphics.questasim.wavedofile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.netlistfile method)": [[18, "pyEDAA.ProjectModel.NetlistFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.osvvm.osvvmprojectfile method)": [[28, "pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.project method)": [[18, "pyEDAA.ProjectModel.Project.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.projectfile method)": [[18, "pyEDAA.ProjectModel.ProjectFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.pythonsourcefile method)": [[18, "pyEDAA.ProjectModel.PythonSourceFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.rdlsourcefile method)": [[18, "pyEDAA.ProjectModel.RDLSourceFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.settingfile method)": [[18, "pyEDAA.ProjectModel.SettingFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.simulationanalysisfile method)": [[18, "pyEDAA.ProjectModel.SimulationAnalysisFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.simulationelaborationfile method)": [[18, "pyEDAA.ProjectModel.SimulationElaborationFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.simulationrunfile method)": [[18, "pyEDAA.ProjectModel.SimulationRunFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.simulationstartfile method)": [[18, "pyEDAA.ProjectModel.SimulationStartFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.sourcefile method)": [[18, "pyEDAA.ProjectModel.SourceFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.systemrdlsourcefile method)": [[18, "pyEDAA.ProjectModel.SystemRDLSourceFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.systemverilogbasefile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogBaseFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.systemverilogheaderfile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogHeaderFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.systemverilogsourcefile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogSourceFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.tclsourcefile method)": [[18, "pyEDAA.ProjectModel.TCLSourceFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.textfile method)": [[18, "pyEDAA.ProjectModel.TextFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.verilog.valuechangedumpfile method)": [[30, "pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.verilogbasefile method)": [[18, "pyEDAA.ProjectModel.VerilogBaseFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.verilogheaderfile method)": [[18, "pyEDAA.ProjectModel.VerilogHeaderFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.verilogsourcefile method)": [[18, "pyEDAA.ProjectModel.VerilogSourceFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.vhdllibrary method)": [[18, "pyEDAA.ProjectModel.VHDLLibrary.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.vhdlsourcefile method)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.waveformconfigfile method)": [[18, "pyEDAA.ProjectModel.WaveformConfigFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.waveformdatabasefile method)": [[18, "pyEDAA.ProjectModel.WaveformDatabaseFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.waveformexchangefile method)": [[18, "pyEDAA.ProjectModel.WaveformExchangeFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.xilinx.ise.iseprojectfile method)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.xilinx.ise.ucfconstraintfile method)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.xilinx.vivado.constraintfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.xilinx.vivado.file method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.File.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.xilinx.vivado.ipcoredescriptionfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.xilinx.vivado.ipcoreinstantiationfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.xilinx.vivado.verilogsourcefile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.xilinx.vivado.vhdlsourcefile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.xilinx.vivado.vivadoprojectfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.xilinx.vivado.xdcconstraintfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile.__delitem__", false]], "__delitem__() (pyedaa.projectmodel.xmlfile method)": [[18, "pyEDAA.ProjectModel.XMLFile.__delitem__", false]], "__dir__() (pyedaa.projectmodel.filetype method)": [[18, "pyEDAA.ProjectModel.FileType.__dir__", false]], "__getattribute__() (pyedaa.projectmodel.filetype method)": [[18, "pyEDAA.ProjectModel.FileType.__getattribute__", false]], "__getitem__() (pyedaa.projectmodel.altera.quartus.quartusprojectfile method)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.QuartusProjectFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.altera.quartus.sdcconstraintfile method)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.SDCConstraintFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.cocotbpythonfile method)": [[18, "pyEDAA.ProjectModel.CocotbPythonFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.constraintfile method)": [[18, "pyEDAA.ProjectModel.ConstraintFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.cppsourcefile method)": [[18, "pyEDAA.ProjectModel.CppSourceFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.csourcefile method)": [[18, "pyEDAA.ProjectModel.CSourceFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.design method)": [[18, "pyEDAA.ProjectModel.Design.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.edifnetlistfile method)": [[18, "pyEDAA.ProjectModel.EDIFNetlistFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.file method)": [[18, "pyEDAA.ProjectModel.File.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.fileset method)": [[18, "pyEDAA.ProjectModel.FileSet.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.ghdl.ghdlwaveformfile method)": [[22, "pyEDAA.ProjectModel.GHDL.GHDLWaveformFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.hdlsourcefile method)": [[18, "pyEDAA.ProjectModel.HDLSourceFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.intel.quartusprime.quartusprojectfile method)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.intel.quartusprime.sdcconstraintfile method)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.logfile method)": [[18, "pyEDAA.ProjectModel.LogFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.mentorgraphics.modelsim.modelsiminifile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimINIFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.mentorgraphics.modelsim.modelsimprojectfile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimProjectFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.mentorgraphics.modelsim.wavedofile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.WaveDoFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.mentorgraphics.questasim.modelsiminifile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.mentorgraphics.questasim.modelsimprojectfile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.mentorgraphics.questasim.wavedofile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.netlistfile method)": [[18, "pyEDAA.ProjectModel.NetlistFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.osvvm.osvvmprojectfile method)": [[28, "pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.project method)": [[18, "pyEDAA.ProjectModel.Project.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.projectfile method)": [[18, "pyEDAA.ProjectModel.ProjectFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.pythonsourcefile method)": [[18, "pyEDAA.ProjectModel.PythonSourceFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.rdlsourcefile method)": [[18, "pyEDAA.ProjectModel.RDLSourceFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.settingfile method)": [[18, "pyEDAA.ProjectModel.SettingFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.simulationanalysisfile method)": [[18, "pyEDAA.ProjectModel.SimulationAnalysisFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.simulationelaborationfile method)": [[18, "pyEDAA.ProjectModel.SimulationElaborationFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.simulationrunfile method)": [[18, "pyEDAA.ProjectModel.SimulationRunFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.simulationstartfile method)": [[18, "pyEDAA.ProjectModel.SimulationStartFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.sourcefile method)": [[18, "pyEDAA.ProjectModel.SourceFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.systemrdlsourcefile method)": [[18, "pyEDAA.ProjectModel.SystemRDLSourceFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.systemverilogbasefile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogBaseFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.systemverilogheaderfile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogHeaderFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.systemverilogsourcefile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogSourceFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.tclsourcefile method)": [[18, "pyEDAA.ProjectModel.TCLSourceFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.textfile method)": [[18, "pyEDAA.ProjectModel.TextFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.verilog.valuechangedumpfile method)": [[30, "pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.verilogbasefile method)": [[18, "pyEDAA.ProjectModel.VerilogBaseFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.verilogheaderfile method)": [[18, "pyEDAA.ProjectModel.VerilogHeaderFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.verilogsourcefile method)": [[18, "pyEDAA.ProjectModel.VerilogSourceFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.vhdllibrary method)": [[18, "pyEDAA.ProjectModel.VHDLLibrary.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.vhdlsourcefile method)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.waveformconfigfile method)": [[18, "pyEDAA.ProjectModel.WaveformConfigFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.waveformdatabasefile method)": [[18, "pyEDAA.ProjectModel.WaveformDatabaseFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.waveformexchangefile method)": [[18, "pyEDAA.ProjectModel.WaveformExchangeFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.xilinx.ise.iseprojectfile method)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.xilinx.ise.ucfconstraintfile method)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.xilinx.vivado.constraintfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.xilinx.vivado.file method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.File.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.xilinx.vivado.ipcoredescriptionfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.xilinx.vivado.ipcoreinstantiationfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.xilinx.vivado.verilogsourcefile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.xilinx.vivado.vhdlsourcefile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.xilinx.vivado.vivadoprojectfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.xilinx.vivado.xdcconstraintfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile.__getitem__", false]], "__getitem__() (pyedaa.projectmodel.xmlfile method)": [[18, "pyEDAA.ProjectModel.XMLFile.__getitem__", false]], "__init__() (pyedaa.projectmodel.altera.quartus.quartusprojectfile method)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.QuartusProjectFile.__init__", false]], "__init__() (pyedaa.projectmodel.altera.quartus.sdcconstraintfile method)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.SDCConstraintFile.__init__", false]], "__init__() (pyedaa.projectmodel.attributes.keyvalueattribute method)": [[21, "pyEDAA.ProjectModel.Attributes.KeyValueAttribute.__init__", false]], "__init__() (pyedaa.projectmodel.cocotbpythonfile method)": [[18, "pyEDAA.ProjectModel.CocotbPythonFile.__init__", false]], "__init__() (pyedaa.projectmodel.constraintfile method)": [[18, "pyEDAA.ProjectModel.ConstraintFile.__init__", false]], "__init__() (pyedaa.projectmodel.cppsourcefile method)": [[18, "pyEDAA.ProjectModel.CppSourceFile.__init__", false]], "__init__() (pyedaa.projectmodel.csourcefile method)": [[18, "pyEDAA.ProjectModel.CSourceFile.__init__", false]], "__init__() (pyedaa.projectmodel.design method)": [[18, "pyEDAA.ProjectModel.Design.__init__", false]], "__init__() (pyedaa.projectmodel.edifnetlistfile method)": [[18, "pyEDAA.ProjectModel.EDIFNetlistFile.__init__", false]], "__init__() (pyedaa.projectmodel.file method)": [[18, "pyEDAA.ProjectModel.File.__init__", false]], "__init__() (pyedaa.projectmodel.fileset method)": [[18, "pyEDAA.ProjectModel.FileSet.__init__", false]], "__init__() (pyedaa.projectmodel.filetype method)": [[18, "pyEDAA.ProjectModel.FileType.__init__", false]], "__init__() (pyedaa.projectmodel.ghdl.ghdlwaveformfile method)": [[22, "pyEDAA.ProjectModel.GHDL.GHDLWaveformFile.__init__", false]], "__init__() (pyedaa.projectmodel.hdlsourcefile method)": [[18, "pyEDAA.ProjectModel.HDLSourceFile.__init__", false]], "__init__() (pyedaa.projectmodel.intel.quartusprime.quartusprojectfile method)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile.__init__", false]], "__init__() (pyedaa.projectmodel.intel.quartusprime.sdcconstraintfile method)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile.__init__", false]], "__init__() (pyedaa.projectmodel.logfile method)": [[18, "pyEDAA.ProjectModel.LogFile.__init__", false]], "__init__() (pyedaa.projectmodel.mentorgraphics.modelsim.modelsiminifile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimINIFile.__init__", false]], "__init__() (pyedaa.projectmodel.mentorgraphics.modelsim.modelsimprojectfile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimProjectFile.__init__", false]], "__init__() (pyedaa.projectmodel.mentorgraphics.modelsim.wavedofile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.WaveDoFile.__init__", false]], "__init__() (pyedaa.projectmodel.mentorgraphics.questasim.modelsiminifile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile.__init__", false]], "__init__() (pyedaa.projectmodel.mentorgraphics.questasim.modelsimprojectfile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile.__init__", false]], "__init__() (pyedaa.projectmodel.mentorgraphics.questasim.wavedofile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile.__init__", false]], "__init__() (pyedaa.projectmodel.netlistfile method)": [[18, "pyEDAA.ProjectModel.NetlistFile.__init__", false]], "__init__() (pyedaa.projectmodel.osvvm.osvvmprojectfile method)": [[28, "pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile.__init__", false]], "__init__() (pyedaa.projectmodel.project method)": [[18, "pyEDAA.ProjectModel.Project.__init__", false]], "__init__() (pyedaa.projectmodel.projectfile method)": [[18, "pyEDAA.ProjectModel.ProjectFile.__init__", false]], "__init__() (pyedaa.projectmodel.pythonsourcefile method)": [[18, "pyEDAA.ProjectModel.PythonSourceFile.__init__", false]], "__init__() (pyedaa.projectmodel.rdlsourcefile method)": [[18, "pyEDAA.ProjectModel.RDLSourceFile.__init__", false]], "__init__() (pyedaa.projectmodel.settingfile method)": [[18, "pyEDAA.ProjectModel.SettingFile.__init__", false]], "__init__() (pyedaa.projectmodel.simulationanalysisfile method)": [[18, "pyEDAA.ProjectModel.SimulationAnalysisFile.__init__", false]], "__init__() (pyedaa.projectmodel.simulationelaborationfile method)": [[18, "pyEDAA.ProjectModel.SimulationElaborationFile.__init__", false]], "__init__() (pyedaa.projectmodel.simulationrunfile method)": [[18, "pyEDAA.ProjectModel.SimulationRunFile.__init__", false]], "__init__() (pyedaa.projectmodel.simulationstartfile method)": [[18, "pyEDAA.ProjectModel.SimulationStartFile.__init__", false]], "__init__() (pyedaa.projectmodel.sourcefile method)": [[18, "pyEDAA.ProjectModel.SourceFile.__init__", false]], "__init__() (pyedaa.projectmodel.systemrdlsourcefile method)": [[18, "pyEDAA.ProjectModel.SystemRDLSourceFile.__init__", false]], "__init__() (pyedaa.projectmodel.systemverilogbasefile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogBaseFile.__init__", false]], "__init__() (pyedaa.projectmodel.systemverilogheaderfile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogHeaderFile.__init__", false]], "__init__() (pyedaa.projectmodel.systemverilogsourcefile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogSourceFile.__init__", false]], "__init__() (pyedaa.projectmodel.tclsourcefile method)": [[18, "pyEDAA.ProjectModel.TCLSourceFile.__init__", false]], "__init__() (pyedaa.projectmodel.textfile method)": [[18, "pyEDAA.ProjectModel.TextFile.__init__", false]], "__init__() (pyedaa.projectmodel.verilog.valuechangedumpfile method)": [[30, "pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile.__init__", false]], "__init__() (pyedaa.projectmodel.verilogbasefile method)": [[18, "pyEDAA.ProjectModel.VerilogBaseFile.__init__", false]], "__init__() (pyedaa.projectmodel.verilogheaderfile method)": [[18, "pyEDAA.ProjectModel.VerilogHeaderFile.__init__", false]], "__init__() (pyedaa.projectmodel.verilogsourcefile method)": [[18, "pyEDAA.ProjectModel.VerilogSourceFile.__init__", false]], "__init__() (pyedaa.projectmodel.vhdllibrary method)": [[18, "pyEDAA.ProjectModel.VHDLLibrary.__init__", false]], "__init__() (pyedaa.projectmodel.vhdlsourcefile method)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile.__init__", false]], "__init__() (pyedaa.projectmodel.waveformconfigfile method)": [[18, "pyEDAA.ProjectModel.WaveformConfigFile.__init__", false]], "__init__() (pyedaa.projectmodel.waveformdatabasefile method)": [[18, "pyEDAA.ProjectModel.WaveformDatabaseFile.__init__", false]], "__init__() (pyedaa.projectmodel.waveformexchangefile method)": [[18, "pyEDAA.ProjectModel.WaveformExchangeFile.__init__", false]], "__init__() (pyedaa.projectmodel.xilinx.ise.iseprojectfile method)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile.__init__", false]], "__init__() (pyedaa.projectmodel.xilinx.ise.ucfconstraintfile method)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile.__init__", false]], "__init__() (pyedaa.projectmodel.xilinx.vivado.constraintfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile.__init__", false]], "__init__() (pyedaa.projectmodel.xilinx.vivado.file method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.File.__init__", false]], "__init__() (pyedaa.projectmodel.xilinx.vivado.ipcoredescriptionfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile.__init__", false]], "__init__() (pyedaa.projectmodel.xilinx.vivado.ipcoreinstantiationfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile.__init__", false]], "__init__() (pyedaa.projectmodel.xilinx.vivado.verilogsourcefile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile.__init__", false]], "__init__() (pyedaa.projectmodel.xilinx.vivado.vhdlsourcefile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile.__init__", false]], "__init__() (pyedaa.projectmodel.xilinx.vivado.vivadoprojectfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile.__init__", false]], "__init__() (pyedaa.projectmodel.xilinx.vivado.xdcconstraintfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile.__init__", false]], "__init__() (pyedaa.projectmodel.xmlfile method)": [[18, "pyEDAA.ProjectModel.XMLFile.__init__", false]], "__instancecheck__() (pyedaa.projectmodel.filetype method)": [[18, "pyEDAA.ProjectModel.FileType.__instancecheck__", false]], "__len__() (pyedaa.projectmodel.altera.quartus.quartusprojectfile method)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.QuartusProjectFile.__len__", false]], "__len__() (pyedaa.projectmodel.altera.quartus.sdcconstraintfile method)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.SDCConstraintFile.__len__", false]], "__len__() (pyedaa.projectmodel.cocotbpythonfile method)": [[18, "pyEDAA.ProjectModel.CocotbPythonFile.__len__", false]], "__len__() (pyedaa.projectmodel.constraintfile method)": [[18, "pyEDAA.ProjectModel.ConstraintFile.__len__", false]], "__len__() (pyedaa.projectmodel.cppsourcefile method)": [[18, "pyEDAA.ProjectModel.CppSourceFile.__len__", false]], "__len__() (pyedaa.projectmodel.csourcefile method)": [[18, "pyEDAA.ProjectModel.CSourceFile.__len__", false]], "__len__() (pyedaa.projectmodel.design method)": [[18, "pyEDAA.ProjectModel.Design.__len__", false]], "__len__() (pyedaa.projectmodel.edifnetlistfile method)": [[18, "pyEDAA.ProjectModel.EDIFNetlistFile.__len__", false]], "__len__() (pyedaa.projectmodel.file method)": [[18, "pyEDAA.ProjectModel.File.__len__", false]], "__len__() (pyedaa.projectmodel.fileset method)": [[18, "pyEDAA.ProjectModel.FileSet.__len__", false]], "__len__() (pyedaa.projectmodel.ghdl.ghdlwaveformfile method)": [[22, "pyEDAA.ProjectModel.GHDL.GHDLWaveformFile.__len__", false]], "__len__() (pyedaa.projectmodel.hdlsourcefile method)": [[18, "pyEDAA.ProjectModel.HDLSourceFile.__len__", false]], "__len__() (pyedaa.projectmodel.intel.quartusprime.quartusprojectfile method)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile.__len__", false]], "__len__() (pyedaa.projectmodel.intel.quartusprime.sdcconstraintfile method)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile.__len__", false]], "__len__() (pyedaa.projectmodel.logfile method)": [[18, "pyEDAA.ProjectModel.LogFile.__len__", false]], "__len__() (pyedaa.projectmodel.mentorgraphics.modelsim.modelsiminifile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimINIFile.__len__", false]], "__len__() (pyedaa.projectmodel.mentorgraphics.modelsim.modelsimprojectfile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimProjectFile.__len__", false]], "__len__() (pyedaa.projectmodel.mentorgraphics.modelsim.wavedofile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.WaveDoFile.__len__", false]], "__len__() (pyedaa.projectmodel.mentorgraphics.questasim.modelsiminifile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile.__len__", false]], "__len__() (pyedaa.projectmodel.mentorgraphics.questasim.modelsimprojectfile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile.__len__", false]], "__len__() (pyedaa.projectmodel.mentorgraphics.questasim.wavedofile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile.__len__", false]], "__len__() (pyedaa.projectmodel.netlistfile method)": [[18, "pyEDAA.ProjectModel.NetlistFile.__len__", false]], "__len__() (pyedaa.projectmodel.osvvm.osvvmprojectfile method)": [[28, "pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile.__len__", false]], "__len__() (pyedaa.projectmodel.project method)": [[18, "pyEDAA.ProjectModel.Project.__len__", false]], "__len__() (pyedaa.projectmodel.projectfile method)": [[18, "pyEDAA.ProjectModel.ProjectFile.__len__", false]], "__len__() (pyedaa.projectmodel.pythonsourcefile method)": [[18, "pyEDAA.ProjectModel.PythonSourceFile.__len__", false]], "__len__() (pyedaa.projectmodel.rdlsourcefile method)": [[18, "pyEDAA.ProjectModel.RDLSourceFile.__len__", false]], "__len__() (pyedaa.projectmodel.settingfile method)": [[18, "pyEDAA.ProjectModel.SettingFile.__len__", false]], "__len__() (pyedaa.projectmodel.simulationanalysisfile method)": [[18, "pyEDAA.ProjectModel.SimulationAnalysisFile.__len__", false]], "__len__() (pyedaa.projectmodel.simulationelaborationfile method)": [[18, "pyEDAA.ProjectModel.SimulationElaborationFile.__len__", false]], "__len__() (pyedaa.projectmodel.simulationrunfile method)": [[18, "pyEDAA.ProjectModel.SimulationRunFile.__len__", false]], "__len__() (pyedaa.projectmodel.simulationstartfile method)": [[18, "pyEDAA.ProjectModel.SimulationStartFile.__len__", false]], "__len__() (pyedaa.projectmodel.sourcefile method)": [[18, "pyEDAA.ProjectModel.SourceFile.__len__", false]], "__len__() (pyedaa.projectmodel.systemrdlsourcefile method)": [[18, "pyEDAA.ProjectModel.SystemRDLSourceFile.__len__", false]], "__len__() (pyedaa.projectmodel.systemverilogbasefile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogBaseFile.__len__", false]], "__len__() (pyedaa.projectmodel.systemverilogheaderfile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogHeaderFile.__len__", false]], "__len__() (pyedaa.projectmodel.systemverilogsourcefile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogSourceFile.__len__", false]], "__len__() (pyedaa.projectmodel.tclsourcefile method)": [[18, "pyEDAA.ProjectModel.TCLSourceFile.__len__", false]], "__len__() (pyedaa.projectmodel.textfile method)": [[18, "pyEDAA.ProjectModel.TextFile.__len__", false]], "__len__() (pyedaa.projectmodel.verilog.valuechangedumpfile method)": [[30, "pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile.__len__", false]], "__len__() (pyedaa.projectmodel.verilogbasefile method)": [[18, "pyEDAA.ProjectModel.VerilogBaseFile.__len__", false]], "__len__() (pyedaa.projectmodel.verilogheaderfile method)": [[18, "pyEDAA.ProjectModel.VerilogHeaderFile.__len__", false]], "__len__() (pyedaa.projectmodel.verilogsourcefile method)": [[18, "pyEDAA.ProjectModel.VerilogSourceFile.__len__", false]], "__len__() (pyedaa.projectmodel.vhdllibrary method)": [[18, "pyEDAA.ProjectModel.VHDLLibrary.__len__", false]], "__len__() (pyedaa.projectmodel.vhdlsourcefile method)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile.__len__", false]], "__len__() (pyedaa.projectmodel.waveformconfigfile method)": [[18, "pyEDAA.ProjectModel.WaveformConfigFile.__len__", false]], "__len__() (pyedaa.projectmodel.waveformdatabasefile method)": [[18, "pyEDAA.ProjectModel.WaveformDatabaseFile.__len__", false]], "__len__() (pyedaa.projectmodel.waveformexchangefile method)": [[18, "pyEDAA.ProjectModel.WaveformExchangeFile.__len__", false]], "__len__() (pyedaa.projectmodel.xilinx.ise.iseprojectfile method)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile.__len__", false]], "__len__() (pyedaa.projectmodel.xilinx.ise.ucfconstraintfile method)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile.__len__", false]], "__len__() (pyedaa.projectmodel.xilinx.vivado.constraintfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile.__len__", false]], "__len__() (pyedaa.projectmodel.xilinx.vivado.file method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.File.__len__", false]], "__len__() (pyedaa.projectmodel.xilinx.vivado.ipcoredescriptionfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile.__len__", false]], "__len__() (pyedaa.projectmodel.xilinx.vivado.ipcoreinstantiationfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile.__len__", false]], "__len__() (pyedaa.projectmodel.xilinx.vivado.verilogsourcefile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile.__len__", false]], "__len__() (pyedaa.projectmodel.xilinx.vivado.vhdlsourcefile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile.__len__", false]], "__len__() (pyedaa.projectmodel.xilinx.vivado.vivadoprojectfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile.__len__", false]], "__len__() (pyedaa.projectmodel.xilinx.vivado.xdcconstraintfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile.__len__", false]], "__len__() (pyedaa.projectmodel.xmlfile method)": [[18, "pyEDAA.ProjectModel.XMLFile.__len__", false]], "__new__() (pyedaa.projectmodel.filetype static method)": [[18, "pyEDAA.ProjectModel.FileType.__new__", false]], "__or__() (pyedaa.projectmodel.filetype method)": [[18, "pyEDAA.ProjectModel.FileType.__or__", false]], "__prepare__() (pyedaa.projectmodel.filetype method)": [[18, "pyEDAA.ProjectModel.FileType.__prepare__", false]], "__repr__() (pyedaa.projectmodel.filetype method)": [[18, "pyEDAA.ProjectModel.FileType.__repr__", false]], "__repr__() (pyedaa.projectmodel.vhdlsourcefile method)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile.__repr__", false]], "__repr__() (pyedaa.projectmodel.xilinx.vivado.vhdlsourcefile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile.__repr__", false]], "__ror__() (pyedaa.projectmodel.filetype method)": [[18, "pyEDAA.ProjectModel.FileType.__ror__", false]], "__setattr__() (pyedaa.projectmodel.filetype method)": [[18, "pyEDAA.ProjectModel.FileType.__setattr__", false]], "__setitem__() (pyedaa.projectmodel.altera.quartus.quartusprojectfile method)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.QuartusProjectFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.altera.quartus.sdcconstraintfile method)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.SDCConstraintFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.cocotbpythonfile method)": [[18, "pyEDAA.ProjectModel.CocotbPythonFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.constraintfile method)": [[18, "pyEDAA.ProjectModel.ConstraintFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.cppsourcefile method)": [[18, "pyEDAA.ProjectModel.CppSourceFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.csourcefile method)": [[18, "pyEDAA.ProjectModel.CSourceFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.design method)": [[18, "pyEDAA.ProjectModel.Design.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.edifnetlistfile method)": [[18, "pyEDAA.ProjectModel.EDIFNetlistFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.file method)": [[18, "pyEDAA.ProjectModel.File.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.fileset method)": [[18, "pyEDAA.ProjectModel.FileSet.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.ghdl.ghdlwaveformfile method)": [[22, "pyEDAA.ProjectModel.GHDL.GHDLWaveformFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.hdlsourcefile method)": [[18, "pyEDAA.ProjectModel.HDLSourceFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.intel.quartusprime.quartusprojectfile method)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.intel.quartusprime.sdcconstraintfile method)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.logfile method)": [[18, "pyEDAA.ProjectModel.LogFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.mentorgraphics.modelsim.modelsiminifile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimINIFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.mentorgraphics.modelsim.modelsimprojectfile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimProjectFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.mentorgraphics.modelsim.wavedofile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.WaveDoFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.mentorgraphics.questasim.modelsiminifile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.mentorgraphics.questasim.modelsimprojectfile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.mentorgraphics.questasim.wavedofile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.netlistfile method)": [[18, "pyEDAA.ProjectModel.NetlistFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.osvvm.osvvmprojectfile method)": [[28, "pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.project method)": [[18, "pyEDAA.ProjectModel.Project.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.projectfile method)": [[18, "pyEDAA.ProjectModel.ProjectFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.pythonsourcefile method)": [[18, "pyEDAA.ProjectModel.PythonSourceFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.rdlsourcefile method)": [[18, "pyEDAA.ProjectModel.RDLSourceFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.settingfile method)": [[18, "pyEDAA.ProjectModel.SettingFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.simulationanalysisfile method)": [[18, "pyEDAA.ProjectModel.SimulationAnalysisFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.simulationelaborationfile method)": [[18, "pyEDAA.ProjectModel.SimulationElaborationFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.simulationrunfile method)": [[18, "pyEDAA.ProjectModel.SimulationRunFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.simulationstartfile method)": [[18, "pyEDAA.ProjectModel.SimulationStartFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.sourcefile method)": [[18, "pyEDAA.ProjectModel.SourceFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.systemrdlsourcefile method)": [[18, "pyEDAA.ProjectModel.SystemRDLSourceFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.systemverilogbasefile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogBaseFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.systemverilogheaderfile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogHeaderFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.systemverilogsourcefile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogSourceFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.tclsourcefile method)": [[18, "pyEDAA.ProjectModel.TCLSourceFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.textfile method)": [[18, "pyEDAA.ProjectModel.TextFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.verilog.valuechangedumpfile method)": [[30, "pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.verilogbasefile method)": [[18, "pyEDAA.ProjectModel.VerilogBaseFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.verilogheaderfile method)": [[18, "pyEDAA.ProjectModel.VerilogHeaderFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.verilogsourcefile method)": [[18, "pyEDAA.ProjectModel.VerilogSourceFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.vhdllibrary method)": [[18, "pyEDAA.ProjectModel.VHDLLibrary.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.vhdlsourcefile method)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.waveformconfigfile method)": [[18, "pyEDAA.ProjectModel.WaveformConfigFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.waveformdatabasefile method)": [[18, "pyEDAA.ProjectModel.WaveformDatabaseFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.waveformexchangefile method)": [[18, "pyEDAA.ProjectModel.WaveformExchangeFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.xilinx.ise.iseprojectfile method)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.xilinx.ise.ucfconstraintfile method)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.xilinx.vivado.constraintfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.xilinx.vivado.file method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.File.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.xilinx.vivado.ipcoredescriptionfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.xilinx.vivado.ipcoreinstantiationfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.xilinx.vivado.verilogsourcefile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.xilinx.vivado.vhdlsourcefile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.xilinx.vivado.vivadoprojectfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.xilinx.vivado.xdcconstraintfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile.__setitem__", false]], "__setitem__() (pyedaa.projectmodel.xmlfile method)": [[18, "pyEDAA.ProjectModel.XMLFile.__setitem__", false]], "__sizeof__() (pyedaa.projectmodel.filetype method)": [[18, "pyEDAA.ProjectModel.FileType.__sizeof__", false]], "__str__() (pyedaa.projectmodel.altera.quartus.quartusprojectfile method)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.QuartusProjectFile.__str__", false]], "__str__() (pyedaa.projectmodel.altera.quartus.sdcconstraintfile method)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.SDCConstraintFile.__str__", false]], "__str__() (pyedaa.projectmodel.cocotbpythonfile method)": [[18, "pyEDAA.ProjectModel.CocotbPythonFile.__str__", false]], "__str__() (pyedaa.projectmodel.constraintfile method)": [[18, "pyEDAA.ProjectModel.ConstraintFile.__str__", false]], "__str__() (pyedaa.projectmodel.cppsourcefile method)": [[18, "pyEDAA.ProjectModel.CppSourceFile.__str__", false]], "__str__() (pyedaa.projectmodel.csourcefile method)": [[18, "pyEDAA.ProjectModel.CSourceFile.__str__", false]], "__str__() (pyedaa.projectmodel.design method)": [[18, "pyEDAA.ProjectModel.Design.__str__", false]], "__str__() (pyedaa.projectmodel.edifnetlistfile method)": [[18, "pyEDAA.ProjectModel.EDIFNetlistFile.__str__", false]], "__str__() (pyedaa.projectmodel.file method)": [[18, "pyEDAA.ProjectModel.File.__str__", false]], "__str__() (pyedaa.projectmodel.fileset method)": [[18, "pyEDAA.ProjectModel.FileSet.__str__", false]], "__str__() (pyedaa.projectmodel.ghdl.ghdlwaveformfile method)": [[22, "pyEDAA.ProjectModel.GHDL.GHDLWaveformFile.__str__", false]], "__str__() (pyedaa.projectmodel.hdlsourcefile method)": [[18, "pyEDAA.ProjectModel.HDLSourceFile.__str__", false]], "__str__() (pyedaa.projectmodel.intel.quartusprime.quartusprojectfile method)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile.__str__", false]], "__str__() (pyedaa.projectmodel.intel.quartusprime.sdcconstraintfile method)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile.__str__", false]], "__str__() (pyedaa.projectmodel.logfile method)": [[18, "pyEDAA.ProjectModel.LogFile.__str__", false]], "__str__() (pyedaa.projectmodel.mentorgraphics.modelsim.modelsiminifile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimINIFile.__str__", false]], "__str__() (pyedaa.projectmodel.mentorgraphics.modelsim.modelsimprojectfile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimProjectFile.__str__", false]], "__str__() (pyedaa.projectmodel.mentorgraphics.modelsim.wavedofile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.WaveDoFile.__str__", false]], "__str__() (pyedaa.projectmodel.mentorgraphics.questasim.modelsiminifile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile.__str__", false]], "__str__() (pyedaa.projectmodel.mentorgraphics.questasim.modelsimprojectfile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile.__str__", false]], "__str__() (pyedaa.projectmodel.mentorgraphics.questasim.wavedofile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile.__str__", false]], "__str__() (pyedaa.projectmodel.netlistfile method)": [[18, "pyEDAA.ProjectModel.NetlistFile.__str__", false]], "__str__() (pyedaa.projectmodel.osvvm.osvvmprojectfile method)": [[28, "pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile.__str__", false]], "__str__() (pyedaa.projectmodel.project method)": [[18, "pyEDAA.ProjectModel.Project.__str__", false]], "__str__() (pyedaa.projectmodel.projectfile method)": [[18, "pyEDAA.ProjectModel.ProjectFile.__str__", false]], "__str__() (pyedaa.projectmodel.pythonsourcefile method)": [[18, "pyEDAA.ProjectModel.PythonSourceFile.__str__", false]], "__str__() (pyedaa.projectmodel.rdlsourcefile method)": [[18, "pyEDAA.ProjectModel.RDLSourceFile.__str__", false]], "__str__() (pyedaa.projectmodel.settingfile method)": [[18, "pyEDAA.ProjectModel.SettingFile.__str__", false]], "__str__() (pyedaa.projectmodel.simulationanalysisfile method)": [[18, "pyEDAA.ProjectModel.SimulationAnalysisFile.__str__", false]], "__str__() (pyedaa.projectmodel.simulationelaborationfile method)": [[18, "pyEDAA.ProjectModel.SimulationElaborationFile.__str__", false]], "__str__() (pyedaa.projectmodel.simulationrunfile method)": [[18, "pyEDAA.ProjectModel.SimulationRunFile.__str__", false]], "__str__() (pyedaa.projectmodel.simulationstartfile method)": [[18, "pyEDAA.ProjectModel.SimulationStartFile.__str__", false]], "__str__() (pyedaa.projectmodel.sourcefile method)": [[18, "pyEDAA.ProjectModel.SourceFile.__str__", false]], "__str__() (pyedaa.projectmodel.systemrdlsourcefile method)": [[18, "pyEDAA.ProjectModel.SystemRDLSourceFile.__str__", false]], "__str__() (pyedaa.projectmodel.systemverilogbasefile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogBaseFile.__str__", false]], "__str__() (pyedaa.projectmodel.systemverilogheaderfile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogHeaderFile.__str__", false]], "__str__() (pyedaa.projectmodel.systemverilogsourcefile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogSourceFile.__str__", false]], "__str__() (pyedaa.projectmodel.tclsourcefile method)": [[18, "pyEDAA.ProjectModel.TCLSourceFile.__str__", false]], "__str__() (pyedaa.projectmodel.textfile method)": [[18, "pyEDAA.ProjectModel.TextFile.__str__", false]], "__str__() (pyedaa.projectmodel.verilog.valuechangedumpfile method)": [[30, "pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile.__str__", false]], "__str__() (pyedaa.projectmodel.verilogbasefile method)": [[18, "pyEDAA.ProjectModel.VerilogBaseFile.__str__", false]], "__str__() (pyedaa.projectmodel.verilogheaderfile method)": [[18, "pyEDAA.ProjectModel.VerilogHeaderFile.__str__", false]], "__str__() (pyedaa.projectmodel.verilogsourcefile method)": [[18, "pyEDAA.ProjectModel.VerilogSourceFile.__str__", false]], "__str__() (pyedaa.projectmodel.vhdllibrary method)": [[18, "pyEDAA.ProjectModel.VHDLLibrary.__str__", false]], "__str__() (pyedaa.projectmodel.vhdlsourcefile method)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile.__str__", false]], "__str__() (pyedaa.projectmodel.waveformconfigfile method)": [[18, "pyEDAA.ProjectModel.WaveformConfigFile.__str__", false]], "__str__() (pyedaa.projectmodel.waveformdatabasefile method)": [[18, "pyEDAA.ProjectModel.WaveformDatabaseFile.__str__", false]], "__str__() (pyedaa.projectmodel.waveformexchangefile method)": [[18, "pyEDAA.ProjectModel.WaveformExchangeFile.__str__", false]], "__str__() (pyedaa.projectmodel.xilinx.ise.iseprojectfile method)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile.__str__", false]], "__str__() (pyedaa.projectmodel.xilinx.ise.ucfconstraintfile method)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile.__str__", false]], "__str__() (pyedaa.projectmodel.xilinx.vivado.constraintfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile.__str__", false]], "__str__() (pyedaa.projectmodel.xilinx.vivado.file method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.File.__str__", false]], "__str__() (pyedaa.projectmodel.xilinx.vivado.ipcoredescriptionfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile.__str__", false]], "__str__() (pyedaa.projectmodel.xilinx.vivado.ipcoreinstantiationfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile.__str__", false]], "__str__() (pyedaa.projectmodel.xilinx.vivado.verilogsourcefile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile.__str__", false]], "__str__() (pyedaa.projectmodel.xilinx.vivado.vhdlsourcefile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile.__str__", false]], "__str__() (pyedaa.projectmodel.xilinx.vivado.vivadoprojectfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile.__str__", false]], "__str__() (pyedaa.projectmodel.xilinx.vivado.xdcconstraintfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile.__str__", false]], "__str__() (pyedaa.projectmodel.xmlfile method)": [[18, "pyEDAA.ProjectModel.XMLFile.__str__", false]], "__subclasscheck__() (pyedaa.projectmodel.filetype method)": [[18, "pyEDAA.ProjectModel.FileType.__subclasscheck__", false]], "__subclasses__() (pyedaa.projectmodel.filetype method)": [[18, "pyEDAA.ProjectModel.FileType.__subclasses__", false]], "_checkforabstractmethods() (pyedaa.projectmodel.filetype class method)": [[18, "pyEDAA.ProjectModel.FileType._checkForAbstractMethods", false]], "_iteratebaseclasspaths() (pyedaa.projectmodel.filetype class method)": [[18, "pyEDAA.ProjectModel.FileType._iterateBaseClassPaths", false]], "_wrapnewmethodifabstract() (pyedaa.projectmodel.filetype class method)": [[18, "pyEDAA.ProjectModel.FileType._wrapNewMethodIfAbstract", false]], "_wrapnewmethodifsingleton() (pyedaa.projectmodel.filetype class method)": [[18, "pyEDAA.ProjectModel.FileType._wrapNewMethodIfSingleton", false]], "addfile() (pyedaa.projectmodel.fileset method)": [[18, "pyEDAA.ProjectModel.FileSet.AddFile", false]], "addfiles() (pyedaa.projectmodel.fileset method)": [[18, "pyEDAA.ProjectModel.FileSet.AddFiles", false]], "addfileset() (pyedaa.projectmodel.fileset method)": [[18, "pyEDAA.ProjectModel.FileSet.AddFileSet", false]], "addfilesets() (pyedaa.projectmodel.fileset method)": [[18, "pyEDAA.ProjectModel.FileSet.AddFileSets", false]], "any (pyedaa.projectmodel.altera.quartus.quartusprojectfile attribute)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.QuartusProjectFile.Any", false]], "any (pyedaa.projectmodel.altera.quartus.sdcconstraintfile attribute)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.SDCConstraintFile.Any", false]], "any (pyedaa.projectmodel.cocotbpythonfile attribute)": [[18, "pyEDAA.ProjectModel.CocotbPythonFile.Any", false]], "any (pyedaa.projectmodel.constraintfile attribute)": [[18, "pyEDAA.ProjectModel.ConstraintFile.Any", false]], "any (pyedaa.projectmodel.cppsourcefile attribute)": [[18, "pyEDAA.ProjectModel.CppSourceFile.Any", false]], "any (pyedaa.projectmodel.csourcefile attribute)": [[18, "pyEDAA.ProjectModel.CSourceFile.Any", false]], "any (pyedaa.projectmodel.edifnetlistfile attribute)": [[18, "pyEDAA.ProjectModel.EDIFNetlistFile.Any", false]], "any (pyedaa.projectmodel.file attribute)": [[18, "pyEDAA.ProjectModel.File.Any", false]], "any (pyedaa.projectmodel.ghdl.ghdlwaveformfile attribute)": [[22, "pyEDAA.ProjectModel.GHDL.GHDLWaveformFile.Any", false]], "any (pyedaa.projectmodel.hdlsourcefile attribute)": [[18, "pyEDAA.ProjectModel.HDLSourceFile.Any", false]], "any (pyedaa.projectmodel.intel.quartusprime.quartusprojectfile attribute)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile.Any", false]], "any (pyedaa.projectmodel.intel.quartusprime.sdcconstraintfile attribute)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile.Any", false]], "any (pyedaa.projectmodel.logfile attribute)": [[18, "pyEDAA.ProjectModel.LogFile.Any", false]], "any (pyedaa.projectmodel.mentorgraphics.modelsim.modelsiminifile attribute)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimINIFile.Any", false]], "any (pyedaa.projectmodel.mentorgraphics.modelsim.modelsimprojectfile attribute)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimProjectFile.Any", false]], "any (pyedaa.projectmodel.mentorgraphics.modelsim.wavedofile attribute)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.WaveDoFile.Any", false]], "any (pyedaa.projectmodel.mentorgraphics.questasim.modelsiminifile attribute)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile.Any", false]], "any (pyedaa.projectmodel.mentorgraphics.questasim.modelsimprojectfile attribute)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile.Any", false]], "any (pyedaa.projectmodel.mentorgraphics.questasim.wavedofile attribute)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile.Any", false]], "any (pyedaa.projectmodel.netlistfile attribute)": [[18, "pyEDAA.ProjectModel.NetlistFile.Any", false]], "any (pyedaa.projectmodel.osvvm.osvvmprojectfile attribute)": [[28, "pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile.Any", false]], "any (pyedaa.projectmodel.projectfile attribute)": [[18, "pyEDAA.ProjectModel.ProjectFile.Any", false]], "any (pyedaa.projectmodel.pythonsourcefile attribute)": [[18, "pyEDAA.ProjectModel.PythonSourceFile.Any", false]], "any (pyedaa.projectmodel.rdlsourcefile attribute)": [[18, "pyEDAA.ProjectModel.RDLSourceFile.Any", false]], "any (pyedaa.projectmodel.settingfile attribute)": [[18, "pyEDAA.ProjectModel.SettingFile.Any", false]], "any (pyedaa.projectmodel.simulationanalysisfile attribute)": [[18, "pyEDAA.ProjectModel.SimulationAnalysisFile.Any", false]], "any (pyedaa.projectmodel.simulationelaborationfile attribute)": [[18, "pyEDAA.ProjectModel.SimulationElaborationFile.Any", false]], "any (pyedaa.projectmodel.simulationrunfile attribute)": [[18, "pyEDAA.ProjectModel.SimulationRunFile.Any", false]], "any (pyedaa.projectmodel.simulationstartfile attribute)": [[18, "pyEDAA.ProjectModel.SimulationStartFile.Any", false]], "any (pyedaa.projectmodel.sourcefile attribute)": [[18, "pyEDAA.ProjectModel.SourceFile.Any", false]], "any (pyedaa.projectmodel.systemrdlsourcefile attribute)": [[18, "pyEDAA.ProjectModel.SystemRDLSourceFile.Any", false]], "any (pyedaa.projectmodel.systemverilogbasefile attribute)": [[18, "pyEDAA.ProjectModel.SystemVerilogBaseFile.Any", false]], "any (pyedaa.projectmodel.systemverilogheaderfile attribute)": [[18, "pyEDAA.ProjectModel.SystemVerilogHeaderFile.Any", false]], "any (pyedaa.projectmodel.systemverilogsourcefile attribute)": [[18, "pyEDAA.ProjectModel.SystemVerilogSourceFile.Any", false]], "any (pyedaa.projectmodel.tclsourcefile attribute)": [[18, "pyEDAA.ProjectModel.TCLSourceFile.Any", false]], "any (pyedaa.projectmodel.textfile attribute)": [[18, "pyEDAA.ProjectModel.TextFile.Any", false]], "any (pyedaa.projectmodel.verilog.valuechangedumpfile attribute)": [[30, "pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile.Any", false]], "any (pyedaa.projectmodel.verilogbasefile attribute)": [[18, "pyEDAA.ProjectModel.VerilogBaseFile.Any", false]], "any (pyedaa.projectmodel.verilogheaderfile attribute)": [[18, "pyEDAA.ProjectModel.VerilogHeaderFile.Any", false]], "any (pyedaa.projectmodel.verilogsourcefile attribute)": [[18, "pyEDAA.ProjectModel.VerilogSourceFile.Any", false]], "any (pyedaa.projectmodel.vhdlsourcefile attribute)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile.Any", false]], "any (pyedaa.projectmodel.waveformconfigfile attribute)": [[18, "pyEDAA.ProjectModel.WaveformConfigFile.Any", false]], "any (pyedaa.projectmodel.waveformdatabasefile attribute)": [[18, "pyEDAA.ProjectModel.WaveformDatabaseFile.Any", false]], "any (pyedaa.projectmodel.waveformexchangefile attribute)": [[18, "pyEDAA.ProjectModel.WaveformExchangeFile.Any", false]], "any (pyedaa.projectmodel.xilinx.ise.iseprojectfile attribute)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile.Any", false]], "any (pyedaa.projectmodel.xilinx.ise.ucfconstraintfile attribute)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile.Any", false]], "any (pyedaa.projectmodel.xilinx.vivado.constraintfile attribute)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile.Any", false]], "any (pyedaa.projectmodel.xilinx.vivado.file attribute)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.File.Any", false]], "any (pyedaa.projectmodel.xilinx.vivado.ipcoredescriptionfile attribute)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile.Any", false]], "any (pyedaa.projectmodel.xilinx.vivado.ipcoreinstantiationfile attribute)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile.Any", false]], "any (pyedaa.projectmodel.xilinx.vivado.verilogsourcefile attribute)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile.Any", false]], "any (pyedaa.projectmodel.xilinx.vivado.vhdlsourcefile attribute)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile.Any", false]], "any (pyedaa.projectmodel.xilinx.vivado.vivadoprojectfile attribute)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile.Any", false]], "any (pyedaa.projectmodel.xilinx.vivado.xdcconstraintfile attribute)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile.Any", false]], "any (pyedaa.projectmodel.xmlfile attribute)": [[18, "pyEDAA.ProjectModel.XMLFile.Any", false]], "attribute (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.Attribute", false]], "base-class": [[4, "term-base-class", true]], "cocotbpythonfile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.CocotbPythonFile", false]], "constraintfile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.ConstraintFile", false]], "constraintfile (class in pyedaa.projectmodel.xilinx.vivado)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile", false]], "cppsourcefile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.CppSourceFile", false]], "csourcefile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.CSourceFile", false]], "default fileset": [[4, "term-Default-fileset", true]], "defaultfileset (pyedaa.projectmodel.design property)": [[18, "pyEDAA.ProjectModel.Design.DefaultFileSet", false]], "design": [[4, "term-Design", true]], "design (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.Design", false]], "design (pyedaa.projectmodel.altera.quartus.quartusprojectfile property)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.QuartusProjectFile.Design", false]], "design (pyedaa.projectmodel.altera.quartus.sdcconstraintfile property)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.SDCConstraintFile.Design", false]], "design (pyedaa.projectmodel.cocotbpythonfile property)": [[18, "pyEDAA.ProjectModel.CocotbPythonFile.Design", false]], "design (pyedaa.projectmodel.constraintfile property)": [[18, "pyEDAA.ProjectModel.ConstraintFile.Design", false]], "design (pyedaa.projectmodel.cppsourcefile property)": [[18, "pyEDAA.ProjectModel.CppSourceFile.Design", false]], "design (pyedaa.projectmodel.csourcefile property)": [[18, "pyEDAA.ProjectModel.CSourceFile.Design", false]], "design (pyedaa.projectmodel.edifnetlistfile property)": [[18, "pyEDAA.ProjectModel.EDIFNetlistFile.Design", false]], "design (pyedaa.projectmodel.file property)": [[18, "pyEDAA.ProjectModel.File.Design", false]], "design (pyedaa.projectmodel.fileset property)": [[18, "pyEDAA.ProjectModel.FileSet.Design", false]], "design (pyedaa.projectmodel.ghdl.ghdlwaveformfile property)": [[22, "pyEDAA.ProjectModel.GHDL.GHDLWaveformFile.Design", false]], "design (pyedaa.projectmodel.hdlsourcefile property)": [[18, "pyEDAA.ProjectModel.HDLSourceFile.Design", false]], "design (pyedaa.projectmodel.intel.quartusprime.quartusprojectfile property)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile.Design", false]], "design (pyedaa.projectmodel.intel.quartusprime.sdcconstraintfile property)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile.Design", false]], "design (pyedaa.projectmodel.logfile property)": [[18, "pyEDAA.ProjectModel.LogFile.Design", false]], "design (pyedaa.projectmodel.mentorgraphics.modelsim.modelsiminifile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimINIFile.Design", false]], "design (pyedaa.projectmodel.mentorgraphics.modelsim.modelsimprojectfile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimProjectFile.Design", false]], "design (pyedaa.projectmodel.mentorgraphics.modelsim.wavedofile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.WaveDoFile.Design", false]], "design (pyedaa.projectmodel.mentorgraphics.questasim.modelsiminifile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile.Design", false]], "design (pyedaa.projectmodel.mentorgraphics.questasim.modelsimprojectfile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile.Design", false]], "design (pyedaa.projectmodel.mentorgraphics.questasim.wavedofile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile.Design", false]], "design (pyedaa.projectmodel.netlistfile property)": [[18, "pyEDAA.ProjectModel.NetlistFile.Design", false]], "design (pyedaa.projectmodel.osvvm.osvvmprojectfile property)": [[28, "pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile.Design", false]], "design (pyedaa.projectmodel.projectfile property)": [[18, "pyEDAA.ProjectModel.ProjectFile.Design", false]], "design (pyedaa.projectmodel.pythonsourcefile property)": [[18, "pyEDAA.ProjectModel.PythonSourceFile.Design", false]], "design (pyedaa.projectmodel.rdlsourcefile property)": [[18, "pyEDAA.ProjectModel.RDLSourceFile.Design", false]], "design (pyedaa.projectmodel.settingfile property)": [[18, "pyEDAA.ProjectModel.SettingFile.Design", false]], "design (pyedaa.projectmodel.simulationanalysisfile property)": [[18, "pyEDAA.ProjectModel.SimulationAnalysisFile.Design", false]], "design (pyedaa.projectmodel.simulationelaborationfile property)": [[18, "pyEDAA.ProjectModel.SimulationElaborationFile.Design", false]], "design (pyedaa.projectmodel.simulationrunfile property)": [[18, "pyEDAA.ProjectModel.SimulationRunFile.Design", false]], "design (pyedaa.projectmodel.simulationstartfile property)": [[18, "pyEDAA.ProjectModel.SimulationStartFile.Design", false]], "design (pyedaa.projectmodel.sourcefile property)": [[18, "pyEDAA.ProjectModel.SourceFile.Design", false]], "design (pyedaa.projectmodel.systemrdlsourcefile property)": [[18, "pyEDAA.ProjectModel.SystemRDLSourceFile.Design", false]], "design (pyedaa.projectmodel.systemverilogbasefile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogBaseFile.Design", false]], "design (pyedaa.projectmodel.systemverilogheaderfile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogHeaderFile.Design", false]], "design (pyedaa.projectmodel.systemverilogsourcefile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogSourceFile.Design", false]], "design (pyedaa.projectmodel.tclsourcefile property)": [[18, "pyEDAA.ProjectModel.TCLSourceFile.Design", false]], "design (pyedaa.projectmodel.textfile property)": [[18, "pyEDAA.ProjectModel.TextFile.Design", false]], "design (pyedaa.projectmodel.verilog.valuechangedumpfile property)": [[30, "pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile.Design", false]], "design (pyedaa.projectmodel.verilogbasefile property)": [[18, "pyEDAA.ProjectModel.VerilogBaseFile.Design", false]], "design (pyedaa.projectmodel.verilogheaderfile property)": [[18, "pyEDAA.ProjectModel.VerilogHeaderFile.Design", false]], "design (pyedaa.projectmodel.verilogsourcefile property)": [[18, "pyEDAA.ProjectModel.VerilogSourceFile.Design", false]], "design (pyedaa.projectmodel.vhdllibrary property)": [[18, "pyEDAA.ProjectModel.VHDLLibrary.Design", false]], "design (pyedaa.projectmodel.vhdlsourcefile property)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile.Design", false]], "design (pyedaa.projectmodel.waveformconfigfile property)": [[18, "pyEDAA.ProjectModel.WaveformConfigFile.Design", false]], "design (pyedaa.projectmodel.waveformdatabasefile property)": [[18, "pyEDAA.ProjectModel.WaveformDatabaseFile.Design", false]], "design (pyedaa.projectmodel.waveformexchangefile property)": [[18, "pyEDAA.ProjectModel.WaveformExchangeFile.Design", false]], "design (pyedaa.projectmodel.xilinx.ise.iseprojectfile property)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile.Design", false]], "design (pyedaa.projectmodel.xilinx.ise.ucfconstraintfile property)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile.Design", false]], "design (pyedaa.projectmodel.xilinx.vivado.constraintfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile.Design", false]], "design (pyedaa.projectmodel.xilinx.vivado.file property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.File.Design", false]], "design (pyedaa.projectmodel.xilinx.vivado.ipcoredescriptionfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile.Design", false]], "design (pyedaa.projectmodel.xilinx.vivado.ipcoreinstantiationfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile.Design", false]], "design (pyedaa.projectmodel.xilinx.vivado.verilogsourcefile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile.Design", false]], "design (pyedaa.projectmodel.xilinx.vivado.vhdlsourcefile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile.Design", false]], "design (pyedaa.projectmodel.xilinx.vivado.vivadoprojectfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile.Design", false]], "design (pyedaa.projectmodel.xilinx.vivado.xdcconstraintfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile.Design", false]], "design (pyedaa.projectmodel.xmlfile property)": [[18, "pyEDAA.ProjectModel.XMLFile.Design", false]], "designcount (pyedaa.projectmodel.project property)": [[18, "pyEDAA.ProjectModel.Project.DesignCount", false]], "directory (pyedaa.projectmodel.design property)": [[18, "pyEDAA.ProjectModel.Design.Directory", false]], "directory (pyedaa.projectmodel.fileset property)": [[18, "pyEDAA.ProjectModel.FileSet.Directory", false]], "edifnetlistfile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.EDIFNetlistFile", false]], "file": [[4, "term-File", true]], "file (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.File", false]], "file (class in pyedaa.projectmodel.xilinx.vivado)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.File", false]], "filecount (pyedaa.projectmodel.fileset property)": [[18, "pyEDAA.ProjectModel.FileSet.FileCount", false]], "filecount (pyedaa.projectmodel.vhdllibrary property)": [[18, "pyEDAA.ProjectModel.VHDLLibrary.FileCount", false]], "files (pyedaa.projectmodel.vhdllibrary property)": [[18, "pyEDAA.ProjectModel.VHDLLibrary.Files", false]], "files() (pyedaa.projectmodel.design method)": [[18, "pyEDAA.ProjectModel.Design.Files", false]], "files() (pyedaa.projectmodel.fileset method)": [[18, "pyEDAA.ProjectModel.FileSet.Files", false]], "fileset": [[4, "term-FileSet", true]], "fileset (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.FileSet", false]], "fileset (pyedaa.projectmodel.altera.quartus.quartusprojectfile property)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.QuartusProjectFile.FileSet", false]], "fileset (pyedaa.projectmodel.altera.quartus.sdcconstraintfile property)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.SDCConstraintFile.FileSet", false]], "fileset (pyedaa.projectmodel.cocotbpythonfile property)": [[18, "pyEDAA.ProjectModel.CocotbPythonFile.FileSet", false]], "fileset (pyedaa.projectmodel.constraintfile property)": [[18, "pyEDAA.ProjectModel.ConstraintFile.FileSet", false]], "fileset (pyedaa.projectmodel.cppsourcefile property)": [[18, "pyEDAA.ProjectModel.CppSourceFile.FileSet", false]], "fileset (pyedaa.projectmodel.csourcefile property)": [[18, "pyEDAA.ProjectModel.CSourceFile.FileSet", false]], "fileset (pyedaa.projectmodel.edifnetlistfile property)": [[18, "pyEDAA.ProjectModel.EDIFNetlistFile.FileSet", false]], "fileset (pyedaa.projectmodel.file property)": [[18, "pyEDAA.ProjectModel.File.FileSet", false]], "fileset (pyedaa.projectmodel.ghdl.ghdlwaveformfile property)": [[22, "pyEDAA.ProjectModel.GHDL.GHDLWaveformFile.FileSet", false]], "fileset (pyedaa.projectmodel.hdlsourcefile property)": [[18, "pyEDAA.ProjectModel.HDLSourceFile.FileSet", false]], "fileset (pyedaa.projectmodel.intel.quartusprime.quartusprojectfile property)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile.FileSet", false]], "fileset (pyedaa.projectmodel.intel.quartusprime.sdcconstraintfile property)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile.FileSet", false]], "fileset (pyedaa.projectmodel.logfile property)": [[18, "pyEDAA.ProjectModel.LogFile.FileSet", false]], "fileset (pyedaa.projectmodel.mentorgraphics.modelsim.modelsiminifile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimINIFile.FileSet", false]], "fileset (pyedaa.projectmodel.mentorgraphics.modelsim.modelsimprojectfile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimProjectFile.FileSet", false]], "fileset (pyedaa.projectmodel.mentorgraphics.modelsim.wavedofile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.WaveDoFile.FileSet", false]], "fileset (pyedaa.projectmodel.mentorgraphics.questasim.modelsiminifile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile.FileSet", false]], "fileset (pyedaa.projectmodel.mentorgraphics.questasim.modelsimprojectfile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile.FileSet", false]], "fileset (pyedaa.projectmodel.mentorgraphics.questasim.wavedofile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile.FileSet", false]], "fileset (pyedaa.projectmodel.netlistfile property)": [[18, "pyEDAA.ProjectModel.NetlistFile.FileSet", false]], "fileset (pyedaa.projectmodel.osvvm.osvvmprojectfile property)": [[28, "pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile.FileSet", false]], "fileset (pyedaa.projectmodel.projectfile property)": [[18, "pyEDAA.ProjectModel.ProjectFile.FileSet", false]], "fileset (pyedaa.projectmodel.pythonsourcefile property)": [[18, "pyEDAA.ProjectModel.PythonSourceFile.FileSet", false]], "fileset (pyedaa.projectmodel.rdlsourcefile property)": [[18, "pyEDAA.ProjectModel.RDLSourceFile.FileSet", false]], "fileset (pyedaa.projectmodel.settingfile property)": [[18, "pyEDAA.ProjectModel.SettingFile.FileSet", false]], "fileset (pyedaa.projectmodel.simulationanalysisfile property)": [[18, "pyEDAA.ProjectModel.SimulationAnalysisFile.FileSet", false]], "fileset (pyedaa.projectmodel.simulationelaborationfile property)": [[18, "pyEDAA.ProjectModel.SimulationElaborationFile.FileSet", false]], "fileset (pyedaa.projectmodel.simulationrunfile property)": [[18, "pyEDAA.ProjectModel.SimulationRunFile.FileSet", false]], "fileset (pyedaa.projectmodel.simulationstartfile property)": [[18, "pyEDAA.ProjectModel.SimulationStartFile.FileSet", false]], "fileset (pyedaa.projectmodel.sourcefile property)": [[18, "pyEDAA.ProjectModel.SourceFile.FileSet", false]], "fileset (pyedaa.projectmodel.systemrdlsourcefile property)": [[18, "pyEDAA.ProjectModel.SystemRDLSourceFile.FileSet", false]], "fileset (pyedaa.projectmodel.systemverilogbasefile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogBaseFile.FileSet", false]], "fileset (pyedaa.projectmodel.systemverilogheaderfile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogHeaderFile.FileSet", false]], "fileset (pyedaa.projectmodel.systemverilogsourcefile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogSourceFile.FileSet", false]], "fileset (pyedaa.projectmodel.tclsourcefile property)": [[18, "pyEDAA.ProjectModel.TCLSourceFile.FileSet", false]], "fileset (pyedaa.projectmodel.textfile property)": [[18, "pyEDAA.ProjectModel.TextFile.FileSet", false]], "fileset (pyedaa.projectmodel.verilog.valuechangedumpfile property)": [[30, "pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile.FileSet", false]], "fileset (pyedaa.projectmodel.verilogbasefile property)": [[18, "pyEDAA.ProjectModel.VerilogBaseFile.FileSet", false]], "fileset (pyedaa.projectmodel.verilogheaderfile property)": [[18, "pyEDAA.ProjectModel.VerilogHeaderFile.FileSet", false]], "fileset (pyedaa.projectmodel.verilogsourcefile property)": [[18, "pyEDAA.ProjectModel.VerilogSourceFile.FileSet", false]], "fileset (pyedaa.projectmodel.vhdlsourcefile property)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile.FileSet", false]], "fileset (pyedaa.projectmodel.waveformconfigfile property)": [[18, "pyEDAA.ProjectModel.WaveformConfigFile.FileSet", false]], "fileset (pyedaa.projectmodel.waveformdatabasefile property)": [[18, "pyEDAA.ProjectModel.WaveformDatabaseFile.FileSet", false]], "fileset (pyedaa.projectmodel.waveformexchangefile property)": [[18, "pyEDAA.ProjectModel.WaveformExchangeFile.FileSet", false]], "fileset (pyedaa.projectmodel.xilinx.ise.iseprojectfile property)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile.FileSet", false]], "fileset (pyedaa.projectmodel.xilinx.ise.ucfconstraintfile property)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile.FileSet", false]], "fileset (pyedaa.projectmodel.xilinx.vivado.constraintfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile.FileSet", false]], "fileset (pyedaa.projectmodel.xilinx.vivado.file property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.File.FileSet", false]], "fileset (pyedaa.projectmodel.xilinx.vivado.ipcoredescriptionfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile.FileSet", false]], "fileset (pyedaa.projectmodel.xilinx.vivado.ipcoreinstantiationfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile.FileSet", false]], "fileset (pyedaa.projectmodel.xilinx.vivado.verilogsourcefile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile.FileSet", false]], "fileset (pyedaa.projectmodel.xilinx.vivado.vhdlsourcefile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile.FileSet", false]], "fileset (pyedaa.projectmodel.xilinx.vivado.vivadoprojectfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile.FileSet", false]], "fileset (pyedaa.projectmodel.xilinx.vivado.xdcconstraintfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile.FileSet", false]], "fileset (pyedaa.projectmodel.xmlfile property)": [[18, "pyEDAA.ProjectModel.XMLFile.FileSet", false]], "filesetcount (pyedaa.projectmodel.design property)": [[18, "pyEDAA.ProjectModel.Design.FileSetCount", false]], "filesetcount (pyedaa.projectmodel.fileset property)": [[18, "pyEDAA.ProjectModel.FileSet.FileSetCount", false]], "filesets (pyedaa.projectmodel.design property)": [[18, "pyEDAA.ProjectModel.Design.FileSets", false]], "filesets (pyedaa.projectmodel.fileset property)": [[18, "pyEDAA.ProjectModel.FileSet.FileSets", false]], "filetype (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.FileType", false]], "filetype (pyedaa.projectmodel.altera.quartus.quartusprojectfile property)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.QuartusProjectFile.FileType", false]], "filetype (pyedaa.projectmodel.altera.quartus.sdcconstraintfile property)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.SDCConstraintFile.FileType", false]], "filetype (pyedaa.projectmodel.cocotbpythonfile property)": [[18, "pyEDAA.ProjectModel.CocotbPythonFile.FileType", false]], "filetype (pyedaa.projectmodel.constraintfile property)": [[18, "pyEDAA.ProjectModel.ConstraintFile.FileType", false]], "filetype (pyedaa.projectmodel.cppsourcefile property)": [[18, "pyEDAA.ProjectModel.CppSourceFile.FileType", false]], "filetype (pyedaa.projectmodel.csourcefile property)": [[18, "pyEDAA.ProjectModel.CSourceFile.FileType", false]], "filetype (pyedaa.projectmodel.edifnetlistfile property)": [[18, "pyEDAA.ProjectModel.EDIFNetlistFile.FileType", false]], "filetype (pyedaa.projectmodel.file property)": [[18, "pyEDAA.ProjectModel.File.FileType", false]], "filetype (pyedaa.projectmodel.ghdl.ghdlwaveformfile property)": [[22, "pyEDAA.ProjectModel.GHDL.GHDLWaveformFile.FileType", false]], "filetype (pyedaa.projectmodel.hdlsourcefile property)": [[18, "pyEDAA.ProjectModel.HDLSourceFile.FileType", false]], "filetype (pyedaa.projectmodel.intel.quartusprime.quartusprojectfile property)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile.FileType", false]], "filetype (pyedaa.projectmodel.intel.quartusprime.sdcconstraintfile property)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile.FileType", false]], "filetype (pyedaa.projectmodel.logfile property)": [[18, "pyEDAA.ProjectModel.LogFile.FileType", false]], "filetype (pyedaa.projectmodel.mentorgraphics.modelsim.modelsiminifile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimINIFile.FileType", false]], "filetype (pyedaa.projectmodel.mentorgraphics.modelsim.modelsimprojectfile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimProjectFile.FileType", false]], "filetype (pyedaa.projectmodel.mentorgraphics.modelsim.wavedofile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.WaveDoFile.FileType", false]], "filetype (pyedaa.projectmodel.mentorgraphics.questasim.modelsiminifile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile.FileType", false]], "filetype (pyedaa.projectmodel.mentorgraphics.questasim.modelsimprojectfile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile.FileType", false]], "filetype (pyedaa.projectmodel.mentorgraphics.questasim.wavedofile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile.FileType", false]], "filetype (pyedaa.projectmodel.netlistfile property)": [[18, "pyEDAA.ProjectModel.NetlistFile.FileType", false]], "filetype (pyedaa.projectmodel.osvvm.osvvmprojectfile property)": [[28, "pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile.FileType", false]], "filetype (pyedaa.projectmodel.projectfile property)": [[18, "pyEDAA.ProjectModel.ProjectFile.FileType", false]], "filetype (pyedaa.projectmodel.pythonsourcefile property)": [[18, "pyEDAA.ProjectModel.PythonSourceFile.FileType", false]], "filetype (pyedaa.projectmodel.rdlsourcefile property)": [[18, "pyEDAA.ProjectModel.RDLSourceFile.FileType", false]], "filetype (pyedaa.projectmodel.settingfile property)": [[18, "pyEDAA.ProjectModel.SettingFile.FileType", false]], "filetype (pyedaa.projectmodel.simulationanalysisfile property)": [[18, "pyEDAA.ProjectModel.SimulationAnalysisFile.FileType", false]], "filetype (pyedaa.projectmodel.simulationelaborationfile property)": [[18, "pyEDAA.ProjectModel.SimulationElaborationFile.FileType", false]], "filetype (pyedaa.projectmodel.simulationrunfile property)": [[18, "pyEDAA.ProjectModel.SimulationRunFile.FileType", false]], "filetype (pyedaa.projectmodel.simulationstartfile property)": [[18, "pyEDAA.ProjectModel.SimulationStartFile.FileType", false]], "filetype (pyedaa.projectmodel.sourcefile property)": [[18, "pyEDAA.ProjectModel.SourceFile.FileType", false]], "filetype (pyedaa.projectmodel.systemrdlsourcefile property)": [[18, "pyEDAA.ProjectModel.SystemRDLSourceFile.FileType", false]], "filetype (pyedaa.projectmodel.systemverilogbasefile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogBaseFile.FileType", false]], "filetype (pyedaa.projectmodel.systemverilogheaderfile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogHeaderFile.FileType", false]], "filetype (pyedaa.projectmodel.systemverilogsourcefile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogSourceFile.FileType", false]], "filetype (pyedaa.projectmodel.tclsourcefile property)": [[18, "pyEDAA.ProjectModel.TCLSourceFile.FileType", false]], "filetype (pyedaa.projectmodel.textfile property)": [[18, "pyEDAA.ProjectModel.TextFile.FileType", false]], "filetype (pyedaa.projectmodel.verilog.valuechangedumpfile property)": [[30, "pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile.FileType", false]], "filetype (pyedaa.projectmodel.verilogbasefile property)": [[18, "pyEDAA.ProjectModel.VerilogBaseFile.FileType", false]], "filetype (pyedaa.projectmodel.verilogheaderfile property)": [[18, "pyEDAA.ProjectModel.VerilogHeaderFile.FileType", false]], "filetype (pyedaa.projectmodel.verilogsourcefile property)": [[18, "pyEDAA.ProjectModel.VerilogSourceFile.FileType", false]], "filetype (pyedaa.projectmodel.vhdlsourcefile property)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile.FileType", false]], "filetype (pyedaa.projectmodel.waveformconfigfile property)": [[18, "pyEDAA.ProjectModel.WaveformConfigFile.FileType", false]], "filetype (pyedaa.projectmodel.waveformdatabasefile property)": [[18, "pyEDAA.ProjectModel.WaveformDatabaseFile.FileType", false]], "filetype (pyedaa.projectmodel.waveformexchangefile property)": [[18, "pyEDAA.ProjectModel.WaveformExchangeFile.FileType", false]], "filetype (pyedaa.projectmodel.xilinx.ise.iseprojectfile property)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile.FileType", false]], "filetype (pyedaa.projectmodel.xilinx.ise.ucfconstraintfile property)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile.FileType", false]], "filetype (pyedaa.projectmodel.xilinx.vivado.constraintfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile.FileType", false]], "filetype (pyedaa.projectmodel.xilinx.vivado.file property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.File.FileType", false]], "filetype (pyedaa.projectmodel.xilinx.vivado.ipcoredescriptionfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile.FileType", false]], "filetype (pyedaa.projectmodel.xilinx.vivado.ipcoreinstantiationfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile.FileType", false]], "filetype (pyedaa.projectmodel.xilinx.vivado.verilogsourcefile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile.FileType", false]], "filetype (pyedaa.projectmodel.xilinx.vivado.vhdlsourcefile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile.FileType", false]], "filetype (pyedaa.projectmodel.xilinx.vivado.vivadoprojectfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile.FileType", false]], "filetype (pyedaa.projectmodel.xilinx.vivado.xdcconstraintfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile.FileType", false]], "filetype (pyedaa.projectmodel.xmlfile property)": [[18, "pyEDAA.ProjectModel.XMLFile.FileType", false]], "filetypes (pyedaa.projectmodel.filetype attribute)": [[18, "pyEDAA.ProjectModel.FileType.FileTypes", false]], "ghdlwaveformfile (class in pyedaa.projectmodel.ghdl)": [[22, "pyEDAA.ProjectModel.GHDL.GHDLWaveformFile", false]], "hasclassattributes (pyedaa.projectmodel.filetype property)": [[18, "pyEDAA.ProjectModel.FileType.HasClassAttributes", false]], "hasmethodattributes (pyedaa.projectmodel.filetype property)": [[18, "pyEDAA.ProjectModel.FileType.HasMethodAttributes", false]], "hdlsourcefile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.HDLSourceFile", false]], "humanreadablecontent (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.HumanReadableContent", false]], "inicontent (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.INIContent", false]], "ipcoredescriptionfile (class in pyedaa.projectmodel.xilinx.vivado)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile", false]], "ipcoreinstantiationfile (class in pyedaa.projectmodel.xilinx.vivado)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile", false]], "iseprojectfile (class in pyedaa.projectmodel.xilinx.ise)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile", false]], "jsoncontent (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.JSONContent", false]], "keyvalueattribute (class in pyedaa.projectmodel.attributes)": [[21, "pyEDAA.ProjectModel.Attributes.KeyValueAttribute", false]], "logfile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.LogFile", false]], "lrm": [[4, "term-LRM", true]], "modelsiminifile (class in pyedaa.projectmodel.mentorgraphics.modelsim)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimINIFile", false]], "modelsiminifile (class in pyedaa.projectmodel.mentorgraphics.questasim)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile", false]], "modelsimprojectfile (class in pyedaa.projectmodel.mentorgraphics.modelsim)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimProjectFile", false]], "modelsimprojectfile (class in pyedaa.projectmodel.mentorgraphics.questasim)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile", false]], "module": [[18, "module-pyEDAA.ProjectModel", false], [19, "module-pyEDAA.ProjectModel.Altera", false], [20, "module-pyEDAA.ProjectModel.Altera.Quartus", false], [21, "module-pyEDAA.ProjectModel.Attributes", false], [22, "module-pyEDAA.ProjectModel.GHDL", false], [23, "module-pyEDAA.ProjectModel.Intel", false], [24, "module-pyEDAA.ProjectModel.Intel.QuartusPrime", false], [25, "module-pyEDAA.ProjectModel.MentorGraphics", false], [26, "module-pyEDAA.ProjectModel.MentorGraphics.ModelSim", false], [27, "module-pyEDAA.ProjectModel.MentorGraphics.QuestaSim", false], [28, "module-pyEDAA.ProjectModel.OSVVM", false], [29, "module-pyEDAA.ProjectModel.VHDL", false], [30, "module-pyEDAA.ProjectModel.Verilog", false], [31, "module-pyEDAA.ProjectModel.Xilinx", false], [32, "module-pyEDAA.ProjectModel.Xilinx.ISE", false], [33, "module-pyEDAA.ProjectModel.Xilinx.Vivado", false]], "mro() (pyedaa.projectmodel.filetype method)": [[18, "pyEDAA.ProjectModel.FileType.mro", false]], "name (pyedaa.projectmodel.design property)": [[18, "pyEDAA.ProjectModel.Design.Name", false]], "name (pyedaa.projectmodel.fileset property)": [[18, "pyEDAA.ProjectModel.FileSet.Name", false]], "name (pyedaa.projectmodel.project property)": [[18, "pyEDAA.ProjectModel.Project.Name", false]], "netlistfile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.NetlistFile", false]], "osvvmprojectfile (class in pyedaa.projectmodel.osvvm)": [[28, "pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile", false]], "parent (pyedaa.projectmodel.fileset property)": [[18, "pyEDAA.ProjectModel.FileSet.Parent", false]], "path (pyedaa.projectmodel.altera.quartus.quartusprojectfile property)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.QuartusProjectFile.Path", false]], "path (pyedaa.projectmodel.altera.quartus.sdcconstraintfile property)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.SDCConstraintFile.Path", false]], "path (pyedaa.projectmodel.cocotbpythonfile property)": [[18, "pyEDAA.ProjectModel.CocotbPythonFile.Path", false]], "path (pyedaa.projectmodel.constraintfile property)": [[18, "pyEDAA.ProjectModel.ConstraintFile.Path", false]], "path (pyedaa.projectmodel.cppsourcefile property)": [[18, "pyEDAA.ProjectModel.CppSourceFile.Path", false]], "path (pyedaa.projectmodel.csourcefile property)": [[18, "pyEDAA.ProjectModel.CSourceFile.Path", false]], "path (pyedaa.projectmodel.edifnetlistfile property)": [[18, "pyEDAA.ProjectModel.EDIFNetlistFile.Path", false]], "path (pyedaa.projectmodel.file property)": [[18, "pyEDAA.ProjectModel.File.Path", false]], "path (pyedaa.projectmodel.ghdl.ghdlwaveformfile property)": [[22, "pyEDAA.ProjectModel.GHDL.GHDLWaveformFile.Path", false]], "path (pyedaa.projectmodel.hdlsourcefile property)": [[18, "pyEDAA.ProjectModel.HDLSourceFile.Path", false]], "path (pyedaa.projectmodel.intel.quartusprime.quartusprojectfile property)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile.Path", false]], "path (pyedaa.projectmodel.intel.quartusprime.sdcconstraintfile property)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile.Path", false]], "path (pyedaa.projectmodel.logfile property)": [[18, "pyEDAA.ProjectModel.LogFile.Path", false]], "path (pyedaa.projectmodel.mentorgraphics.modelsim.modelsiminifile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimINIFile.Path", false]], "path (pyedaa.projectmodel.mentorgraphics.modelsim.modelsimprojectfile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimProjectFile.Path", false]], "path (pyedaa.projectmodel.mentorgraphics.modelsim.wavedofile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.WaveDoFile.Path", false]], "path (pyedaa.projectmodel.mentorgraphics.questasim.modelsiminifile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile.Path", false]], "path (pyedaa.projectmodel.mentorgraphics.questasim.modelsimprojectfile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile.Path", false]], "path (pyedaa.projectmodel.mentorgraphics.questasim.wavedofile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile.Path", false]], "path (pyedaa.projectmodel.netlistfile property)": [[18, "pyEDAA.ProjectModel.NetlistFile.Path", false]], "path (pyedaa.projectmodel.osvvm.osvvmprojectfile property)": [[28, "pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile.Path", false]], "path (pyedaa.projectmodel.projectfile property)": [[18, "pyEDAA.ProjectModel.ProjectFile.Path", false]], "path (pyedaa.projectmodel.pythonsourcefile property)": [[18, "pyEDAA.ProjectModel.PythonSourceFile.Path", false]], "path (pyedaa.projectmodel.rdlsourcefile property)": [[18, "pyEDAA.ProjectModel.RDLSourceFile.Path", false]], "path (pyedaa.projectmodel.settingfile property)": [[18, "pyEDAA.ProjectModel.SettingFile.Path", false]], "path (pyedaa.projectmodel.simulationanalysisfile property)": [[18, "pyEDAA.ProjectModel.SimulationAnalysisFile.Path", false]], "path (pyedaa.projectmodel.simulationelaborationfile property)": [[18, "pyEDAA.ProjectModel.SimulationElaborationFile.Path", false]], "path (pyedaa.projectmodel.simulationrunfile property)": [[18, "pyEDAA.ProjectModel.SimulationRunFile.Path", false]], "path (pyedaa.projectmodel.simulationstartfile property)": [[18, "pyEDAA.ProjectModel.SimulationStartFile.Path", false]], "path (pyedaa.projectmodel.sourcefile property)": [[18, "pyEDAA.ProjectModel.SourceFile.Path", false]], "path (pyedaa.projectmodel.systemrdlsourcefile property)": [[18, "pyEDAA.ProjectModel.SystemRDLSourceFile.Path", false]], "path (pyedaa.projectmodel.systemverilogbasefile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogBaseFile.Path", false]], "path (pyedaa.projectmodel.systemverilogheaderfile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogHeaderFile.Path", false]], "path (pyedaa.projectmodel.systemverilogsourcefile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogSourceFile.Path", false]], "path (pyedaa.projectmodel.tclsourcefile property)": [[18, "pyEDAA.ProjectModel.TCLSourceFile.Path", false]], "path (pyedaa.projectmodel.textfile property)": [[18, "pyEDAA.ProjectModel.TextFile.Path", false]], "path (pyedaa.projectmodel.verilog.valuechangedumpfile property)": [[30, "pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile.Path", false]], "path (pyedaa.projectmodel.verilogbasefile property)": [[18, "pyEDAA.ProjectModel.VerilogBaseFile.Path", false]], "path (pyedaa.projectmodel.verilogheaderfile property)": [[18, "pyEDAA.ProjectModel.VerilogHeaderFile.Path", false]], "path (pyedaa.projectmodel.verilogsourcefile property)": [[18, "pyEDAA.ProjectModel.VerilogSourceFile.Path", false]], "path (pyedaa.projectmodel.vhdlsourcefile property)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile.Path", false]], "path (pyedaa.projectmodel.waveformconfigfile property)": [[18, "pyEDAA.ProjectModel.WaveformConfigFile.Path", false]], "path (pyedaa.projectmodel.waveformdatabasefile property)": [[18, "pyEDAA.ProjectModel.WaveformDatabaseFile.Path", false]], "path (pyedaa.projectmodel.waveformexchangefile property)": [[18, "pyEDAA.ProjectModel.WaveformExchangeFile.Path", false]], "path (pyedaa.projectmodel.xilinx.ise.iseprojectfile property)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile.Path", false]], "path (pyedaa.projectmodel.xilinx.ise.ucfconstraintfile property)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile.Path", false]], "path (pyedaa.projectmodel.xilinx.vivado.constraintfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile.Path", false]], "path (pyedaa.projectmodel.xilinx.vivado.file property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.File.Path", false]], "path (pyedaa.projectmodel.xilinx.vivado.ipcoredescriptionfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile.Path", false]], "path (pyedaa.projectmodel.xilinx.vivado.ipcoreinstantiationfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile.Path", false]], "path (pyedaa.projectmodel.xilinx.vivado.verilogsourcefile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile.Path", false]], "path (pyedaa.projectmodel.xilinx.vivado.vhdlsourcefile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile.Path", false]], "path (pyedaa.projectmodel.xilinx.vivado.vivadoprojectfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile.Path", false]], "path (pyedaa.projectmodel.xilinx.vivado.xdcconstraintfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile.Path", false]], "path (pyedaa.projectmodel.xmlfile property)": [[18, "pyEDAA.ProjectModel.XMLFile.Path", false]], "project": [[4, "term-Project", true]], "project (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.Project", false]], "project (pyedaa.projectmodel.altera.quartus.quartusprojectfile property)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.QuartusProjectFile.Project", false]], "project (pyedaa.projectmodel.altera.quartus.sdcconstraintfile property)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.SDCConstraintFile.Project", false]], "project (pyedaa.projectmodel.cocotbpythonfile property)": [[18, "pyEDAA.ProjectModel.CocotbPythonFile.Project", false]], "project (pyedaa.projectmodel.constraintfile property)": [[18, "pyEDAA.ProjectModel.ConstraintFile.Project", false]], "project (pyedaa.projectmodel.cppsourcefile property)": [[18, "pyEDAA.ProjectModel.CppSourceFile.Project", false]], "project (pyedaa.projectmodel.csourcefile property)": [[18, "pyEDAA.ProjectModel.CSourceFile.Project", false]], "project (pyedaa.projectmodel.design property)": [[18, "pyEDAA.ProjectModel.Design.Project", false]], "project (pyedaa.projectmodel.edifnetlistfile property)": [[18, "pyEDAA.ProjectModel.EDIFNetlistFile.Project", false]], "project (pyedaa.projectmodel.file property)": [[18, "pyEDAA.ProjectModel.File.Project", false]], "project (pyedaa.projectmodel.fileset property)": [[18, "pyEDAA.ProjectModel.FileSet.Project", false]], "project (pyedaa.projectmodel.ghdl.ghdlwaveformfile property)": [[22, "pyEDAA.ProjectModel.GHDL.GHDLWaveformFile.Project", false]], "project (pyedaa.projectmodel.hdlsourcefile property)": [[18, "pyEDAA.ProjectModel.HDLSourceFile.Project", false]], "project (pyedaa.projectmodel.intel.quartusprime.quartusprojectfile property)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile.Project", false]], "project (pyedaa.projectmodel.intel.quartusprime.sdcconstraintfile property)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile.Project", false]], "project (pyedaa.projectmodel.logfile property)": [[18, "pyEDAA.ProjectModel.LogFile.Project", false]], "project (pyedaa.projectmodel.mentorgraphics.modelsim.modelsiminifile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimINIFile.Project", false]], "project (pyedaa.projectmodel.mentorgraphics.modelsim.modelsimprojectfile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimProjectFile.Project", false]], "project (pyedaa.projectmodel.mentorgraphics.modelsim.wavedofile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.WaveDoFile.Project", false]], "project (pyedaa.projectmodel.mentorgraphics.questasim.modelsiminifile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile.Project", false]], "project (pyedaa.projectmodel.mentorgraphics.questasim.modelsimprojectfile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile.Project", false]], "project (pyedaa.projectmodel.mentorgraphics.questasim.wavedofile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile.Project", false]], "project (pyedaa.projectmodel.netlistfile property)": [[18, "pyEDAA.ProjectModel.NetlistFile.Project", false]], "project (pyedaa.projectmodel.osvvm.osvvmprojectfile property)": [[28, "pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile.Project", false]], "project (pyedaa.projectmodel.projectfile property)": [[18, "pyEDAA.ProjectModel.ProjectFile.Project", false]], "project (pyedaa.projectmodel.pythonsourcefile property)": [[18, "pyEDAA.ProjectModel.PythonSourceFile.Project", false]], "project (pyedaa.projectmodel.rdlsourcefile property)": [[18, "pyEDAA.ProjectModel.RDLSourceFile.Project", false]], "project (pyedaa.projectmodel.settingfile property)": [[18, "pyEDAA.ProjectModel.SettingFile.Project", false]], "project (pyedaa.projectmodel.simulationanalysisfile property)": [[18, "pyEDAA.ProjectModel.SimulationAnalysisFile.Project", false]], "project (pyedaa.projectmodel.simulationelaborationfile property)": [[18, "pyEDAA.ProjectModel.SimulationElaborationFile.Project", false]], "project (pyedaa.projectmodel.simulationrunfile property)": [[18, "pyEDAA.ProjectModel.SimulationRunFile.Project", false]], "project (pyedaa.projectmodel.simulationstartfile property)": [[18, "pyEDAA.ProjectModel.SimulationStartFile.Project", false]], "project (pyedaa.projectmodel.sourcefile property)": [[18, "pyEDAA.ProjectModel.SourceFile.Project", false]], "project (pyedaa.projectmodel.systemrdlsourcefile property)": [[18, "pyEDAA.ProjectModel.SystemRDLSourceFile.Project", false]], "project (pyedaa.projectmodel.systemverilogbasefile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogBaseFile.Project", false]], "project (pyedaa.projectmodel.systemverilogheaderfile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogHeaderFile.Project", false]], "project (pyedaa.projectmodel.systemverilogsourcefile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogSourceFile.Project", false]], "project (pyedaa.projectmodel.tclsourcefile property)": [[18, "pyEDAA.ProjectModel.TCLSourceFile.Project", false]], "project (pyedaa.projectmodel.textfile property)": [[18, "pyEDAA.ProjectModel.TextFile.Project", false]], "project (pyedaa.projectmodel.verilog.valuechangedumpfile property)": [[30, "pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile.Project", false]], "project (pyedaa.projectmodel.verilogbasefile property)": [[18, "pyEDAA.ProjectModel.VerilogBaseFile.Project", false]], "project (pyedaa.projectmodel.verilogheaderfile property)": [[18, "pyEDAA.ProjectModel.VerilogHeaderFile.Project", false]], "project (pyedaa.projectmodel.verilogsourcefile property)": [[18, "pyEDAA.ProjectModel.VerilogSourceFile.Project", false]], "project (pyedaa.projectmodel.vhdllibrary property)": [[18, "pyEDAA.ProjectModel.VHDLLibrary.Project", false]], "project (pyedaa.projectmodel.vhdlsourcefile property)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile.Project", false]], "project (pyedaa.projectmodel.waveformconfigfile property)": [[18, "pyEDAA.ProjectModel.WaveformConfigFile.Project", false]], "project (pyedaa.projectmodel.waveformdatabasefile property)": [[18, "pyEDAA.ProjectModel.WaveformDatabaseFile.Project", false]], "project (pyedaa.projectmodel.waveformexchangefile property)": [[18, "pyEDAA.ProjectModel.WaveformExchangeFile.Project", false]], "project (pyedaa.projectmodel.xilinx.ise.iseprojectfile property)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile.Project", false]], "project (pyedaa.projectmodel.xilinx.ise.ucfconstraintfile property)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile.Project", false]], "project (pyedaa.projectmodel.xilinx.vivado.constraintfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile.Project", false]], "project (pyedaa.projectmodel.xilinx.vivado.file property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.File.Project", false]], "project (pyedaa.projectmodel.xilinx.vivado.ipcoredescriptionfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile.Project", false]], "project (pyedaa.projectmodel.xilinx.vivado.ipcoreinstantiationfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile.Project", false]], "project (pyedaa.projectmodel.xilinx.vivado.verilogsourcefile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile.Project", false]], "project (pyedaa.projectmodel.xilinx.vivado.vhdlsourcefile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile.Project", false]], "project (pyedaa.projectmodel.xilinx.vivado.vivadoprojectfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile.Project", false]], "project (pyedaa.projectmodel.xilinx.vivado.xdcconstraintfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile.Project", false]], "project (pyedaa.projectmodel.xmlfile property)": [[18, "pyEDAA.ProjectModel.XMLFile.Project", false]], "projectfile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.ProjectFile", false]], "pyedaa.projectmodel": [[18, "module-pyEDAA.ProjectModel", false]], "pyedaa.projectmodel.altera": [[19, "module-pyEDAA.ProjectModel.Altera", false]], "pyedaa.projectmodel.altera.quartus": [[20, "module-pyEDAA.ProjectModel.Altera.Quartus", false]], "pyedaa.projectmodel.attributes": [[21, "module-pyEDAA.ProjectModel.Attributes", false]], "pyedaa.projectmodel.ghdl": [[22, "module-pyEDAA.ProjectModel.GHDL", false]], "pyedaa.projectmodel.intel": [[23, "module-pyEDAA.ProjectModel.Intel", false]], "pyedaa.projectmodel.intel.quartusprime": [[24, "module-pyEDAA.ProjectModel.Intel.QuartusPrime", false]], "pyedaa.projectmodel.mentorgraphics": [[25, "module-pyEDAA.ProjectModel.MentorGraphics", false]], "pyedaa.projectmodel.mentorgraphics.modelsim": [[26, "module-pyEDAA.ProjectModel.MentorGraphics.ModelSim", false]], "pyedaa.projectmodel.mentorgraphics.questasim": [[27, "module-pyEDAA.ProjectModel.MentorGraphics.QuestaSim", false]], "pyedaa.projectmodel.osvvm": [[28, "module-pyEDAA.ProjectModel.OSVVM", false]], "pyedaa.projectmodel.verilog": [[30, "module-pyEDAA.ProjectModel.Verilog", false]], "pyedaa.projectmodel.vhdl": [[29, "module-pyEDAA.ProjectModel.VHDL", false]], "pyedaa.projectmodel.xilinx": [[31, "module-pyEDAA.ProjectModel.Xilinx", false]], "pyedaa.projectmodel.xilinx.ise": [[32, "module-pyEDAA.ProjectModel.Xilinx.ISE", false]], "pyedaa.projectmodel.xilinx.vivado": [[33, "module-pyEDAA.ProjectModel.Xilinx.Vivado", false]], "pythoncontent (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.PythonContent", false]], "pythonsourcefile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.PythonSourceFile", false]], "quartusprojectfile (class in pyedaa.projectmodel.altera.quartus)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.QuartusProjectFile", false]], "quartusprojectfile (class in pyedaa.projectmodel.intel.quartusprime)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile", false]], "rdlsourcefile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.RDLSourceFile", false]], "resolvedpath (pyedaa.projectmodel.altera.quartus.quartusprojectfile property)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.QuartusProjectFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.altera.quartus.sdcconstraintfile property)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.SDCConstraintFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.cocotbpythonfile property)": [[18, "pyEDAA.ProjectModel.CocotbPythonFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.constraintfile property)": [[18, "pyEDAA.ProjectModel.ConstraintFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.cppsourcefile property)": [[18, "pyEDAA.ProjectModel.CppSourceFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.csourcefile property)": [[18, "pyEDAA.ProjectModel.CSourceFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.design property)": [[18, "pyEDAA.ProjectModel.Design.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.edifnetlistfile property)": [[18, "pyEDAA.ProjectModel.EDIFNetlistFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.file property)": [[18, "pyEDAA.ProjectModel.File.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.fileset property)": [[18, "pyEDAA.ProjectModel.FileSet.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.ghdl.ghdlwaveformfile property)": [[22, "pyEDAA.ProjectModel.GHDL.GHDLWaveformFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.hdlsourcefile property)": [[18, "pyEDAA.ProjectModel.HDLSourceFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.intel.quartusprime.quartusprojectfile property)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.intel.quartusprime.sdcconstraintfile property)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.logfile property)": [[18, "pyEDAA.ProjectModel.LogFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.mentorgraphics.modelsim.modelsiminifile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimINIFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.mentorgraphics.modelsim.modelsimprojectfile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimProjectFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.mentorgraphics.modelsim.wavedofile property)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.WaveDoFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.mentorgraphics.questasim.modelsiminifile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.mentorgraphics.questasim.modelsimprojectfile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.mentorgraphics.questasim.wavedofile property)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.netlistfile property)": [[18, "pyEDAA.ProjectModel.NetlistFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.osvvm.osvvmprojectfile property)": [[28, "pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.project property)": [[18, "pyEDAA.ProjectModel.Project.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.projectfile property)": [[18, "pyEDAA.ProjectModel.ProjectFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.pythonsourcefile property)": [[18, "pyEDAA.ProjectModel.PythonSourceFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.rdlsourcefile property)": [[18, "pyEDAA.ProjectModel.RDLSourceFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.settingfile property)": [[18, "pyEDAA.ProjectModel.SettingFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.simulationanalysisfile property)": [[18, "pyEDAA.ProjectModel.SimulationAnalysisFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.simulationelaborationfile property)": [[18, "pyEDAA.ProjectModel.SimulationElaborationFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.simulationrunfile property)": [[18, "pyEDAA.ProjectModel.SimulationRunFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.simulationstartfile property)": [[18, "pyEDAA.ProjectModel.SimulationStartFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.sourcefile property)": [[18, "pyEDAA.ProjectModel.SourceFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.systemrdlsourcefile property)": [[18, "pyEDAA.ProjectModel.SystemRDLSourceFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.systemverilogbasefile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogBaseFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.systemverilogheaderfile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogHeaderFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.systemverilogsourcefile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogSourceFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.tclsourcefile property)": [[18, "pyEDAA.ProjectModel.TCLSourceFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.textfile property)": [[18, "pyEDAA.ProjectModel.TextFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.verilog.valuechangedumpfile property)": [[30, "pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.verilogbasefile property)": [[18, "pyEDAA.ProjectModel.VerilogBaseFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.verilogheaderfile property)": [[18, "pyEDAA.ProjectModel.VerilogHeaderFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.verilogsourcefile property)": [[18, "pyEDAA.ProjectModel.VerilogSourceFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.vhdlsourcefile property)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.waveformconfigfile property)": [[18, "pyEDAA.ProjectModel.WaveformConfigFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.waveformdatabasefile property)": [[18, "pyEDAA.ProjectModel.WaveformDatabaseFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.waveformexchangefile property)": [[18, "pyEDAA.ProjectModel.WaveformExchangeFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.xilinx.ise.iseprojectfile property)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.xilinx.ise.ucfconstraintfile property)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.xilinx.vivado.constraintfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.xilinx.vivado.file property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.File.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.xilinx.vivado.ipcoredescriptionfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.xilinx.vivado.ipcoreinstantiationfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.xilinx.vivado.verilogsourcefile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.xilinx.vivado.vhdlsourcefile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.xilinx.vivado.vivadoprojectfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.xilinx.vivado.xdcconstraintfile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile.ResolvedPath", false]], "resolvedpath (pyedaa.projectmodel.xmlfile property)": [[18, "pyEDAA.ProjectModel.XMLFile.ResolvedPath", false]], "rootdirectory (pyedaa.projectmodel.project property)": [[18, "pyEDAA.ProjectModel.Project.RootDirectory", false]], "sdcconstraintfile (class in pyedaa.projectmodel.altera.quartus)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.SDCConstraintFile", false]], "sdcconstraintfile (class in pyedaa.projectmodel.intel.quartusprime)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile", false]], "sdccontent (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.SDCContent", false]], "settingfile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.SettingFile", false]], "simulationanalysisfile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.SimulationAnalysisFile", false]], "simulationelaborationfile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.SimulationElaborationFile", false]], "simulationrunfile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.SimulationRunFile", false]], "simulationstartfile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.SimulationStartFile", false]], "sourcefile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.SourceFile", false]], "svversion (pyedaa.projectmodel.fileset property)": [[18, "pyEDAA.ProjectModel.FileSet.SVVersion", false]], "svversion (pyedaa.projectmodel.systemverilogheaderfile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogHeaderFile.SVVersion", false]], "svversion (pyedaa.projectmodel.systemverilogsourcefile property)": [[18, "pyEDAA.ProjectModel.SystemVerilogSourceFile.SVVersion", false]], "systemrdlsourcefile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.SystemRDLSourceFile", false]], "systemrdlversion (pyedaa.projectmodel.systemrdlsourcefile property)": [[18, "pyEDAA.ProjectModel.SystemRDLSourceFile.SystemRDLVersion", false]], "systemverilogbasefile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.SystemVerilogBaseFile", false]], "systemverilogheaderfile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.SystemVerilogHeaderFile", false]], "systemverilogsourcefile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.SystemVerilogSourceFile", false]], "tclcontent (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.TCLContent", false]], "tclsourcefile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.TCLSourceFile", false]], "textfile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.TextFile", false]], "tomlcontent (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.TOMLContent", false]], "toplevel (pyedaa.projectmodel.design property)": [[18, "pyEDAA.ProjectModel.Design.TopLevel", false]], "toplevel (pyedaa.projectmodel.fileset property)": [[18, "pyEDAA.ProjectModel.FileSet.TopLevel", false]], "totalfilecount (pyedaa.projectmodel.fileset property)": [[18, "pyEDAA.ProjectModel.FileSet.TotalFileCount", false]], "totalfilesetcount (pyedaa.projectmodel.design property)": [[18, "pyEDAA.ProjectModel.Design.TotalFileSetCount", false]], "totalfilesetcount (pyedaa.projectmodel.fileset property)": [[18, "pyEDAA.ProjectModel.FileSet.TotalFileSetCount", false]], "ucfconstraintfile (class in pyedaa.projectmodel.xilinx.ise)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile", false]], "usedinattribute (class in pyedaa.projectmodel.xilinx.vivado)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.UsedInAttribute", false]], "validate() (pyedaa.projectmodel.altera.quartus.quartusprojectfile method)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.QuartusProjectFile.Validate", false]], "validate() (pyedaa.projectmodel.altera.quartus.sdcconstraintfile method)": [[20, "pyEDAA.ProjectModel.Altera.Quartus.SDCConstraintFile.Validate", false]], "validate() (pyedaa.projectmodel.cocotbpythonfile method)": [[18, "pyEDAA.ProjectModel.CocotbPythonFile.Validate", false]], "validate() (pyedaa.projectmodel.constraintfile method)": [[18, "pyEDAA.ProjectModel.ConstraintFile.Validate", false]], "validate() (pyedaa.projectmodel.cppsourcefile method)": [[18, "pyEDAA.ProjectModel.CppSourceFile.Validate", false]], "validate() (pyedaa.projectmodel.csourcefile method)": [[18, "pyEDAA.ProjectModel.CSourceFile.Validate", false]], "validate() (pyedaa.projectmodel.design method)": [[18, "pyEDAA.ProjectModel.Design.Validate", false]], "validate() (pyedaa.projectmodel.edifnetlistfile method)": [[18, "pyEDAA.ProjectModel.EDIFNetlistFile.Validate", false]], "validate() (pyedaa.projectmodel.file method)": [[18, "pyEDAA.ProjectModel.File.Validate", false]], "validate() (pyedaa.projectmodel.fileset method)": [[18, "pyEDAA.ProjectModel.FileSet.Validate", false]], "validate() (pyedaa.projectmodel.ghdl.ghdlwaveformfile method)": [[22, "pyEDAA.ProjectModel.GHDL.GHDLWaveformFile.Validate", false]], "validate() (pyedaa.projectmodel.hdlsourcefile method)": [[18, "pyEDAA.ProjectModel.HDLSourceFile.Validate", false]], "validate() (pyedaa.projectmodel.intel.quartusprime.quartusprojectfile method)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile.Validate", false]], "validate() (pyedaa.projectmodel.intel.quartusprime.sdcconstraintfile method)": [[24, "pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile.Validate", false]], "validate() (pyedaa.projectmodel.logfile method)": [[18, "pyEDAA.ProjectModel.LogFile.Validate", false]], "validate() (pyedaa.projectmodel.mentorgraphics.modelsim.modelsiminifile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimINIFile.Validate", false]], "validate() (pyedaa.projectmodel.mentorgraphics.modelsim.modelsimprojectfile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimProjectFile.Validate", false]], "validate() (pyedaa.projectmodel.mentorgraphics.modelsim.wavedofile method)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.WaveDoFile.Validate", false]], "validate() (pyedaa.projectmodel.mentorgraphics.questasim.modelsiminifile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile.Validate", false]], "validate() (pyedaa.projectmodel.mentorgraphics.questasim.modelsimprojectfile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile.Validate", false]], "validate() (pyedaa.projectmodel.mentorgraphics.questasim.wavedofile method)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile.Validate", false]], "validate() (pyedaa.projectmodel.netlistfile method)": [[18, "pyEDAA.ProjectModel.NetlistFile.Validate", false]], "validate() (pyedaa.projectmodel.osvvm.osvvmprojectfile method)": [[28, "pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile.Validate", false]], "validate() (pyedaa.projectmodel.project method)": [[18, "pyEDAA.ProjectModel.Project.Validate", false]], "validate() (pyedaa.projectmodel.projectfile method)": [[18, "pyEDAA.ProjectModel.ProjectFile.Validate", false]], "validate() (pyedaa.projectmodel.pythonsourcefile method)": [[18, "pyEDAA.ProjectModel.PythonSourceFile.Validate", false]], "validate() (pyedaa.projectmodel.rdlsourcefile method)": [[18, "pyEDAA.ProjectModel.RDLSourceFile.Validate", false]], "validate() (pyedaa.projectmodel.settingfile method)": [[18, "pyEDAA.ProjectModel.SettingFile.Validate", false]], "validate() (pyedaa.projectmodel.simulationanalysisfile method)": [[18, "pyEDAA.ProjectModel.SimulationAnalysisFile.Validate", false]], "validate() (pyedaa.projectmodel.simulationelaborationfile method)": [[18, "pyEDAA.ProjectModel.SimulationElaborationFile.Validate", false]], "validate() (pyedaa.projectmodel.simulationrunfile method)": [[18, "pyEDAA.ProjectModel.SimulationRunFile.Validate", false]], "validate() (pyedaa.projectmodel.simulationstartfile method)": [[18, "pyEDAA.ProjectModel.SimulationStartFile.Validate", false]], "validate() (pyedaa.projectmodel.sourcefile method)": [[18, "pyEDAA.ProjectModel.SourceFile.Validate", false]], "validate() (pyedaa.projectmodel.systemrdlsourcefile method)": [[18, "pyEDAA.ProjectModel.SystemRDLSourceFile.Validate", false]], "validate() (pyedaa.projectmodel.systemverilogbasefile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogBaseFile.Validate", false]], "validate() (pyedaa.projectmodel.systemverilogheaderfile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogHeaderFile.Validate", false]], "validate() (pyedaa.projectmodel.systemverilogsourcefile method)": [[18, "pyEDAA.ProjectModel.SystemVerilogSourceFile.Validate", false]], "validate() (pyedaa.projectmodel.tclsourcefile method)": [[18, "pyEDAA.ProjectModel.TCLSourceFile.Validate", false]], "validate() (pyedaa.projectmodel.textfile method)": [[18, "pyEDAA.ProjectModel.TextFile.Validate", false]], "validate() (pyedaa.projectmodel.verilog.valuechangedumpfile method)": [[30, "pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile.Validate", false]], "validate() (pyedaa.projectmodel.verilogbasefile method)": [[18, "pyEDAA.ProjectModel.VerilogBaseFile.Validate", false]], "validate() (pyedaa.projectmodel.verilogheaderfile method)": [[18, "pyEDAA.ProjectModel.VerilogHeaderFile.Validate", false]], "validate() (pyedaa.projectmodel.verilogsourcefile method)": [[18, "pyEDAA.ProjectModel.VerilogSourceFile.Validate", false]], "validate() (pyedaa.projectmodel.vhdlsourcefile method)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile.Validate", false]], "validate() (pyedaa.projectmodel.waveformconfigfile method)": [[18, "pyEDAA.ProjectModel.WaveformConfigFile.Validate", false]], "validate() (pyedaa.projectmodel.waveformdatabasefile method)": [[18, "pyEDAA.ProjectModel.WaveformDatabaseFile.Validate", false]], "validate() (pyedaa.projectmodel.waveformexchangefile method)": [[18, "pyEDAA.ProjectModel.WaveformExchangeFile.Validate", false]], "validate() (pyedaa.projectmodel.xilinx.ise.iseprojectfile method)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile.Validate", false]], "validate() (pyedaa.projectmodel.xilinx.ise.ucfconstraintfile method)": [[32, "pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile.Validate", false]], "validate() (pyedaa.projectmodel.xilinx.vivado.constraintfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile.Validate", false]], "validate() (pyedaa.projectmodel.xilinx.vivado.file method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.File.Validate", false]], "validate() (pyedaa.projectmodel.xilinx.vivado.ipcoredescriptionfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile.Validate", false]], "validate() (pyedaa.projectmodel.xilinx.vivado.ipcoreinstantiationfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile.Validate", false]], "validate() (pyedaa.projectmodel.xilinx.vivado.verilogsourcefile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile.Validate", false]], "validate() (pyedaa.projectmodel.xilinx.vivado.vhdlsourcefile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile.Validate", false]], "validate() (pyedaa.projectmodel.xilinx.vivado.vivadoprojectfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile.Validate", false]], "validate() (pyedaa.projectmodel.xilinx.vivado.xdcconstraintfile method)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile.Validate", false]], "validate() (pyedaa.projectmodel.xmlfile method)": [[18, "pyEDAA.ProjectModel.XMLFile.Validate", false]], "valuechangedumpfile (class in pyedaa.projectmodel.verilog)": [[30, "pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile", false]], "verilogbasefile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.VerilogBaseFile", false]], "verilogheaderfile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.VerilogHeaderFile", false]], "verilogsourcefile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.VerilogSourceFile", false]], "verilogsourcefile (class in pyedaa.projectmodel.xilinx.vivado)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile", false]], "verilogversion (pyedaa.projectmodel.fileset property)": [[18, "pyEDAA.ProjectModel.FileSet.VerilogVersion", false]], "verilogversion (pyedaa.projectmodel.verilogheaderfile property)": [[18, "pyEDAA.ProjectModel.VerilogHeaderFile.VerilogVersion", false]], "verilogversion (pyedaa.projectmodel.verilogsourcefile property)": [[18, "pyEDAA.ProjectModel.VerilogSourceFile.VerilogVersion", false]], "verilogversion (pyedaa.projectmodel.xilinx.vivado.verilogsourcefile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile.VerilogVersion", false]], "vhdllibrary": [[4, "term-VHDLLibrary", true]], "vhdllibrary (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.VHDLLibrary", false]], "vhdllibrary (pyedaa.projectmodel.fileset property)": [[18, "pyEDAA.ProjectModel.FileSet.VHDLLibrary", false]], "vhdllibrary (pyedaa.projectmodel.vhdlsourcefile property)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile.VHDLLibrary", false]], "vhdllibrary (pyedaa.projectmodel.xilinx.vivado.vhdlsourcefile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile.VHDLLibrary", false]], "vhdlsourcefile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile", false]], "vhdlsourcefile (class in pyedaa.projectmodel.xilinx.vivado)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile", false]], "vhdlversion (pyedaa.projectmodel.fileset property)": [[18, "pyEDAA.ProjectModel.FileSet.VHDLVersion", false]], "vhdlversion (pyedaa.projectmodel.vhdllibrary property)": [[18, "pyEDAA.ProjectModel.VHDLLibrary.VHDLVersion", false]], "vhdlversion (pyedaa.projectmodel.vhdlsourcefile property)": [[18, "pyEDAA.ProjectModel.VHDLSourceFile.VHDLVersion", false]], "vhdlversion (pyedaa.projectmodel.xilinx.vivado.vhdlsourcefile property)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile.VHDLVersion", false]], "vivadoprojectfile (class in pyedaa.projectmodel.xilinx.vivado)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile", false]], "wavedofile (class in pyedaa.projectmodel.mentorgraphics.modelsim)": [[26, "pyEDAA.ProjectModel.MentorGraphics.ModelSim.WaveDoFile", false]], "wavedofile (class in pyedaa.projectmodel.mentorgraphics.questasim)": [[27, "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile", false]], "waveformconfigfile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.WaveformConfigFile", false]], "waveformdatabasefile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.WaveformDatabaseFile", false]], "waveformexchangefile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.WaveformExchangeFile", false]], "xdcconstraintfile (class in pyedaa.projectmodel.xilinx.vivado)": [[33, "pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile", false]], "xmlcontent (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.XMLContent", false]], "xmlfile (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.XMLFile", false]], "yamlcontent (class in pyedaa.projectmodel)": [[18, "pyEDAA.ProjectModel.YAMLContent", false]]}, "objects": {"pyEDAA": [[18, 0, 0, "-", "ProjectModel"]], "pyEDAA.ProjectModel": [[19, 0, 0, "-", "Altera"], [18, 1, 1, "", "Attribute"], [21, 0, 0, "-", "Attributes"], [18, 1, 1, "", "CSourceFile"], [18, 1, 1, "", "CocotbPythonFile"], [18, 1, 1, "", "ConstraintFile"], [18, 1, 1, "", "CppSourceFile"], [18, 1, 1, "", "Design"], [18, 1, 1, "", "EDIFNetlistFile"], [18, 1, 1, "", "File"], [18, 1, 1, "", "FileSet"], [18, 1, 1, "", "FileType"], [22, 0, 0, "-", "GHDL"], [18, 1, 1, "", "HDLSourceFile"], [18, 1, 1, "", "HumanReadableContent"], [18, 1, 1, "", "INIContent"], [23, 0, 0, "-", "Intel"], [18, 1, 1, "", "JSONContent"], [18, 1, 1, "", "LogFile"], [25, 0, 0, "-", "MentorGraphics"], [18, 1, 1, "", "NetlistFile"], [28, 0, 0, "-", "OSVVM"], [18, 1, 1, "", "Project"], [18, 1, 1, "", "ProjectFile"], [18, 1, 1, "", "PythonContent"], [18, 1, 1, "", "PythonSourceFile"], [18, 1, 1, "", "RDLSourceFile"], [18, 1, 1, "", "SDCContent"], [18, 1, 1, "", "SettingFile"], [18, 1, 1, "", "SimulationAnalysisFile"], [18, 1, 1, "", "SimulationElaborationFile"], [18, 1, 1, "", "SimulationRunFile"], [18, 1, 1, "", "SimulationStartFile"], [18, 1, 1, "", "SourceFile"], [18, 1, 1, "", "SystemRDLSourceFile"], [18, 1, 1, "", "SystemVerilogBaseFile"], [18, 1, 1, "", "SystemVerilogHeaderFile"], [18, 1, 1, "", "SystemVerilogSourceFile"], [18, 1, 1, "", "TCLContent"], [18, 1, 1, "", "TCLSourceFile"], [18, 1, 1, "", "TOMLContent"], [18, 1, 1, "", "TextFile"], [29, 0, 0, "-", "VHDL"], [18, 1, 1, "", "VHDLLibrary"], [18, 1, 1, "", "VHDLSourceFile"], [30, 0, 0, "-", "Verilog"], [18, 1, 1, "", "VerilogBaseFile"], [18, 1, 1, "", "VerilogHeaderFile"], [18, 1, 1, "", "VerilogSourceFile"], [18, 1, 1, "", "WaveformConfigFile"], [18, 1, 1, "", "WaveformDatabaseFile"], [18, 1, 1, "", "WaveformExchangeFile"], [18, 1, 1, "", "XMLContent"], [18, 1, 1, "", "XMLFile"], [31, 0, 0, "-", "Xilinx"], [18, 1, 1, "", "YAMLContent"]], "pyEDAA.ProjectModel.Altera": [[20, 0, 0, "-", "Quartus"]], "pyEDAA.ProjectModel.Altera.Quartus": [[20, 1, 1, "", "QuartusProjectFile"], [20, 1, 1, "", "SDCConstraintFile"]], "pyEDAA.ProjectModel.Altera.Quartus.QuartusProjectFile": [[20, 2, 1, "", "Any"], [20, 3, 1, "", "Design"], [20, 3, 1, "", "FileSet"], [20, 3, 1, "", "FileType"], [20, 3, 1, "", "Path"], [20, 3, 1, "", "Project"], [20, 3, 1, "", "ResolvedPath"], [20, 4, 1, "", "Validate"], [20, 4, 1, "", "__delitem__"], [20, 4, 1, "", "__getitem__"], [20, 4, 1, "", "__init__"], [20, 4, 1, "", "__len__"], [20, 4, 1, "", "__setitem__"], [20, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.Altera.Quartus.SDCConstraintFile": [[20, 2, 1, "", "Any"], [20, 3, 1, "", "Design"], [20, 3, 1, "", "FileSet"], [20, 3, 1, "", "FileType"], [20, 3, 1, "", "Path"], [20, 3, 1, "", "Project"], [20, 3, 1, "", "ResolvedPath"], [20, 4, 1, "", "Validate"], [20, 4, 1, "", "__delitem__"], [20, 4, 1, "", "__getitem__"], [20, 4, 1, "", "__init__"], [20, 4, 1, "", "__len__"], [20, 4, 1, "", "__setitem__"], [20, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.Attributes": [[21, 1, 1, "", "KeyValueAttribute"]], "pyEDAA.ProjectModel.Attributes.KeyValueAttribute": [[21, 4, 1, "", "__init__"]], "pyEDAA.ProjectModel.CSourceFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.CocotbPythonFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.ConstraintFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.CppSourceFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.Design": [[18, 3, 1, "", "DefaultFileSet"], [18, 3, 1, "", "Directory"], [18, 3, 1, "", "FileSetCount"], [18, 3, 1, "", "FileSets"], [18, 4, 1, "", "Files"], [18, 3, 1, "", "Name"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 3, 1, "", "TopLevel"], [18, 3, 1, "", "TotalFileSetCount"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.EDIFNetlistFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.File": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.FileSet": [[18, 4, 1, "", "AddFile"], [18, 4, 1, "", "AddFileSet"], [18, 4, 1, "", "AddFileSets"], [18, 4, 1, "", "AddFiles"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "Directory"], [18, 3, 1, "", "FileCount"], [18, 3, 1, "", "FileSetCount"], [18, 3, 1, "", "FileSets"], [18, 4, 1, "", "Files"], [18, 3, 1, "", "Name"], [18, 3, 1, "", "Parent"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 3, 1, "", "SVVersion"], [18, 3, 1, "", "TopLevel"], [18, 3, 1, "", "TotalFileCount"], [18, 3, 1, "", "TotalFileSetCount"], [18, 3, 1, "", "VHDLLibrary"], [18, 3, 1, "", "VHDLVersion"], [18, 4, 1, "", "Validate"], [18, 3, 1, "", "VerilogVersion"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.FileType": [[18, 2, 1, "", "FileTypes"], [18, 3, 1, "", "HasClassAttributes"], [18, 3, 1, "", "HasMethodAttributes"], [18, 2, 1, "", "__base__"], [18, 4, 1, "", "__call__"], [18, 4, 1, "", "__delattr__"], [18, 4, 1, "", "__dir__"], [18, 4, 1, "", "__getattribute__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__instancecheck__"], [18, 4, 1, "", "__new__"], [18, 4, 1, "", "__or__"], [18, 4, 1, "", "__prepare__"], [18, 4, 1, "", "__repr__"], [18, 4, 1, "", "__ror__"], [18, 4, 1, "", "__setattr__"], [18, 4, 1, "", "__sizeof__"], [18, 4, 1, "", "__subclasscheck__"], [18, 4, 1, "", "__subclasses__"], [18, 4, 1, "", "_checkForAbstractMethods"], [18, 4, 1, "", "_iterateBaseClassPaths"], [18, 4, 1, "", "_wrapNewMethodIfAbstract"], [18, 4, 1, "", "_wrapNewMethodIfSingleton"], [18, 4, 1, "", "mro"]], "pyEDAA.ProjectModel.GHDL": [[22, 1, 1, "", "GHDLWaveformFile"]], "pyEDAA.ProjectModel.GHDL.GHDLWaveformFile": [[22, 2, 1, "", "Any"], [22, 3, 1, "", "Design"], [22, 3, 1, "", "FileSet"], [22, 3, 1, "", "FileType"], [22, 3, 1, "", "Path"], [22, 3, 1, "", "Project"], [22, 3, 1, "", "ResolvedPath"], [22, 4, 1, "", "Validate"], [22, 4, 1, "", "__delitem__"], [22, 4, 1, "", "__getitem__"], [22, 4, 1, "", "__init__"], [22, 4, 1, "", "__len__"], [22, 4, 1, "", "__setitem__"], [22, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.HDLSourceFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.Intel": [[24, 0, 0, "-", "QuartusPrime"]], "pyEDAA.ProjectModel.Intel.QuartusPrime": [[24, 1, 1, "", "QuartusProjectFile"], [24, 1, 1, "", "SDCConstraintFile"]], "pyEDAA.ProjectModel.Intel.QuartusPrime.QuartusProjectFile": [[24, 2, 1, "", "Any"], [24, 3, 1, "", "Design"], [24, 3, 1, "", "FileSet"], [24, 3, 1, "", "FileType"], [24, 3, 1, "", "Path"], [24, 3, 1, "", "Project"], [24, 3, 1, "", "ResolvedPath"], [24, 4, 1, "", "Validate"], [24, 4, 1, "", "__delitem__"], [24, 4, 1, "", "__getitem__"], [24, 4, 1, "", "__init__"], [24, 4, 1, "", "__len__"], [24, 4, 1, "", "__setitem__"], [24, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.Intel.QuartusPrime.SDCConstraintFile": [[24, 2, 1, "", "Any"], [24, 3, 1, "", "Design"], [24, 3, 1, "", "FileSet"], [24, 3, 1, "", "FileType"], [24, 3, 1, "", "Path"], [24, 3, 1, "", "Project"], [24, 3, 1, "", "ResolvedPath"], [24, 4, 1, "", "Validate"], [24, 4, 1, "", "__delitem__"], [24, 4, 1, "", "__getitem__"], [24, 4, 1, "", "__init__"], [24, 4, 1, "", "__len__"], [24, 4, 1, "", "__setitem__"], [24, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.LogFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.MentorGraphics": [[26, 0, 0, "-", "ModelSim"], [27, 0, 0, "-", "QuestaSim"]], "pyEDAA.ProjectModel.MentorGraphics.ModelSim": [[26, 1, 1, "", "ModelSimINIFile"], [26, 1, 1, "", "ModelSimProjectFile"], [26, 1, 1, "", "WaveDoFile"]], "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimINIFile": [[26, 2, 1, "", "Any"], [26, 3, 1, "", "Design"], [26, 3, 1, "", "FileSet"], [26, 3, 1, "", "FileType"], [26, 3, 1, "", "Path"], [26, 3, 1, "", "Project"], [26, 3, 1, "", "ResolvedPath"], [26, 4, 1, "", "Validate"], [26, 4, 1, "", "__delitem__"], [26, 4, 1, "", "__getitem__"], [26, 4, 1, "", "__init__"], [26, 4, 1, "", "__len__"], [26, 4, 1, "", "__setitem__"], [26, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.MentorGraphics.ModelSim.ModelSimProjectFile": [[26, 2, 1, "", "Any"], [26, 3, 1, "", "Design"], [26, 3, 1, "", "FileSet"], [26, 3, 1, "", "FileType"], [26, 3, 1, "", "Path"], [26, 3, 1, "", "Project"], [26, 3, 1, "", "ResolvedPath"], [26, 4, 1, "", "Validate"], [26, 4, 1, "", "__delitem__"], [26, 4, 1, "", "__getitem__"], [26, 4, 1, "", "__init__"], [26, 4, 1, "", "__len__"], [26, 4, 1, "", "__setitem__"], [26, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.MentorGraphics.ModelSim.WaveDoFile": [[26, 2, 1, "", "Any"], [26, 3, 1, "", "Design"], [26, 3, 1, "", "FileSet"], [26, 3, 1, "", "FileType"], [26, 3, 1, "", "Path"], [26, 3, 1, "", "Project"], [26, 3, 1, "", "ResolvedPath"], [26, 4, 1, "", "Validate"], [26, 4, 1, "", "__delitem__"], [26, 4, 1, "", "__getitem__"], [26, 4, 1, "", "__init__"], [26, 4, 1, "", "__len__"], [26, 4, 1, "", "__setitem__"], [26, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.MentorGraphics.QuestaSim": [[27, 1, 1, "", "ModelSimINIFile"], [27, 1, 1, "", "ModelSimProjectFile"], [27, 1, 1, "", "WaveDoFile"]], "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimINIFile": [[27, 2, 1, "", "Any"], [27, 3, 1, "", "Design"], [27, 3, 1, "", "FileSet"], [27, 3, 1, "", "FileType"], [27, 3, 1, "", "Path"], [27, 3, 1, "", "Project"], [27, 3, 1, "", "ResolvedPath"], [27, 4, 1, "", "Validate"], [27, 4, 1, "", "__delitem__"], [27, 4, 1, "", "__getitem__"], [27, 4, 1, "", "__init__"], [27, 4, 1, "", "__len__"], [27, 4, 1, "", "__setitem__"], [27, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.ModelSimProjectFile": [[27, 2, 1, "", "Any"], [27, 3, 1, "", "Design"], [27, 3, 1, "", "FileSet"], [27, 3, 1, "", "FileType"], [27, 3, 1, "", "Path"], [27, 3, 1, "", "Project"], [27, 3, 1, "", "ResolvedPath"], [27, 4, 1, "", "Validate"], [27, 4, 1, "", "__delitem__"], [27, 4, 1, "", "__getitem__"], [27, 4, 1, "", "__init__"], [27, 4, 1, "", "__len__"], [27, 4, 1, "", "__setitem__"], [27, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.MentorGraphics.QuestaSim.WaveDoFile": [[27, 2, 1, "", "Any"], [27, 3, 1, "", "Design"], [27, 3, 1, "", "FileSet"], [27, 3, 1, "", "FileType"], [27, 3, 1, "", "Path"], [27, 3, 1, "", "Project"], [27, 3, 1, "", "ResolvedPath"], [27, 4, 1, "", "Validate"], [27, 4, 1, "", "__delitem__"], [27, 4, 1, "", "__getitem__"], [27, 4, 1, "", "__init__"], [27, 4, 1, "", "__len__"], [27, 4, 1, "", "__setitem__"], [27, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.NetlistFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.OSVVM": [[28, 1, 1, "", "OSVVMProjectFile"]], "pyEDAA.ProjectModel.OSVVM.OSVVMProjectFile": [[28, 2, 1, "", "Any"], [28, 3, 1, "", "Design"], [28, 3, 1, "", "FileSet"], [28, 3, 1, "", "FileType"], [28, 3, 1, "", "Path"], [28, 3, 1, "", "Project"], [28, 3, 1, "", "ResolvedPath"], [28, 4, 1, "", "Validate"], [28, 4, 1, "", "__delitem__"], [28, 4, 1, "", "__getitem__"], [28, 4, 1, "", "__init__"], [28, 4, 1, "", "__len__"], [28, 4, 1, "", "__setitem__"], [28, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.Project": [[18, 3, 1, "", "DesignCount"], [18, 3, 1, "", "Name"], [18, 3, 1, "", "ResolvedPath"], [18, 3, 1, "", "RootDirectory"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.ProjectFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.PythonSourceFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.RDLSourceFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.SettingFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.SimulationAnalysisFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.SimulationElaborationFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.SimulationRunFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.SimulationStartFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.SourceFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.SystemRDLSourceFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 3, 1, "", "SystemRDLVersion"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.SystemVerilogBaseFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.SystemVerilogHeaderFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 3, 1, "", "SVVersion"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.SystemVerilogSourceFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 3, 1, "", "SVVersion"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.TCLSourceFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.TextFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.VHDLLibrary": [[18, 3, 1, "", "Design"], [18, 3, 1, "", "FileCount"], [18, 3, 1, "", "Files"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "VHDLVersion"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.VHDLSourceFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 3, 1, "", "VHDLLibrary"], [18, 3, 1, "", "VHDLVersion"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__repr__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.Verilog": [[30, 1, 1, "", "ValueChangeDumpFile"]], "pyEDAA.ProjectModel.Verilog.ValueChangeDumpFile": [[30, 2, 1, "", "Any"], [30, 3, 1, "", "Design"], [30, 3, 1, "", "FileSet"], [30, 3, 1, "", "FileType"], [30, 3, 1, "", "Path"], [30, 3, 1, "", "Project"], [30, 3, 1, "", "ResolvedPath"], [30, 4, 1, "", "Validate"], [30, 4, 1, "", "__delitem__"], [30, 4, 1, "", "__getitem__"], [30, 4, 1, "", "__init__"], [30, 4, 1, "", "__len__"], [30, 4, 1, "", "__setitem__"], [30, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.VerilogBaseFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.VerilogHeaderFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 3, 1, "", "VerilogVersion"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.VerilogSourceFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 3, 1, "", "VerilogVersion"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.WaveformConfigFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.WaveformDatabaseFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.WaveformExchangeFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.XMLFile": [[18, 2, 1, "", "Any"], [18, 3, 1, "", "Design"], [18, 3, 1, "", "FileSet"], [18, 3, 1, "", "FileType"], [18, 3, 1, "", "Path"], [18, 3, 1, "", "Project"], [18, 3, 1, "", "ResolvedPath"], [18, 4, 1, "", "Validate"], [18, 4, 1, "", "__delitem__"], [18, 4, 1, "", "__getitem__"], [18, 4, 1, "", "__init__"], [18, 4, 1, "", "__len__"], [18, 4, 1, "", "__setitem__"], [18, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.Xilinx": [[32, 0, 0, "-", "ISE"], [33, 0, 0, "-", "Vivado"]], "pyEDAA.ProjectModel.Xilinx.ISE": [[32, 1, 1, "", "ISEProjectFile"], [32, 1, 1, "", "UCFConstraintFile"]], "pyEDAA.ProjectModel.Xilinx.ISE.ISEProjectFile": [[32, 2, 1, "", "Any"], [32, 3, 1, "", "Design"], [32, 3, 1, "", "FileSet"], [32, 3, 1, "", "FileType"], [32, 3, 1, "", "Path"], [32, 3, 1, "", "Project"], [32, 3, 1, "", "ResolvedPath"], [32, 4, 1, "", "Validate"], [32, 4, 1, "", "__delitem__"], [32, 4, 1, "", "__getitem__"], [32, 4, 1, "", "__init__"], [32, 4, 1, "", "__len__"], [32, 4, 1, "", "__setitem__"], [32, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.Xilinx.ISE.UCFConstraintFile": [[32, 2, 1, "", "Any"], [32, 3, 1, "", "Design"], [32, 3, 1, "", "FileSet"], [32, 3, 1, "", "FileType"], [32, 3, 1, "", "Path"], [32, 3, 1, "", "Project"], [32, 3, 1, "", "ResolvedPath"], [32, 4, 1, "", "Validate"], [32, 4, 1, "", "__delitem__"], [32, 4, 1, "", "__getitem__"], [32, 4, 1, "", "__init__"], [32, 4, 1, "", "__len__"], [32, 4, 1, "", "__setitem__"], [32, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.Xilinx.Vivado": [[33, 1, 1, "", "ConstraintFile"], [33, 1, 1, "", "File"], [33, 1, 1, "", "IPCoreDescriptionFile"], [33, 1, 1, "", "IPCoreInstantiationFile"], [33, 1, 1, "", "UsedInAttribute"], [33, 1, 1, "", "VHDLSourceFile"], [33, 1, 1, "", "VerilogSourceFile"], [33, 1, 1, "", "VivadoProjectFile"], [33, 1, 1, "", "XDCConstraintFile"]], "pyEDAA.ProjectModel.Xilinx.Vivado.ConstraintFile": [[33, 2, 1, "", "Any"], [33, 3, 1, "", "Design"], [33, 3, 1, "", "FileSet"], [33, 3, 1, "", "FileType"], [33, 3, 1, "", "Path"], [33, 3, 1, "", "Project"], [33, 3, 1, "", "ResolvedPath"], [33, 4, 1, "", "Validate"], [33, 4, 1, "", "__delitem__"], [33, 4, 1, "", "__getitem__"], [33, 4, 1, "", "__init__"], [33, 4, 1, "", "__len__"], [33, 4, 1, "", "__setitem__"], [33, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.Xilinx.Vivado.File": [[33, 2, 1, "", "Any"], [33, 3, 1, "", "Design"], [33, 3, 1, "", "FileSet"], [33, 3, 1, "", "FileType"], [33, 3, 1, "", "Path"], [33, 3, 1, "", "Project"], [33, 3, 1, "", "ResolvedPath"], [33, 4, 1, "", "Validate"], [33, 4, 1, "", "__delitem__"], [33, 4, 1, "", "__getitem__"], [33, 4, 1, "", "__init__"], [33, 4, 1, "", "__len__"], [33, 4, 1, "", "__setitem__"], [33, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreDescriptionFile": [[33, 2, 1, "", "Any"], [33, 3, 1, "", "Design"], [33, 3, 1, "", "FileSet"], [33, 3, 1, "", "FileType"], [33, 3, 1, "", "Path"], [33, 3, 1, "", "Project"], [33, 3, 1, "", "ResolvedPath"], [33, 4, 1, "", "Validate"], [33, 4, 1, "", "__delitem__"], [33, 4, 1, "", "__getitem__"], [33, 4, 1, "", "__init__"], [33, 4, 1, "", "__len__"], [33, 4, 1, "", "__setitem__"], [33, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.Xilinx.Vivado.IPCoreInstantiationFile": [[33, 2, 1, "", "Any"], [33, 3, 1, "", "Design"], [33, 3, 1, "", "FileSet"], [33, 3, 1, "", "FileType"], [33, 3, 1, "", "Path"], [33, 3, 1, "", "Project"], [33, 3, 1, "", "ResolvedPath"], [33, 4, 1, "", "Validate"], [33, 4, 1, "", "__delitem__"], [33, 4, 1, "", "__getitem__"], [33, 4, 1, "", "__init__"], [33, 4, 1, "", "__len__"], [33, 4, 1, "", "__setitem__"], [33, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.Xilinx.Vivado.VHDLSourceFile": [[33, 2, 1, "", "Any"], [33, 3, 1, "", "Design"], [33, 3, 1, "", "FileSet"], [33, 3, 1, "", "FileType"], [33, 3, 1, "", "Path"], [33, 3, 1, "", "Project"], [33, 3, 1, "", "ResolvedPath"], [33, 3, 1, "", "VHDLLibrary"], [33, 3, 1, "", "VHDLVersion"], [33, 4, 1, "", "Validate"], [33, 4, 1, "", "__delitem__"], [33, 4, 1, "", "__getitem__"], [33, 4, 1, "", "__init__"], [33, 4, 1, "", "__len__"], [33, 4, 1, "", "__repr__"], [33, 4, 1, "", "__setitem__"], [33, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.Xilinx.Vivado.VerilogSourceFile": [[33, 2, 1, "", "Any"], [33, 3, 1, "", "Design"], [33, 3, 1, "", "FileSet"], [33, 3, 1, "", "FileType"], [33, 3, 1, "", "Path"], [33, 3, 1, "", "Project"], [33, 3, 1, "", "ResolvedPath"], [33, 4, 1, "", "Validate"], [33, 3, 1, "", "VerilogVersion"], [33, 4, 1, "", "__delitem__"], [33, 4, 1, "", "__getitem__"], [33, 4, 1, "", "__init__"], [33, 4, 1, "", "__len__"], [33, 4, 1, "", "__setitem__"], [33, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.Xilinx.Vivado.VivadoProjectFile": [[33, 2, 1, "", "Any"], [33, 3, 1, "", "Design"], [33, 3, 1, "", "FileSet"], [33, 3, 1, "", "FileType"], [33, 3, 1, "", "Path"], [33, 3, 1, "", "Project"], [33, 3, 1, "", "ResolvedPath"], [33, 4, 1, "", "Validate"], [33, 4, 1, "", "__delitem__"], [33, 4, 1, "", "__getitem__"], [33, 4, 1, "", "__init__"], [33, 4, 1, "", "__len__"], [33, 4, 1, "", "__setitem__"], [33, 4, 1, "", "__str__"]], "pyEDAA.ProjectModel.Xilinx.Vivado.XDCConstraintFile": [[33, 2, 1, "", "Any"], [33, 3, 1, "", "Design"], [33, 3, 1, "", "FileSet"], [33, 3, 1, "", "FileType"], [33, 3, 1, "", "Path"], [33, 3, 1, "", "Project"], [33, 3, 1, "", "ResolvedPath"], [33, 4, 1, "", "Validate"], [33, 4, 1, "", "__delitem__"], [33, 4, 1, "", "__getitem__"], [33, 4, 1, "", "__init__"], [33, 4, 1, "", "__len__"], [33, 4, 1, "", "__setitem__"], [33, 4, 1, "", "__str__"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "property", "Python property"], "4": ["py", "method", "Python method"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:property", "4": "py:method"}, "terms": {"": [2, 6, 15, 18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "0": [1, 15], "08": 15, "1": [0, 1, 4], "10": 4, "1076": 4, "11": 2, "1364": 30, "19": 15, "1987": 4, "1993": 4, "1996": 2, "2": [1, 15], "20": 2, "2000": 4, "2002": 4, "2004": [4, 6], "2008": 4, "2011": 4, "2019": 4, "2024": 15, "22": 15, "27": 1, "3": [1, 5], "30": 2, "4": 15, "44": 1, "5": 1, "50": 6, "6": [0, 1, 5], "61691": 4, "7": [1, 5], "8": 1, "9": 2, "96": 2, "A": [2, 4, 6, 12, 18, 20, 24, 33], "AND": 6, "AS": 6, "BY": [2, 15], "By": 2, "FOR": 6, "For": [2, 6, 18], "ISE": [17, 18, 31], "If": [2, 4, 6, 18], "In": [2, 6], "No": 2, "Not": [1, 6], "OF": 6, "OR": 6, "Or": 18, "The": [1, 2, 6, 18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "These": [1, 18], "To": [2, 6], "__base__": [17, 18], "__call__": [17, 18], "__delattr__": [17, 18], "__delitem__": [17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33], "__dict__": 18, "__dir__": [17, 18], "__getattr__": 5, "__getattribute__": [17, 18], "__getitem__": [17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33], "__init__": [7, 8, 9, 10, 11, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33], "__instancecheck__": [17, 18], "__len__": [17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33], "__methodswithattributes__": 18, "__new__": [17, 18], "__or__": [17, 18], "__prepare__": [17, 18], "__pyattr__": 18, "__repr__": [17, 18, 31, 33], "__ror__": [17, 18], "__setattr__": [17, 18], "__setitem__": [17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33], "__sizeof__": [17, 18], "__slots__": 18, "__str__": [17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33], "__subclasscheck__": [17, 18], "__subclasses__": [17, 18], "_checkforabstractmethod": [17, 18], "_defaultfileset": 7, "_design": [8, 9, 10, 11], "_directori": [7, 9], "_externalvhdllibrari": 7, "_file": [9, 11], "_fileset": [7, 8, 9], "_iteratebaseclasspath": [17, 18], "_name": [7, 9, 10, 11], "_new__": 18, "_parent": 9, "_path": 8, "_project": [7, 8, 9, 11], "_rootdirectori": 10, "_svversion": [7, 9, 10], "_verilogvers": [7, 9, 10], "_vhdllibrari": [7, 9], "_vhdlversion": [7, 9, 10, 11], "_wrapnewmethodifabstract": [17, 18], "_wrapnewmethodifsingleton": [17, 18], "abov": [2, 5, 6], "absenc": 2, "absolut": [2, 18], "abstract": [15, 18], "abstractclasserror": 18, "accept": 2, "access": [2, 18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "accompani": 15, "accord": 2, "accuraci": 2, "act": 6, "ad": [18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "adapt": 2, "add": [6, 18], "addendum": 6, "addfil": [7, 9, 17, 18], "addfileset": [7, 17, 18], "addit": [1, 2, 15], "adopt": 2, "advic": 2, "advis": [2, 6], "affect": 2, "against": 6, "agre": [2, 6], "agreement": [2, 6], "aka": 4, "alia": [18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "all": [1, 2, 6, 17, 18, 26, 27, 32, 33], "alleg": 6, "allow": [2, 18], "alon": 6, "along": 6, "alongsid": 6, "alreadi": 18, "also": [2, 6], "alter": 2, "altera": [17, 18], "although": 2, "alwai": 2, "amend": 2, "an": [0, 2, 4, 6, 7, 9, 10, 12, 15, 18, 28, 33], "analysi": 18, "ancestor": 4, "ani": [1, 2, 6, 7, 9, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33], "annot": 6, "anoth": 18, "ansi": 18, "anywher": 2, "apach": [1, 15], "appear": 6, "appendix": 6, "appli": [2, 6, 12], "applic": [2, 6], "appropri": 6, "approxim": 2, "ar": [1, 2, 6, 18], "archiv": 6, "arg": 18, "aris": [2, 6], "arrang": 2, "articl": 2, "artist": 2, "ask": 2, "assert": [2, 6], "associ": [6, 18], "assum": 6, "attach": 6, "attribut": [6, 12, 15, 17, 18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "attributeerror": 18, "author": [2, 6], "authorship": [2, 6], "automat": 2, "avail": [2, 6], "avoid": 2, "b": 2, "base": [2, 4, 6, 18, 26, 27, 32, 33], "baseclass": 18, "basi": [2, 6], "becam": 15, "becaus": 2, "been": [2, 6, 15], "befor": 2, "behalf": 6, "behavior": 18, "below": [2, 6], "benefici": 6, "benefit": 2, "bind": 6, "boilerpl": 6, "bool": 18, "bound": 2, "br": 15, "bracket": 6, "broadcast": 2, "bsd": 1, "build": [1, 15], "c": 18, "cach": 18, "call": 18, "callabl": 18, "can": [2, 15, 18], "cannot": [2, 6], "carri": 6, "case": 2, "categor": 2, "caus": 6, "cc": [2, 15], "certain": 2, "chang": [2, 6, 30], "charact": 6, "charg": 6, "check": 18, "child": 12, "choos": [2, 6], "chosen": 2, "circumv": 2, "citizen": 15, "cl": 18, "claim": 6, "class": [4, 5, 6, 12, 15, 18, 20, 21, 22, 24, 26, 27, 28, 30, 32, 33], "classmemb": 18, "classmethod": 18, "classnam": 18, "claus": 1, "clearli": [2, 12], "client": 2, "close": 2, "cocotb": 18, "cocotbpythonfil": [17, 18], "code": [1, 6, 15, 18], "collect": [1, 2], "combin": 6, "comment": 6, "commerci": 6, "common": [6, 15], "commun": [2, 6], "compil": [6, 18], "compli": [2, 6], "complianc": 6, "compulsori": 2, "comput": 6, "concern": 2, "concret": 15, "condit": 6, "configur": [4, 6, 18, 26, 27], "connect": 2, "consent": 2, "consequenti": [2, 6], "consid": 2, "consider": 2, "consist": 6, "conspicu": 6, "constitut": [2, 6], "constraint": [18, 20, 24, 32, 33], "constraintfil": [17, 18, 20, 24, 31, 32, 33], "constru": [2, 6], "construct": 18, "consum": 15, "consumpt": 18, "contact": 2, "contain": [6, 11, 12, 18], "content": [2, 6, 18], "context": [2, 4], "contract": [2, 6], "contribut": 2, "contributor": 6, "contributori": 6, "control": 6, "convers": 6, "copi": [2, 6], "copyright": 2, "core": [15, 33], "corpor": 2, "corral": 15, "correspond": 2, "cost": 2, "could": 2, "council": 2, "counterclaim": 6, "cppsourcefil": [17, 18], "creat": [2, 15, 18], "creation": 18, "creativ": 15, "creativecommon": 2, "creator": 2, "cross": 6, "csourcefil": [17, 18], "cure": 2, "current": 18, "customari": 6, "dai": 2, "damag": [2, 6], "databas": 18, "dataset": 15, "date": [2, 6], "deal": 2, "decemb": 2, "deem": 2, "def": [7, 8, 9, 10, 11], "default": [4, 18], "defaultfileset": [7, 17, 18], "defect": 2, "defend": 6, "defin": [2, 4, 6, 30], "delattr": 18, "delet": [18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "deliber": 6, "deriv": [2, 4, 6, 15, 18], "describ": [2, 6, 15], "descript": [4, 6, 7, 8, 9, 10, 11], "design": [2, 3, 4, 6, 8, 9, 10, 11, 12, 15, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33], "designcount": [17, 18], "determin": 6, "develop": 1, "dict": [7, 9, 10, 18], "dictionari": 18, "differ": [2, 6], "direct": [2, 6], "directli": 2, "directori": [7, 9, 17, 18], "discover": 2, "discoveri": 2, "discuss": 6, "displai": [2, 6], "dissemin": 2, "dist": 1, "distribut": [2, 6], "do": [2, 6], "doc": 1, "document": [2, 4, 6, 7, 8, 9, 10, 11], "doe": [2, 6], "don": 6, "done": 18, "doubt": 2, "downstream": 2, "due": 5, "e": 1, "each": [6, 18], "easier": 6, "ec": 2, "ed": 4, "eda": [7, 8, 9, 10, 12, 15], "eda\u00b2": 15, "edif": 18, "edifnetlistfil": [17, 18], "editori": 6, "effect": 2, "either": 6, "elabor": [6, 18], "elect": 2, "electron": [6, 18], "element": 12, "enclos": 6, "encourag": 2, "endors": 2, "enforc": 2, "entiti": [2, 4, 6], "equival": [1, 2], "error": 2, "essenti": 2, "etc": 15, "european": 2, "evalu": 1, "even": [2, 6], "event": [2, 6], "everi": 2, "exampl": [2, 6], "except": [2, 6, 18], "exchang": [18, 30], "excl": 18, "exclud": 6, "exclus": [2, 6], "execut": [6, 18], "exemplari": 2, "exercis": [2, 6], "exhaust": 2, "exist": [4, 18], "expect": 2, "expens": 2, "explicitli": 6, "export": [7, 8, 9, 10, 11], "express": [2, 6, 18], "expressli": 2, "extendedtyp": 18, "extent": 2, "externalvhdllibrari": 7, "extract": 2, "fail": 2, "failur": [2, 6], "fair": 2, "fals": 18, "featur": 15, "fee": 6, "field": [6, 18], "fifti": 6, "file": [1, 4, 6, 7, 9, 11, 12, 17, 18, 20, 22, 24, 26, 27, 28, 30, 31, 32, 33], "filecount": [17, 18], "fileset": [4, 7, 8, 12, 15, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33], "filesetcount": [17, 18], "filetyp": [7, 8, 9, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33], "filter": 18, "firm": 2, "first": [15, 18], "fit": [2, 6], "follow": [2, 6], "forbid": 2, "form": [2, 6], "format": [2, 6, 18], "framework": 15, "free": [2, 6], "from": [0, 2, 6, 18], "fulfil": 2, "full": 2, "fullest": 2, "function": 18, "further": [1, 18], "g": 1, "gener": [1, 6, 7, 8, 9, 10, 11, 13, 15, 18, 34], "getattr": 18, "ghdl": [15, 17, 18], "ghdlwaveformfil": [17, 18, 22], "ghw": 22, "give": [2, 6], "given": [4, 18], "goal": [3, 12], "goodwil": 6, "got": 15, "govern": 6, "gpl": 1, "grant": 2, "grossli": 6, "group": [4, 9, 11, 12, 18], "ha": [2, 6, 12, 15, 18], "handl": 18, "hardwar": 4, "harmless": 6, "hasclassattribut": [17, 18], "hasmethodattribut": [17, 18], "have": [2, 6, 12, 18], "hdl": [15, 18], "hdlsourcefil": [17, 18, 33], "header": 18, "held": 2, "here": 2, "hereaft": 2, "herebi": [2, 6], "herein": [2, 6], "hierarchi": 12, "higher": 15, "hold": 6, "holder": 2, "how": [2, 5, 6, 18], "howev": [2, 6], "http": 6, "human": 18, "humanreadablecont": [17, 18, 20, 24, 26, 27, 28, 32, 33], "hyperlink": 2, "i": [2, 4, 5, 6, 15, 18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "icaru": 15, "identif": [2, 6], "identifi": 6, "iec": 4, "ieee": [4, 30], "ii": 6, "iii": 6, "imag": 2, "immedi": 18, "immun": 2, "implement": [15, 18], "impli": [2, 6], "import": [2, 6], "impos": 2, "improv": 6, "inabl": 6, "incident": [2, 6], "incl": 18, "includ": [2, 6], "inclus": 6, "incorpor": 6, "incur": 6, "indemn": 6, "indemnifi": 6, "independ": [0, 2, 18], "index": [18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "indic": [2, 6], "indirect": [2, 6], "individu": [2, 6], "inform": [2, 6], "infring": [2, 6], "inherit": [18, 20, 21, 22, 24, 26, 27, 28, 30, 32, 33], "ini": 18, "inicont": [17, 18, 26, 27], "initi": 18, "input": 15, "insert": 18, "instal": 1, "instanc": [2, 18, 33], "instanti": [18, 33], "instead": 18, "institut": 6, "int": [18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "integr": [2, 15], "intel": [17, 18], "intend": 2, "intention": 6, "interchang": 18, "interfac": 6, "io": 1, "ip": [15, 33], "ipcor": 33, "ipcoredescriptionfil": [17, 18, 31, 33], "ipcoreinstantiationfil": [17, 18, 31, 33], "irrevoc": [2, 6], "iseprojectfil": [17, 18, 31, 32], "issu": 6, "item": 18, "iter": [7, 9, 18], "its": [2, 6], "itself": 18, "januari": 6, "json": 18, "jsoncont": [17, 18], "jurisdict": 2, "kei": [18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "keyvalueattribut": [17, 18, 21], "kind": [2, 6], "known": 2, "kwarg": 18, "kwd": 18, "label": 2, "languag": [4, 6, 18, 33], "latent": 2, "later": 18, "law": [2, 6], "lawfulli": 2, "lawsuit": 6, "lawyer": 2, "least": [6, 12, 18], "left": 18, "legal": [2, 6], "lehmann": 15, "level": 15, "liabl": [2, 6], "librari": [1, 12, 18, 33], "licens": 1, "licensor": [2, 6], "link": 6, "list": [1, 6, 7, 9, 11, 18], "literari": 2, "litig": 6, "local": [2, 6], "locat": 18, "log": 18, "logfil": [17, 18], "logic": 15, "logo": 2, "loss": [2, 6], "lrm": 4, "made": [2, 6], "mai": [2, 6], "mail": 6, "maintain": [1, 15], "make": [2, 6, 18], "malfunct": 6, "manag": [6, 15], "mandatori": 1, "manner": 2, "manual": [1, 4], "march": 2, "mark": [2, 6], "martinez": 15, "materi": 2, "mean": [2, 6], "measur": 2, "mechan": 6, "media": [2, 6], "medium": [2, 6], "meet": 6, "member": [2, 18], "memori": 18, "mentorgraph": [17, 18], "merchant": [2, 6], "mere": 6, "meta": [5, 18], "metaclass": [8, 18], "method": 18, "might": 18, "minimum": 2, "mit": 1, "mixin": 18, "model": 15, "modelsim": [17, 18, 25], "modelsiminifil": [17, 18, 25, 26, 27], "modelsimprojectfil": [17, 18, 25, 26, 27], "modif": [2, 6, 18], "modifi": [2, 6], "modul": 17, "moral": 2, "more": [2, 6, 15], "most": [2, 18], "move": 2, "mro": [17, 18], "multipl": [12, 15, 18], "music": 2, "must": [2, 6], "mypi": 34, "name": [4, 6, 7, 9, 10, 11, 12, 17, 18], "namespac": [4, 15, 18], "necessari": 2, "necessarili": 6, "need": [1, 2], "neglig": [2, 6], "nest": [15, 18], "netlist": 18, "netlistfil": [17, 18], "never": 2, "new": 18, "newclass": 18, "newli": 18, "nextpnr": 15, "non": [2, 6], "none": [1, 7, 8, 9, 10, 11, 18, 20, 21, 22, 24, 26, 27, 28, 30, 32, 33], "nor": 2, "normal": 6, "noth": [2, 6], "notic": [2, 6], "notwithstand": [2, 6], "nov": 15, "now": [2, 15, 18], "nullabl": [7, 8, 9, 10, 11], "number": [18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "object": [6, 12, 18], "oblig": [2, 6], "obtain": 6, "offer": [2, 6], "offici": 2, "one": [2, 6, 12, 18], "onli": [2, 6, 18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "open": 15, "option": 18, "order": 18, "org": [2, 6], "organ": 4, "origin": [2, 6], "osvvm": [15, 17, 18], "osvvmprojectfil": [17, 18, 28], "other": [4, 6], "otherwis": [2, 6], "our": 2, "out": [2, 6], "outstand": 6, "overal": 12, "overlai": 18, "overridden": 18, "own": [6, 15], "owner": 6, "ownership": 6, "packag": [0, 4, 5, 15, 17], "page": 6, "paragraph": 2, "paramet": [18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "parent": [9, 12, 17, 18], "parliament": 2, "part": [2, 6], "parti": [2, 6, 15], "particular": [2, 6], "patent": 2, "path": [7, 8, 9, 10, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33], "patrick": 15, "percent": 6, "perform": [2, 6], "permiss": [2, 6], "permit": 2, "perpetu": 6, "person": 2, "pertain": 6, "physic": 4, "pip3": [1, 5], "place": [2, 6], "placehold": [13, 34], "polici": 2, "portion": 2, "posixpath": 18, "possibl": [2, 6, 18], "power": 6, "practic": 2, "pre": 4, "prefer": 6, "prepar": 6, "presenc": 2, "preserv": 18, "prevent": 2, "previou": 2, "primari": [11, 18], "print": 6, "prior": 2, "privaci": 2, "privileg": 2, "pro": 28, "problem": 5, "process": 2, "produc": 2, "product": 6, "project": [2, 4, 6, 7, 8, 9, 11, 15, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33], "projectfil": [17, 18, 20, 24, 26, 27, 28, 32, 33], "projectmodel": [0, 5, 17], "promin": 6, "proper": 2, "properti": [7, 8, 9, 10, 11, 18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "protect": 2, "provid": [2, 6, 15], "provis": 2, "pseudonym": 2, "publicli": 6, "publish": 2, "punit": 2, "purpos": [2, 6], "pyedaa": [0, 5, 17], "pyipcmi": 0, "pypi": [1, 15], "pysvmodel": 1, "pysystemrdlmodel": 1, "pytest": 13, "python": [0, 1, 5, 15, 18], "pythoncont": [17, 18], "pythonsourcefil": [17, 18], "pytool": [1, 18], "pyvhdlmodel": 1, "qpf": [20, 24], "quartu": [17, 18, 19, 24], "quartusprim": [17, 18, 23], "quartusprojectfil": [17, 18, 19, 20, 23, 24], "questasim": [17, 18, 25], "r": 1, "rais": [18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "rdl": 18, "rdlsourcefil": [17, 18], "read": [2, 18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "readabl": [6, 18], "reason": [2, 6], "receiv": [2, 6], "recipi": [2, 6], "recommend": 6, "record": 2, "recurs": 1, "reduc": 2, "refer": [2, 4, 12], "reform": 2, "regard": [2, 6], "regist": 18, "regul": 2, "reinstat": 2, "rel": 18, "relat": 2, "relationship": [2, 7, 8, 9, 10, 11], "remain": [2, 6], "remedi": 2, "remov": 2, "replac": [2, 6, 18], "repr": [18, 33], "repres": [6, 18, 33], "represent": [2, 4], "reproduc": [2, 6], "reproduct": [2, 6], "request": 2, "requir": [1, 2, 5, 6], "reserv": 2, "resolut": 18, "resolv": [18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "resolvedpath": [7, 8, 9, 10, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33], "resourc": 2, "respect": 2, "respons": 6, "restrict": 2, "result": [2, 6, 22], "retain": [2, 6], "return": [18, 20, 21, 22, 24, 26, 27, 28, 30, 32, 33], "reus": 2, "revis": [4, 6], "right": [6, 18], "risk": 6, "root": 18, "rootdirectori": [10, 17, 18], "rout": 15, "royalti": [2, 6], "run": 18, "same": [6, 18], "satisfi": 2, "scheme": 2, "sdc": [18, 20, 24], "sdcconstraintfil": [17, 18, 19, 20, 23, 24], "sdccontent": [17, 18, 20, 24, 33], "section": [5, 6], "secur": 2, "see": [5, 6], "seek": 2, "self": [7, 8, 9, 10, 11, 18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "sell": 6, "semant": 12, "sent": 6, "separ": [2, 6], "servic": [1, 2, 6, 15], "set": [2, 9, 12, 18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "setattr": 18, "setter": [7, 8, 9, 10, 11], "settingfil": [17, 18, 26, 27], "sever": 2, "shall": [2, 6, 12], "share": [2, 6], "should": [2, 6], "similar": 2, "simpli": 2, "simul": [15, 18, 22], "simulationanalysisfil": [17, 18], "simulationelaborationfil": [17, 18], "simulationrunfil": [17, 18], "simulationstartfil": [17, 18], "singl": 18, "singleton": 18, "slot": 18, "so": [2, 18], "societi": 2, "softwar": 6, "sole": 6, "sound": 2, "sourc": [6, 12, 15, 18, 20, 21, 22, 24, 26, 27, 28, 30, 32, 33], "sourcefil": [17, 18, 33], "special": [2, 6, 18], "specif": [6, 18, 26, 27, 32], "specifi": [2, 4, 18], "sphinx_autodoc_typehint": 1, "sphinx_btd_them": 1, "sphinx_fontawesom": 1, "split": 0, "sponsor": 2, "srdlversion": 18, "standalon": 18, "standard": [2, 4], "start": 18, "state": [2, 6], "statement": [6, 18], "static": [1, 18], "statu": 2, "statutori": 2, "std": 30, "still": 2, "stop": 2, "stoppag": 6, "store": 18, "str": [7, 9, 10, 11, 18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "structur": 18, "sub": [1, 18], "subclass": [18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "subject": [2, 6], "sublicens": [2, 6], "submit": 6, "submodul": [18, 19, 23, 25, 31], "subsequ": 6, "substanti": 2, "succeed": 2, "supersed": 6, "supplement": 2, "suppli": 2, "support": [6, 15, 22], "surviv": 2, "svversion": [7, 9, 10, 17, 18], "synch": 2, "synopsi": [18, 20, 24], "syntax": 6, "synthesi": 15, "system": [4, 6], "systemrdl": 18, "systemrdlsourcefil": [17, 18], "systemrdlvers": [17, 18], "systemverilog": 18, "systemverilogbasefil": [17, 18], "systemverilogheaderfil": [17, 18], "systemverilogmixin": 18, "systemverilogsourcefil": [17, 18], "systemverilogvers": [7, 9, 10, 18, 33], "t": [6, 18], "tbc": 4, "tbd": [0, 3], "tcl": 18, "tclcontent": [17, 18, 20, 24, 26, 27, 28, 33], "tclsourcefil": [17, 18], "technic": 2, "technolog": 2, "term": 6, "termin": 6, "text": [2, 6, 18], "textfil": [17, 18], "than": 2, "thei": [2, 18], "them": [2, 18], "theori": [2, 6], "therein": 18, "thereof": 6, "thi": [2, 5, 6, 15, 18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "third": [6, 15], "those": [2, 6], "threadsaf": 18, "through": [2, 6], "thu": 1, "time": 2, "titl": [2, 6], "toml": 18, "tomlcont": [17, 18], "too": 1, "tool": [15, 18, 26, 27, 32], "top": 15, "toplevel": [17, 18], "tort": 6, "totalfilecount": [17, 18], "totalfilesetcount": [17, 18], "track": 6, "trade": 6, "trademark": 2, "transfer": 6, "transform": [2, 6], "translat": [2, 6], "treati": 2, "true": 18, "tupl": 18, "twine": 1, "txt": [1, 18], "type": [6, 18, 20, 21, 22, 24, 26, 27, 28, 30, 32, 33], "typeerror": [18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "u": [1, 5], "ucfconstraintfil": [17, 18, 31, 32], "unai": 15, "unauthor": 2, "under": [2, 6, 15], "underlin": 2, "understand": 2, "undertaken": 2, "undocu": [18, 21, 33], "unenforc": 2, "unifi": 15, "union": [6, 7, 9, 18], "unit": [4, 11], "unless": [2, 6], "up": 18, "upon": 2, "uri": 2, "us": [1, 4, 6, 18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "usedinattribut": [17, 18, 31, 33], "usual": 12, "v1": 0, "valid": [15, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33], "valu": [7, 8, 9, 10, 11, 18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "valuechangedumpfil": [17, 18, 30], "variant": [12, 18], "vcd": 30, "verbal": 6, "veril": 15, "verilog": [4, 15, 17, 18, 22, 33], "verilogbasefil": [17, 18, 33], "verilogheaderfil": [17, 18], "verilogmixin": [18, 33], "verilogsourcefil": [17, 18, 31, 33], "verilogvers": [7, 9, 10, 17, 18, 31, 33], "version": [1, 6, 18, 33], "vhdl": [4, 12, 17, 18, 22, 33], "vhdllibrari": [4, 7, 9, 17, 18, 31, 33], "vhdlsourcefil": [17, 18, 31, 33], "vhdlversion": [7, 9, 10, 11, 17, 18, 31, 33], "via": 1, "violat": 2, "vivado": [15, 17, 18, 31], "vivadofilemixin": 33, "vivadoprojectfil": [17, 18, 31, 33], "voluntari": 2, "vtr": 15, "wa": [0, 6, 15, 18], "wai": 2, "waiv": 2, "waivabl": 2, "waiver": 2, "wavedofil": [17, 18, 25, 26, 27], "waveform": [18, 22, 26, 27, 30], "waveformconfigfil": [17, 18, 26, 27], "waveformdatabasefil": [17, 18], "waveformexchangefil": [17, 18, 22, 30], "we": 6, "well": 2, "wheel": 1, "when": [18, 20, 22, 24, 26, 27, 28, 30, 32, 33], "where": [2, 6], "wherev": 6, "whether": [2, 6], "which": [2, 6], "while": [6, 15, 18], "whole": [2, 6], "whom": 6, "wih": 18, "wipo": 2, "within": [2, 6], "without": [2, 6], "work": [2, 6], "world": 2, "worldwid": [2, 6], "wrap": 18, "write": [6, 7, 8, 9, 10, 11], "written": [2, 6], "www": 6, "xci": 33, "xdc": 33, "xdcconstraintfil": [17, 18, 31, 33], "xilinx": [15, 17, 18], "xlarg": [2, 6], "xml": [18, 33], "xmlcontent": [17, 18, 33], "xmlfile": [17, 18, 33], "xpr": 33, "yaml": 18, "yamlcont": [17, 18], "yet": 1, "yosi": 15, "you": [2, 6], "your": [2, 6], "yyyi": 6}, "titles": ["ChangeLog", "Dependency", "Creative Commons Attribution 4.0 International", "File Types", "Glossary", "Installation/Updates", "Apache License 2.0", "Design", "File", "FileSet", "Project", "VHDL Library", "Project Model", "Coverage Report", "Index", "The pyEDAA.ProjectModel Documentation", "Module Index", "Python Class Reference", "pyEDAA.ProjectModel", "pyEDAA.ProjectModel.Altera", "pyEDAA.ProjectModel.Altera.Quartus", "pyEDAA.ProjectModel.Attributes", "pyEDAA.ProjectModel.GHDL", "pyEDAA.ProjectModel.Intel", "pyEDAA.ProjectModel.Intel.QuartusPrime", "pyEDAA.ProjectModel.MentorGraphics", "pyEDAA.ProjectModel.MentorGraphics.ModelSim", "pyEDAA.ProjectModel.MentorGraphics.QuestaSim", "pyEDAA.ProjectModel.OSVVM", "pyEDAA.ProjectModel.VHDL", "pyEDAA.ProjectModel.Verilog", "pyEDAA.ProjectModel.Xilinx", "pyEDAA.ProjectModel.Xilinx.ISE", "pyEDAA.ProjectModel.Xilinx.Vivado", "Static Type Checking Report"], "titleterms": {"0": [2, 6], "01": 0, "09": 0, "1": [2, 6], "2": [2, 6], "2021": [0, 15], "3": [2, 6], "4": [2, 6], "5": [2, 6], "6": [2, 6], "7": [2, 6], "8": [2, 6], "9": 6, "ISE": 32, "The": 15, "accept": 6, "addit": 6, "altera": [19, 20], "apach": 6, "attribut": [2, 21], "case": 15, "changelog": 0, "check": [1, 34], "ci": 1, "class": [7, 8, 9, 10, 11, 17], "common": 2, "condens": [7, 8, 9, 10, 11], "condit": 2, "content": 3, "contribut": 6, "contributor": 15, "copyright": 6, "coverag": [1, 13], "creativ": 2, "databas": 2, "definit": [2, 6, 7, 8, 9, 10, 11], "depend": 1, "design": 7, "directori": 5, "disclaim": [2, 6], "document": [1, 15], "extract": 15, "file": [3, 8, 15], "fileset": 9, "from": [5, 15], "generi": 2, "ghdl": 22, "glossari": 4, "goal": 15, "grant": 6, "hierarchi": 3, "index": [14, 16], "instal": 5, "intel": [23, 24], "intern": 2, "interpret": 2, "legaci": 5, "liabil": [2, 6], "librari": 11, "licens": [2, 6, 15], "limit": [2, 6], "local": 5, "main": 15, "mentorgraph": [25, 26, 27], "model": 12, "modelsim": 26, "modul": 16, "new": 15, "oct": 15, "onli": 1, "option": 1, "osvvm": 28, "other": 2, "overal": 3, "packag": 1, "patent": 6, "pip": 5, "pro": 15, "project": [10, 12], "projectmodel": [1, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "public": 2, "publish": 1, "py": 5, "pyedaa": [1, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "pyipcmi": 15, "pypi": 5, "python": 17, "quartu": 20, "quartusprim": 24, "questasim": 27, "read": 15, "redistribut": 6, "refer": 17, "releas": 0, "report": [13, 34], "right": 2, "scope": 2, "section": 2, "sep": 15, "server": 1, "setup": 5, "sphinx": 1, "static": 34, "submiss": 6, "sui": 2, "term": 2, "termin": 2, "test": 1, "todo": [7, 8, 9, 10, 11], "trademark": 6, "type": [1, 3, 34], "uninstal": 5, "unit": 1, "upcom": 0, "updat": 5, "us": [2, 5, 15], "verilog": 30, "vhdl": [11, 29], "vhdllibrari": 11, "vivado": 33, "warranti": [2, 6], "xilinx": [31, 32, 33], "xpr": 15}}) \ No newline at end of file diff --git a/typing/html/pyEDAA/ProjectModel/Altera/Quartus.py.html b/typing/html/pyEDAA/ProjectModel/Altera/Quartus.py.html new file mode 100644 index 00000000..89c89aa8 --- /dev/null +++ b/typing/html/pyEDAA/ProjectModel/Altera/Quartus.py.html @@ -0,0 +1,106 @@ + + + + + + +

pyEDAA.ProjectModel.Altera.Quartus

+ + + + + + +
pyEDAA/ProjectModel/Altera/Quartus.py
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+
# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for Altera Quartus."""
+from pyTooling.Decorators import export
+
+from pyEDAA.ProjectModel import ConstraintFile, ProjectFile, SDCContent, TCLContent
+
+
+@export
+class QuartusProjectFile(ProjectFile, TCLContent):
+	"""A Quartus project file (``*.qpf``)."""
+
+
+@export
+class SDCConstraintFile(ConstraintFile, SDCContent):
+	"""A Quartus constraint file (Synopsys Design Constraints; ``*.sdc``)."""
+
+ + diff --git a/typing/html/pyEDAA/ProjectModel/Altera/__init__.py.html b/typing/html/pyEDAA/ProjectModel/Altera/__init__.py.html new file mode 100644 index 00000000..a9f8fc27 --- /dev/null +++ b/typing/html/pyEDAA/ProjectModel/Altera/__init__.py.html @@ -0,0 +1,78 @@ + + + + + + +

pyEDAA.ProjectModel.Altera

+ + + + + + +
pyEDAA/ProjectModel/Altera/__init__.py
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+
# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""A vendor specific package for Altera (now Intel FPGA)."""
+
+ + diff --git a/typing/html/pyEDAA/ProjectModel/Attributes.py.html b/typing/html/pyEDAA/ProjectModel/Attributes.py.html new file mode 100644 index 00000000..67580d51 --- /dev/null +++ b/typing/html/pyEDAA/ProjectModel/Attributes.py.html @@ -0,0 +1,123 @@ + + + + + + +

pyEDAA.ProjectModel.Attributes

+ + + + + + +
pyEDAA/ProjectModel/Attributes.py
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+
# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""A set of common attributes to store meta information on ProjectModel entities (project, design, fileset, file, ...)."""
+from typing               import Dict
+from pyTooling.Decorators import export
+
+from pyEDAA.ProjectModel  import Attribute
+
+
+@export
+class KeyValueAttribute(Attribute):
+	KEY = "ID"
+
+	_keyValuePairs: Dict[str, str]
+
+	def __init__(self) -> None:
+		super().__init__()
+
+		self._keyValuePairs = {}
+
+	def __getitem__(self, item: str) -> str:
+		return self._keyValuePairs[item]
+
+	def __setitem__(self, key: str, value: str) -> None:
+		self._keyValuePairs[key] = value
+
+ + diff --git a/typing/html/pyEDAA/ProjectModel/GHDL.py.html b/typing/html/pyEDAA/ProjectModel/GHDL.py.html new file mode 100644 index 00000000..4ae5507a --- /dev/null +++ b/typing/html/pyEDAA/ProjectModel/GHDL.py.html @@ -0,0 +1,95 @@ + + + + + + +

pyEDAA.ProjectModel.GHDL

+ + + + + + +
pyEDAA/ProjectModel/GHDL.py
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+
# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for `GHDL <https://github.com/ghdl>`__."""
+from pyTooling.Decorators import export
+
+from pyEDAA.ProjectModel import WaveformExchangeFile
+
+
+@export
+class GHDLWaveformFile(WaveformExchangeFile):
+	"""GHDL's waveform file (``*.ghw``) supporting VHDL and Verilog simulation results."""
+
+ + diff --git a/typing/html/pyEDAA/ProjectModel/Intel/QuartusPrime.py.html b/typing/html/pyEDAA/ProjectModel/Intel/QuartusPrime.py.html new file mode 100644 index 00000000..c4e1a3a3 --- /dev/null +++ b/typing/html/pyEDAA/ProjectModel/Intel/QuartusPrime.py.html @@ -0,0 +1,106 @@ + + + + + + +

pyEDAA.ProjectModel.Intel.QuartusPrime

+ + + + + + +
pyEDAA/ProjectModel/Intel/QuartusPrime.py
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+
# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for Intel FPGA Quartus Prime."""
+from pyTooling.Decorators import export
+
+from pyEDAA.ProjectModel import ConstraintFile, ProjectFile, SDCContent, TCLContent
+
+
+@export
+class QuartusProjectFile(ProjectFile, TCLContent):
+	"""A Quartus project file (``*.qpf``)."""
+
+
+@export
+class SDCConstraintFile(ConstraintFile, SDCContent):
+	"""A Quartus constraint file (Synopsys Design Constraints; ``*.sdc``)."""
+
+ + diff --git a/typing/html/pyEDAA/ProjectModel/Intel/__init__.py.html b/typing/html/pyEDAA/ProjectModel/Intel/__init__.py.html new file mode 100644 index 00000000..020c8980 --- /dev/null +++ b/typing/html/pyEDAA/ProjectModel/Intel/__init__.py.html @@ -0,0 +1,78 @@ + + + + + + +

pyEDAA.ProjectModel.Intel

+ + + + + + +
pyEDAA/ProjectModel/Intel/__init__.py
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+
# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""A vendor specific package for Intel FPGA (formerly Altera)."""
+
+ + diff --git a/typing/html/pyEDAA/ProjectModel/MentorGraphics/ModelSim.py.html b/typing/html/pyEDAA/ProjectModel/MentorGraphics/ModelSim.py.html new file mode 100644 index 00000000..3d6e9eb1 --- /dev/null +++ b/typing/html/pyEDAA/ProjectModel/MentorGraphics/ModelSim.py.html @@ -0,0 +1,117 @@ + + + + + + +

pyEDAA.ProjectModel.MentorGraphics.ModelSim

+ + + + + + +
pyEDAA/ProjectModel/MentorGraphics/ModelSim.py
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+
# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for Mentor Graphics ModelSim."""
+from pyTooling.Decorators import export
+
+from pyEDAA.ProjectModel import ProjectFile, SettingFile, INIContent, WaveformConfigFile, TCLContent
+
+
+@export
+class ModelSimProjectFile(ProjectFile):
+	pass
+
+
+@export
+class ModelSimINIFile(SettingFile, INIContent):
+	pass
+
+
+@export
+class WaveDoFile(WaveformConfigFile, TCLContent):
+	pass
+
+ + diff --git a/typing/html/pyEDAA/ProjectModel/MentorGraphics/QuestaSim.py.html b/typing/html/pyEDAA/ProjectModel/MentorGraphics/QuestaSim.py.html new file mode 100644 index 00000000..f9053526 --- /dev/null +++ b/typing/html/pyEDAA/ProjectModel/MentorGraphics/QuestaSim.py.html @@ -0,0 +1,117 @@ + + + + + + +

pyEDAA.ProjectModel.MentorGraphics.QuestaSim

+ + + + + + +
pyEDAA/ProjectModel/MentorGraphics/QuestaSim.py
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+
# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for Mentor Graphics QuestaSim."""
+from pyTooling.Decorators import export
+
+from pyEDAA.ProjectModel import ProjectFile, SettingFile, INIContent, WaveformConfigFile, TCLContent
+
+
+@export
+class ModelSimProjectFile(ProjectFile):
+	pass
+
+
+@export
+class ModelSimINIFile(SettingFile, INIContent):
+	pass
+
+
+@export
+class WaveDoFile(WaveformConfigFile, TCLContent):
+	pass
+
+ + diff --git a/typing/html/pyEDAA/ProjectModel/MentorGraphics/__init__.py.html b/typing/html/pyEDAA/ProjectModel/MentorGraphics/__init__.py.html new file mode 100644 index 00000000..a1bc671f --- /dev/null +++ b/typing/html/pyEDAA/ProjectModel/MentorGraphics/__init__.py.html @@ -0,0 +1,78 @@ + + + + + + +

pyEDAA.ProjectModel.MentorGraphics

+ + + + + + +
pyEDAA/ProjectModel/MentorGraphics/__init__.py
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+
# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""A vendor specific package for Mentor Graphics (now Siemens EDA)."""
+
+ + diff --git a/typing/html/pyEDAA/ProjectModel/OSVVM.py.html b/typing/html/pyEDAA/ProjectModel/OSVVM.py.html new file mode 100644 index 00000000..f5562518 --- /dev/null +++ b/typing/html/pyEDAA/ProjectModel/OSVVM.py.html @@ -0,0 +1,427 @@ + + + + + + +

pyEDAA.ProjectModel.OSVVM

+ + + + + + +
pyEDAA/ProjectModel/OSVVM.py
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+
# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for `OSVVM <https://github.com/OSVVM>`__."""
+from pathlib import Path
+
+from pyTooling.Decorators import export
+from typing import Optional as Nullable, List
+
+from pyEDAA.ProjectModel import ProjectFile, TCLContent, Project, Design, FileSet, VHDLLibrary, VHDLSourceFile
+
+
+@export
+class OSVVMProjectFile(ProjectFile, TCLContent):
+	"""An OSVVM project file (``*.pro``)."""
+
+	_osvvmProject: Nullable[Project]
+
+	def __init__(
+		self,
+		path: Path,
+		project: Nullable[Project] = None,
+		design: Nullable[Design] = None,
+		fileSet: Nullable[FileSet] = None
+	):
+		super().__init__(path, project, design, fileSet)
+
+		self._osvvmProject = None
+
+	@property
+	def ProjectModel(self) -> Project:
+		return self._osvvmProject
+
+	class Instruction:
+		_line: int
+
+		def __init__(self, line: int):
+			self._line = line
+
+	class Empty(Instruction):
+		def __init__(self, line: int):
+			super().__init__(line)
+
+	class Comment(Instruction):
+		_commentText: str
+
+		def __init__(self, line: int, commentText: str):
+			super().__init__(line)
+			self._commentText = commentText.rstrip()
+
+		@property
+		def CommentText(self) -> str:
+			return self._commentText
+
+	class Analyze(Instruction):
+		_vhdlSourceFile: VHDLSourceFile
+
+		def __init__(self, line: int, parameterText: str):
+			super().__init__(line)
+			self._vhdlSourceFile = VHDLSourceFile(Path(parameterText.strip()))
+
+		@property
+		def VHDLSourceFile(self) -> VHDLSourceFile:
+			return self._vhdlSourceFile
+
+	class Library(Instruction):
+		_vhdlLibrary: VHDLLibrary
+
+		def __init__(self, line: int, parameterText: str):
+			super().__init__(line)
+			self._vhdlLibrary = VHDLLibrary(parameterText.strip())
+
+		@property
+		def VHDLLibrary(self) -> VHDLLibrary:
+			return self._vhdlLibrary
+
+	class Include(Instruction):
+		_osvvmProjectFile: 'OSVVMProjectFile'
+		_fileSet:          FileSet
+
+		def __init__(self, line: int, workingDirectory: Path, parameterText: str):
+			super().__init__(line)
+
+			includeFile = Path(parameterText.strip())
+			includePath = (workingDirectory / includeFile).resolve()
+
+			self._fileSet = FileSet(includeFile.name, directory=includeFile.parent)
+			self._osvvmProjectFile = OSVVMProjectFile(includePath)
+
+		@property
+		def OSVVMProjectFile(self) -> 'OSVVMProjectFile':
+			return self._osvvmProjectFile
+
+		def Parse(self, fileSet: FileSet):
+			self._fileSet.Parent = fileSet
+
+			for instruction in self._osvvmProjectFile._Parse():
+				if isinstance(instruction, OSVVMProjectFile.Include):
+					instruction.Parse(self._fileSet)
+				elif isinstance(instruction, OSVVMProjectFile.Analyze):
+					self._fileSet.AddFile(instruction.VHDLSourceFile)
+				elif isinstance(instruction, OSVVMProjectFile.Library):
+					self._fileSet.Design.AddVHDLLibrary(instruction.VHDLLibrary)
+#				elif isinstance(instruction, OSVVMProjectFile.Build):
+
+				elif not isinstance(instruction, (OSVVMProjectFile.Empty, OSVVMProjectFile.Comment)):
+					raise Exception(f"Unknown instruction '{instruction.__class__.__name__}' in OSVVM project file '{self._osvvmProjectFile.ResolvedPath}'")
+
+	def Parse(self) -> None:
+		projectName = self._path.name
+		self._osvvmProject = Project(projectName, rootDirectory=self._path.parent)
+
+		fileSet = self._osvvmProject.DefaultDesign.DefaultFileSet
+
+		for instruction in self._Parse():
+			if isinstance(instruction, OSVVMProjectFile.Include):
+				instruction.Parse(fileSet)
+			elif isinstance(instruction, OSVVMProjectFile.Analyze):
+				fileSet.AddFile(instruction.VHDLSourceFile)
+			elif not isinstance(instruction, (OSVVMProjectFile.Empty, OSVVMProjectFile.Comment)):
+				raise Exception(f"Unknown instruction '{instruction.__class__.__name__}' in OSVVM project file '{self.ResolvedPath}'")
+
+	def _Parse(self) -> List:
+		path = self.ResolvedPath
+		if not path.exists():
+			raise Exception(f"OSVVM project file '{path}' not found.") from FileNotFoundError(f"File '{path}' not found.")
+
+		instructions: List = []
+		print()
+		with path.open("r", encoding="utf-8") as file:
+			i = 1
+			for line in file:
+				line = line.lstrip()
+
+				if line.startswith("#"):
+					comment = OSVVMProjectFile.Comment(i, line[1:])
+					instructions.append(comment)
+
+				elif line.startswith("analyze"):
+					vhdlFile = OSVVMProjectFile.Analyze(i, line[8:])
+					instructions.append(vhdlFile)
+
+				elif line.startswith("library"):
+					vhdlLibrary = OSVVMProjectFile.Library(i, line[8:])
+					instructions.append(vhdlLibrary)
+
+				elif line.startswith("include"):
+					include = OSVVMProjectFile.Include(i, path.parent, line[8:])
+					instructions.append(include)
+
+				elif line.startswith("build"):
+					parameter = line[6:]
+					print(f"BUILD: {parameter}")
+				elif line.startswith("if"):
+					print(f"IF (line={i}): {line[3:].rstrip()}")
+				elif line.startswith("}"):
+					print(f"}} (line={i}): {line[2:].rstrip()}")
+				elif len(line) == 0:
+					instructions.append(OSVVMProjectFile.Empty(i))
+				else:
+					print(f"UNKNOWN (line={i}): '{line.rstrip()}'")
+
+				i += 1
+
+		return instructions
+
+ + diff --git a/typing/html/pyEDAA/ProjectModel/VHDL.py.html b/typing/html/pyEDAA/ProjectModel/VHDL.py.html new file mode 100644 index 00000000..514c008e --- /dev/null +++ b/typing/html/pyEDAA/ProjectModel/VHDL.py.html @@ -0,0 +1,16 @@ + + + + + + +

pyEDAA.ProjectModel.VHDL

+ + + + + + +
pyEDAA/ProjectModel/VHDL.py
+ + diff --git a/typing/html/pyEDAA/ProjectModel/Verilog.py.html b/typing/html/pyEDAA/ProjectModel/Verilog.py.html new file mode 100644 index 00000000..1739abd4 --- /dev/null +++ b/typing/html/pyEDAA/ProjectModel/Verilog.py.html @@ -0,0 +1,95 @@ + + + + + + +

pyEDAA.ProjectModel.Verilog

+ + + + + + +
pyEDAA/ProjectModel/Verilog.py
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+
# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for Verilog."""
+from pyTooling.Decorators import export
+
+from pyEDAA.ProjectModel import WaveformExchangeFile
+
+
+@export
+class ValueChangeDumpFile(WaveformExchangeFile):
+	"""Verilog's waveform file (``*.vcd``) for exchanging value changes as defined by IEEE Std. 1364."""
+
+ + diff --git a/typing/html/pyEDAA/ProjectModel/Xilinx/ISE.py.html b/typing/html/pyEDAA/ProjectModel/Xilinx/ISE.py.html new file mode 100644 index 00000000..94e485a2 --- /dev/null +++ b/typing/html/pyEDAA/ProjectModel/Xilinx/ISE.py.html @@ -0,0 +1,106 @@ + + + + + + +

pyEDAA.ProjectModel.Xilinx.ISE

+ + + + + + +
pyEDAA/ProjectModel/Xilinx/ISE.py
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+
# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for Xilinx ISE."""
+from pyTooling.Decorators import export
+
+from pyEDAA.ProjectModel import ConstraintFile, ProjectFile, HumanReadableContent
+
+
+@export
+class ISEProjectFile(ProjectFile):
+	pass
+
+
+@export
+class UCFConstraintFile(ConstraintFile, HumanReadableContent):
+	pass
+
+ + diff --git a/typing/html/pyEDAA/ProjectModel/Xilinx/Vivado.py.html b/typing/html/pyEDAA/ProjectModel/Xilinx/Vivado.py.html new file mode 100644 index 00000000..a099d6a8 --- /dev/null +++ b/typing/html/pyEDAA/ProjectModel/Xilinx/Vivado.py.html @@ -0,0 +1,493 @@ + + + + + + +

pyEDAA.ProjectModel.Xilinx.Vivado

+ + + + + + +
pyEDAA/ProjectModel/Xilinx/Vivado.py
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+
# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""Specific file types and attributes for Xilinx Vivado."""
+from pathlib import Path
+from typing  import Iterable, Optional as Nullable
+from xml.dom import minidom, Node
+
+from pyTooling.Decorators  import export
+from pyTooling.MetaClasses import ExtendedType
+from pyVHDLModel           import VHDLVersion
+
+from pyEDAA.ProjectModel import ProjectFile, XMLFile, XMLContent, SDCContent, Project, FileSet, Attribute, Design
+from pyEDAA.ProjectModel import File as Model_File
+from pyEDAA.ProjectModel import ConstraintFile as Model_ConstraintFile
+from pyEDAA.ProjectModel import VerilogSourceFile as Model_VerilogSourceFile
+from pyEDAA.ProjectModel import VHDLSourceFile as Model_VHDLSourceFile
+
+
+@export
+class UsedInAttribute(Attribute):
+	KEY = "UsedIn"
+	VALUE_TYPE = Iterable[str]
+
+
+@export
+class File(Model_File):
+	pass
+
+
+class VivadoFileMixIn(metaclass=ExtendedType, mixin=True):
+	def _registerAttributes(self) -> None:
+		self._attributes[UsedInAttribute] = []
+
+
+@export
+class ConstraintFile(Model_ConstraintFile, VivadoFileMixIn):
+	def _registerAttributes(self) -> None:
+		super()._registerAttributes()
+		VivadoFileMixIn._registerAttributes(self)
+
+
+@export
+class VerilogSourceFile(Model_VerilogSourceFile):
+	def _registerAttributes(self) -> None:
+		super()._registerAttributes()
+		VivadoFileMixIn._registerAttributes(self)
+
+
+@export
+class VHDLSourceFile(Model_VHDLSourceFile):
+	def _registerAttributes(self) -> None:
+		super()._registerAttributes()
+		VivadoFileMixIn._registerAttributes(self)
+
+
+@export
+class VivadoProjectFile(ProjectFile, XMLContent):
+	"""A Vivado project file (``*.xpr``)."""
+
+	_xprProject: Project
+
+	def __init__(
+		self,
+		path: Path,
+		project: Nullable[Project] = None,
+		design:  Nullable[Design] =  None,
+		fileSet: Nullable[FileSet] = None
+	) -> None:
+		super().__init__(path, project, design, fileSet)
+
+		self._xprProject = None
+
+	@property
+	def ProjectModel(self) -> Project:
+		return self._xprProject
+
+	def Parse(self) -> None:
+		if not self._path.exists():
+			raise Exception(f"Vivado project file '{self._path!s}' not found.") from FileNotFoundError(f"File '{self._path!s}' not found.")
+
+		try:
+			root = minidom.parse(str(self._path)).documentElement
+		except Exception as ex:
+			raise Exception(f"Couldn't open '{self._path!s}'.") from ex
+
+		self._xprProject = Project(self._path.stem, rootDirectory=self._path.parent)
+		self._ParseRootElement(root)
+
+	def _ParseRootElement(self, root) -> None:
+		for rootNode in root.childNodes:
+			if rootNode.nodeName == "FileSets":
+				self._ParseFileSets(rootNode)
+				break
+
+	def _ParseFileSets(self, filesetsNode) -> None:
+		for fileSetsNode in filesetsNode.childNodes:
+			if fileSetsNode.nodeType == Node.ELEMENT_NODE and fileSetsNode.tagName == "FileSet":
+				self._ParseFileSet(fileSetsNode)
+
+	def _ParseFileSet(self, filesetNode) -> None:
+		filesetName = filesetNode.getAttribute("Name")
+		fileset = FileSet(filesetName, design=self._xprProject.DefaultDesign)
+
+		for fileNode in filesetNode.childNodes:
+			if fileNode.nodeType == Node.ELEMENT_NODE:
+				if fileNode.tagName == "File":
+					self._ParseFile(fileNode, fileset)
+				elif fileNode.nodeType == Node.ELEMENT_NODE and fileNode.tagName == "Config":
+					self._ParseFileSetConfig(fileNode, fileset)
+
+	def _ParseFile(self, fileNode, fileset) -> None:
+		croppedPath = fileNode.getAttribute("Path").replace("$PPRDIR/", "")
+		filePath = Path(croppedPath)
+		if filePath.suffix in (".vhd", ".vhdl"):
+			self._ParseVHDLFile(fileNode, filePath, fileset)
+		elif filePath.suffix == ".xdc":
+			self._ParseXDCFile(fileNode, filePath, fileset)
+		elif filePath.suffix == ".v":
+			self._ParseVerilogFile(fileNode, filePath, fileset)
+		elif filePath.suffix == ".xci":
+			self._ParseXCIFile(fileNode, filePath, fileset)
+		else:
+			self._ParseDefaultFile(fileNode, filePath, fileset)
+
+	def _ParseVHDLFile(self, fileNode, path, fileset) -> None:
+		vhdlFile = VHDLSourceFile(path)
+		fileset.AddFile(vhdlFile)
+		usedInAttr = vhdlFile[UsedInAttribute]
+
+		for childNode in fileNode.childNodes:
+			if childNode.nodeType == Node.ELEMENT_NODE and childNode.tagName == "FileInfo":
+				if childNode.getAttribute("SFType") == "VHDL2008":
+					vhdlFile.VHDLVersion = VHDLVersion.VHDL2008
+				else:
+					vhdlFile.VHDLVersion = VHDLVersion.VHDL93
+
+				for fileAttribute in childNode.childNodes:
+					if fileAttribute.nodeType == Node.ELEMENT_NODE and fileAttribute.tagName == "Attr":
+						if fileAttribute.getAttribute("Name") == "Library":
+							libraryName = fileAttribute.getAttribute("Val")
+							vhdlFile.VHDLLibrary = fileset.GetOrCreateVHDLLibrary(libraryName)
+						elif fileAttribute.getAttribute("Val") == "UsedIn":
+							usedInAttr.append(fileAttribute.getAttribute("Val"))
+
+	def _ParseDefaultFile(self, _, path, fileset) -> None:
+		File(path, fileSet=fileset)
+
+	def _ParseXDCFile(self, _, path, fileset) -> None:
+		XDCConstraintFile(path, fileSet=fileset)
+
+	def _ParseVerilogFile(self, _, path, fileset) -> None:
+		VerilogSourceFile(path, fileSet=fileset)
+
+	def _ParseXCIFile(self, _, path, fileset) -> None:
+		IPCoreInstantiationFile(path, fileSet=fileset)
+
+	def _ParseFileSetConfig(self, fileNode, fileset) -> None:
+		for option in fileNode.childNodes:
+			if option.nodeType == Node.ELEMENT_NODE and option.tagName == "Option":
+				if option.getAttribute("Name") == "TopModule":
+					fileset.TopLevel = option.getAttribute("Val")
+
+
+@export
+class XDCConstraintFile(ConstraintFile, SDCContent):
+	"""A Vivado constraint file (Xilinx Design Constraints; ``*.xdc``)."""
+
+
+@export
+class IPCoreDescriptionFile(XMLFile):
+	pass
+
+
+@export
+class IPCoreInstantiationFile(XMLFile):
+	"""A Vivado IP core instantiation file (Xilinx IPCore Instance; ``*.xci``)."""
+
+ + diff --git a/typing/html/pyEDAA/ProjectModel/Xilinx/__init__.py.html b/typing/html/pyEDAA/ProjectModel/Xilinx/__init__.py.html new file mode 100644 index 00000000..499162a4 --- /dev/null +++ b/typing/html/pyEDAA/ProjectModel/Xilinx/__init__.py.html @@ -0,0 +1,78 @@ + + + + + + +

pyEDAA.ProjectModel.Xilinx

+ + + + + + +
pyEDAA/ProjectModel/Xilinx/__init__.py
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+
# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""A vendor specific package for Xilinx."""
+
+ + diff --git a/typing/html/pyEDAA/ProjectModel/__init__.py.html b/typing/html/pyEDAA/ProjectModel/__init__.py.html new file mode 100644 index 00000000..b8c1fef5 --- /dev/null +++ b/typing/html/pyEDAA/ProjectModel/__init__.py.html @@ -0,0 +1,4021 @@ + + + + + + +

pyEDAA.ProjectModel

+ + + + + + +
pyEDAA/ProjectModel/__init__.py
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1344
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1366
+1367
+1368
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1402
+1403
+1404
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1422
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1455
+1456
+1457
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1473
+1474
+1475
+1476
+1477
+1478
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1489
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1504
+1505
+1506
+1507
+1508
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1536
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
+1572
+1573
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1584
+1585
+1586
+1587
+1588
+1589
+1590
+1591
+1592
+1593
+1594
+1595
+1596
+1597
+1598
+1599
+1600
+1601
+1602
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+1610
+1611
+1612
+1613
+1614
+1615
+1616
+1617
+1618
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+1626
+1627
+1628
+1629
+1630
+1631
+1632
+1633
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1641
+1642
+1643
+1644
+1645
+1646
+1647
+1648
+1649
+1650
+1651
+1652
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1662
+1663
+1664
+1665
+1666
+1667
+1668
+1669
+1670
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1680
+1681
+1682
+1683
+1684
+1685
+1686
+1687
+1688
+1689
+1690
+1691
+1692
+1693
+1694
+1695
+1696
+1697
+1698
+1699
+1700
+1701
+1702
+1703
+1704
+1705
+1706
+1707
+1708
+1709
+1710
+1711
+1712
+1713
+1714
+1715
+1716
+1717
+1718
+1719
+1720
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1729
+1730
+1731
+1732
+1733
+1734
+1735
+1736
+1737
+1738
+1739
+1740
+1741
+1742
+1743
+1744
+1745
+1746
+1747
+1748
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1756
+1757
+1758
+1759
+1760
+1761
+1762
+1763
+1764
+1765
+1766
+1767
+1768
+1769
+1770
+1771
+1772
+1773
+1774
+1775
+1776
+1777
+1778
+1779
+1780
+1781
+1782
+1783
+1784
+1785
+1786
+1787
+1788
+1789
+1790
+1791
+1792
+1793
+1794
+1795
+1796
+1797
+1798
+1799
+1800
+1801
+1802
+1803
+1804
+1805
+1806
+1807
+1808
+1809
+1810
+1811
+1812
+1813
+1814
+1815
+1816
+1817
+1818
+1819
+1820
+1821
+1822
+1823
+1824
+1825
+1826
+1827
+1828
+1829
+1830
+1831
+1832
+1833
+1834
+1835
+1836
+1837
+1838
+1839
+1840
+1841
+1842
+1843
+1844
+1845
+1846
+1847
+1848
+1849
+1850
+1851
+1852
+1853
+1854
+1855
+1856
+1857
+1858
+1859
+1860
+1861
+1862
+1863
+1864
+1865
+1866
+1867
+1868
+
# ==================================================================================================================== #
+#               _____ ____    _        _      ____            _           _   __  __           _      _                #
+#   _ __  _   _| ____|  _ \  / \      / \    |  _ \ _ __ ___ (_) ___  ___| |_|  \/  | ___   __| | ___| |               #
+#  | '_ \| | | |  _| | | | |/ _ \    / _ \   | |_) | '__/ _ \| |/ _ \/ __| __| |\/| |/ _ \ / _` |/ _ \ |               #
+#  | |_) | |_| | |___| |_| / ___ \  / ___ \ _|  __/| | | (_) | |  __/ (__| |_| |  | | (_) | (_| |  __/ |               #
+#  | .__/ \__, |_____|____/_/   \_\/_/   \_(_)_|   |_|  \___// |\___|\___|\__|_|  |_|\___/ \__,_|\___|_|               #
+#  |_|    |___/                                            |__/                                                        #
+# ==================================================================================================================== #
+# Authors:                                                                                                             #
+#   Patrick Lehmann                                                                                                    #
+#                                                                                                                      #
+# License:                                                                                                             #
+# ==================================================================================================================== #
+# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany                                                            #
+# Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture     #
+#                                                                                                                      #
+# Licensed under the Apache License, Version 2.0 (the "License");                                                      #
+# you may not use this file except in compliance with the License.                                                     #
+# You may obtain a copy of the License at                                                                              #
+#                                                                                                                      #
+#   http://www.apache.org/licenses/LICENSE-2.0                                                                         #
+#                                                                                                                      #
+# Unless required by applicable law or agreed to in writing, software                                                  #
+# distributed under the License is distributed on an "AS IS" BASIS,                                                    #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.                                             #
+# See the License for the specific language governing permissions and                                                  #
+# limitations under the License.                                                                                       #
+#                                                                                                                      #
+# SPDX-License-Identifier: Apache-2.0                                                                                  #
+# ==================================================================================================================== #
+#
+"""An abstract model of EDA tool projects."""
+__author__ =    "Patrick Lehmann"
+__email__ =     "Paebbels@gmail.com"
+__copyright__ = "2014-2024, Patrick Lehmann, Unai Martinez-Corral"
+__license__ =   "Apache License, Version 2.0"
+__version__ =   "0.5.0"
+__keywords__ =  ["eda project", "model", "abstract", "xilinx", "vivado", "osvvm", "file set", "file group", "test bench", "test harness"]
+
+from os.path import relpath as path_relpath
+from pathlib import Path as pathlib_Path
+from sys     import version_info
+from typing  import Dict, Union, Optional as Nullable, List, Iterable, Generator, Tuple, Any as typing_Any, Type, Set, Any
+
+from pyTooling.Common      import getFullyQualifiedName
+from pyTooling.Decorators  import export
+from pyTooling.MetaClasses import ExtendedType
+from pyTooling.Graph       import Graph, Vertex
+from pySVModel             import SystemVerilogVersion
+from pyVHDLModel           import VHDLVersion
+from pySystemRDLModel      import SystemRDLVersion
+
+
+@export
+class Attribute(metaclass=ExtendedType):
+	KEY: str
+	VALUE_TYPE: typing_Any
+
+	@staticmethod
+	def resolve(obj: typing_Any, key: Type['Attribute']):
+		if isinstance(obj, File):
+			return obj._fileSet[key]
+		elif isinstance(obj, FileSet):
+			return obj._design[key]
+		elif isinstance(obj, Design):
+			return obj._project[key]
+		else:
+			raise Exception("Resolution error")
+
+
+@export
+class FileType(ExtendedType):
+	"""
+	A :term:`meta-class` to construct *FileType* classes.
+
+	Modifications done by this meta-class:
+	* Register all classes of type :class:`FileType` or derived variants in a class field :attr:`FileType.FileTypes` in this meta-class.
+	"""
+
+	FileTypes: Dict[str, 'FileType'] = {}     #: Dictionary of all classes of type :class:`FileType` or derived variants
+	Any: 'FileType'
+
+	def __init__(cls, name: str, bases: Tuple[type, ...], dictionary: Dict[str, typing_Any], **kwargs):
+		super().__init__(name, bases, dictionary, **kwargs)
+		cls.Any = cls
+
+	def __new__(cls, className, baseClasses, classMembers: Dict, *args, **kwargs):
+		fileType = super().__new__(cls, className, baseClasses, classMembers, *args, **kwargs)
+		cls.FileTypes[className] = fileType
+		return fileType
+
+	def __getattr__(cls, item) -> 'FileType':
+		if item[:2] != "__" and item[-2:] != "__":
+			return cls.FileTypes[item]
+		else:
+			return super().__getattribute__(item)
+
+	def __contains__(cls, item) -> bool:
+		return issubclass(item, cls)
+
+
+@export
+class File(metaclass=FileType, slots=True):
+	"""
+	A :term:`File` represents a file in a design. This :term:`base-class` is used
+	for all derived file classes.
+
+	A file can be created standalone and later associated to a fileset, design and
+	project. Or a fileset, design and/or project can be associated immediately
+	while creating a file.
+
+	:arg path:    Relative or absolute path to the file.
+	:arg project: Project the file is associated with.
+	:arg design:  Design the file is associated with.
+	:arg fileSet: Fileset the file is associated with.
+	"""
+
+	_path:       pathlib_Path
+	_fileType:   'FileType'
+	_project:    Nullable['Project']
+	_design:     Nullable['Design']
+	_fileSet:    Nullable['FileSet']
+	_attributes: Dict[Type[Attribute], typing_Any]
+
+	def __init__(
+		self,
+		path: pathlib_Path,
+		project: Nullable["Project"] = None,
+		design:  Nullable["Design"] =  None,
+		fileSet: Nullable["FileSet"] = None
+	):
+		self._fileType =  getattr(FileTypes, self.__class__.__name__)
+		self._path =      path
+		if project is not None:
+			self._project = project
+			self._design =  design
+			if fileSet is not None:
+				self.FileSet =  fileSet
+		elif design is not None:
+			self._project = design._project
+			self._design =  design
+			self.FileSet =  design.DefaultFileSet if fileSet is None else fileSet
+		elif fileSet is not None:
+			design = fileSet._design
+			if design is not None:
+				self._project = design._project
+			else:
+				self._project = None
+			self._design =    design
+			self.FileSet =    fileSet
+		else:
+			self._project = None
+			self._design =  None
+			self._fileSet = None
+
+		self._attributes = {}
+		self._registerAttributes()
+
+	def _registerAttributes(self) -> None:
+		pass
+
+	@property
+	def FileType(self) -> 'FileType':
+		"""Read-only property to return the file type of this file."""
+		return self._fileType
+
+	@property
+	def Path(self) -> pathlib_Path:
+		"""Read-only property returning the path of this file."""
+		return self._path
+
+	# TODO: setter?
+
+	@property
+	def ResolvedPath(self) -> pathlib_Path:
+		"""Read-only property returning the resolved path of this file."""
+		if self._path.is_absolute():
+			return self._path.resolve()
+		elif self._fileSet is not None:
+			path = (self._fileSet.ResolvedPath / self._path).resolve()
+
+			if path.is_absolute():
+				return path
+			else:
+				# WORKAROUND: https://stackoverflow.com/questions/67452690/pathlib-path-relative-to-vs-os-path-relpath
+				return pathlib_Path(path_relpath(path, pathlib_Path.cwd()))
+		else:
+			# TODO: message and exception type
+			raise Exception("")
+
+	@property
+	def Project(self) -> Nullable['Project']:
+		"""Property setting or returning the project this file is used in."""
+		return self._project
+
+	@Project.setter
+	def Project(self, value: 'Project') -> None:
+		self._project = value
+
+		if self._fileSet is None:
+			self._project.DefaultDesign.DefaultFileSet.AddFile(self)
+
+	@property
+	def Design(self) -> Nullable['Design']:
+		"""Property setting or returning the design this file is used in."""
+		return self._design
+
+	@Design.setter
+	def Design(self, value: 'Design') -> None:
+		self._design = value
+
+		if self._fileSet is None:
+			self._design.DefaultFileSet.AddFile(self)
+
+		if self._project is None:
+			self._project = value._project
+		elif self._project is not value._project:
+			raise Exception("The design's project is not identical to the already assigned project.")
+
+	@property
+	def FileSet(self) -> Nullable['FileSet']:
+		"""Property setting or returning the fileset this file is used in."""
+		return self._fileSet
+
+	@FileSet.setter
+	def FileSet(self, value: 'FileSet') -> None:
+		self._fileSet = value
+		value._files.append(self)
+
+	def Validate(self) -> None:
+		"""Validate this file."""
+		if self._path is None:
+			raise Exception("Validation: File has no path.")
+		try:
+			path = self.ResolvedPath
+		except Exception as ex:
+			raise Exception(f"Validation: File '{self._path}' could not compute resolved path.") from ex
+		if not path.exists():
+			raise Exception(f"Validation: File '{self._path}' (={path}) does not exist.")
+		if not path.is_file():
+			raise Exception(f"Validation: File '{self._path}' (={path}) is not a file.")
+
+		if self._fileSet is None:
+			raise Exception(f"Validation: File '{self._path}' has no fileset.")
+		if self._design is None:
+			raise Exception(f"Validation: File '{self._path}' has no design.")
+		if self._project is None:
+			raise Exception(f"Validation: File '{self._path}' has no project.")
+
+	def __len__(self) -> int:
+		"""
+		Returns number of attributes set on this file.
+
+		:returns: The number if attributes set on this file.
+		"""
+		return len(self._attributes)
+
+	def __getitem__(self, key: Type[Attribute]) -> Any:
+		"""Index access for returning attributes on this file.
+
+		:param key:        The attribute type.
+		:returns:          The attribute's value.
+		:raises TypeError: When parameter 'key' is not a subclass of Attribute.
+		"""
+		if not issubclass(key, Attribute):
+			raise TypeError("Parameter 'key' is not an 'Attribute'.")
+
+		try:
+			return self._attributes[key]
+		except KeyError:
+			try:
+				return key.resolve(self, key)
+			except KeyError:
+				attribute = key()
+				self._attributes[key] = attribute
+				return attribute
+
+	def __setitem__(self, key: Type[Attribute], value: typing_Any) -> None:
+		"""
+		Index access for adding or setting attributes on this file.
+
+		:param key:        The attribute type.
+		:param value:      The attributes value.
+		:raises TypeError: When parameter 'key' is not a subclass of Attribute.
+		"""
+		if not issubclass(key, Attribute):
+			raise TypeError("Parameter 'key' is not an 'Attribute'.")
+
+		self._attributes[key] = value
+
+	def __delitem__(self, key: Type[Attribute]) -> None:
+		"""
+		Index access for deleting attributes on this file.
+
+		:param key: The attribute type.
+		"""
+		if not issubclass(key, Attribute):
+			raise TypeError("Parameter 'key' is not an 'Attribute'.")
+
+		del self._attributes[key]
+
+	def __str__(self) -> str:
+		return f"{self._path}"
+
+
+FileTypes = File
+
+
+@export
+class HumanReadableContent(metaclass=ExtendedType, mixin=True):
+	"""A file type representing human-readable contents."""
+
+
+@export
+class XMLContent(HumanReadableContent, mixin=True):
+	"""A file type representing XML contents."""
+
+
+@export
+class YAMLContent(HumanReadableContent, mixin=True):
+	"""A file type representing YAML contents."""
+
+
+@export
+class JSONContent(HumanReadableContent, mixin=True):
+	"""A file type representing JSON contents."""
+
+
+@export
+class INIContent(HumanReadableContent, mixin=True):
+	"""A file type representing INI contents."""
+
+
+@export
+class TOMLContent(HumanReadableContent, mixin=True):
+	"""A file type representing TOML contents."""
+
+
+@export
+class TCLContent(HumanReadableContent, mixin=True):
+	"""A file type representing content in TCL code."""
+
+
+@export
+class SDCContent(TCLContent, mixin=True):
+	"""A file type representing contents as Synopsys Design Constraints (SDC)."""
+
+
+@export
+class PythonContent(HumanReadableContent, mixin=True):
+	"""A file type representing contents as Python source code."""
+
+
+@export
+class TextFile(File, HumanReadableContent):
+	"""A text file (``*.txt``)."""
+
+
+@export
+class LogFile(File, HumanReadableContent):
+	"""A log file (``*.log``)."""
+
+
+@export
+class XMLFile(File, XMLContent):
+	"""An XML file (``*.xml``)."""
+
+
+@export
+class SourceFile(File):
+	"""Base-class of all source files."""
+
+
+@export
+class HDLSourceFile(SourceFile):
+	"""Base-class of all HDL source files."""
+
+
+@export
+class RDLSourceFile(SourceFile):
+	"""Base-class of all RDL source files."""
+
+
+@export
+class NetlistFile(SourceFile):
+	"""Base-class of all netlist source files."""
+
+
+@export
+class EDIFNetlistFile(NetlistFile):
+	"""Netlist file in EDIF (Electronic Design Interchange Format)."""
+
+
+@export
+class TCLSourceFile(SourceFile, TCLContent):
+	"""A TCL source file."""
+
+
+@export
+class VHDLSourceFile(HDLSourceFile, HumanReadableContent):
+	"""
+	A VHDL source file (of any language version).
+
+	:arg path:        Relative or absolute path to the file.
+	:arg vhdlLibrary: VHDLLibrary this VHDL source file is associated wih.
+	:arg vhdlVersion: VHDLVersion this VHDL source file is associated wih.
+	:arg project:     Project the file is associated with.
+	:arg design:      Design the file is associated with.
+	:arg fileSet:     Fileset the file is associated with.
+	"""
+
+	_vhdlLibrary: Nullable['VHDLLibrary']
+	_vhdlVersion: VHDLVersion
+
+	def __init__(self, path: pathlib_Path, vhdlLibrary: Union[str, 'VHDLLibrary'] = None, vhdlVersion: Nullable[VHDLVersion] = None, project: Nullable["Project"] = None, design: Nullable["Design"] = None, fileSet: Nullable["FileSet"] = None):
+		super().__init__(path, project, design, fileSet)
+
+		if isinstance(vhdlLibrary, str):
+			if design is not None:
+				try:
+					vhdlLibrary = design.VHDLLibraries[vhdlLibrary]
+				except KeyError as ex:
+					raise Exception(f"VHDL library '{vhdlLibrary}' not found in design '{design.Name}'.") from ex
+			elif project is not None:
+				try:
+					vhdlLibrary = project.DefaultDesign.VHDLLibraries[vhdlLibrary]
+				except KeyError as ex:
+					raise Exception(f"VHDL library '{vhdlLibrary}' not found in default design '{project.DefaultDesign.Name}'.") from ex
+			else:
+				raise Exception(f"Can't lookup VHDL library because neither 'project' nor 'design' is given as a parameter.")
+		elif isinstance(vhdlLibrary, VHDLLibrary):
+			self._vhdlLibrary = vhdlLibrary
+			vhdlLibrary.AddFile(self)
+		elif vhdlLibrary is None:
+			self._vhdlLibrary = None
+		else:
+			ex = TypeError(f"Parameter 'vhdlLibrary' is neither a 'str' nor 'VHDLibrary'.")
+			if version_info >= (3, 11):  # pragma: no cover
+				ex.add_note(f"Got type '{getFullyQualifiedName(vhdlLibrary)}'.")
+			raise ex
+
+		self._vhdlVersion = vhdlVersion
+
+	def Validate(self) -> None:
+		"""Validate this VHDL source file."""
+		super().Validate()
+
+		try:
+			_ = self.VHDLLibrary
+		except Exception as ex:
+			raise Exception(f"Validation: VHDLSourceFile '{self._path}' (={self.ResolvedPath}) has no VHDLLibrary assigned.") from ex
+		try:
+			_ = self.VHDLVersion
+		except Exception as ex:
+			raise Exception(f"Validation: VHDLSourceFile '{self._path}' (={self.ResolvedPath}) has no VHDLVersion assigned.") from ex
+
+	@property
+	def VHDLLibrary(self) -> 'VHDLLibrary':
+		"""Property setting or returning the VHDL library this VHDL source file is used in."""
+		if self._vhdlLibrary is not None:
+			return self._vhdlLibrary
+		elif self._fileSet is not None:
+			return self._fileSet.VHDLLibrary
+		else:
+			raise Exception("VHDLLibrary was neither set locally nor globally.")
+
+	@VHDLLibrary.setter
+	def VHDLLibrary(self, value: 'VHDLLibrary') -> None:
+		self._vhdlLibrary = value
+		value._files.append(self)
+
+	@property
+	def VHDLVersion(self) -> VHDLVersion:
+		"""Property setting or returning the VHDL version this VHDL source file is used in."""
+		if self._vhdlVersion is not None:
+			return self._vhdlVersion
+		elif self._fileSet is not None:
+			return self._fileSet.VHDLVersion
+		else:
+			raise Exception("VHDLVersion was neither set locally nor globally.")
+
+	@VHDLVersion.setter
+	def VHDLVersion(self, value: VHDLVersion) -> None:
+		self._vhdlVersion = value
+
+	def __repr__(self) -> str:
+		return f"<VHDL file: '{self.ResolvedPath}'; lib: '{self.VHDLLibrary}'; version: {self.VHDLVersion}>"
+
+
+class VerilogMixIn(metaclass=ExtendedType, mixin=True):
+	@property
+	def VerilogVersion(self) -> SystemVerilogVersion:
+		"""Property setting or returning the Verilog version this Verilog source file is used in."""
+		if self._version is not None:
+			return self._version
+		elif self._fileSet is not None:
+			return self._fileSet.VerilogVersion
+		else:
+			raise Exception("VerilogVersion was neither set locally nor globally.")
+
+	@VerilogVersion.setter
+	def VerilogVersion(self, value: SystemVerilogVersion) -> None:
+		self._version = value
+
+
+class SystemVerilogMixIn(metaclass=ExtendedType, mixin=True):
+	@property
+	def SVVersion(self) -> SystemVerilogVersion:
+		"""Property setting or returning the SystemVerilog version this SystemVerilog source file is used in."""
+		if self._version is not None:
+			return self._version
+		elif self._fileSet is not None:
+			return self._fileSet.SVVersion
+		else:
+			raise Exception("SVVersion was neither set locally nor globally.")
+
+	@SVVersion.setter
+	def SVVersion(self, value: SystemVerilogVersion) -> None:
+		self._version = value
+
+
+@export
+class VerilogBaseFile(HDLSourceFile, HumanReadableContent):
+	_version: SystemVerilogVersion
+
+	def __init__(self, path: pathlib_Path, version: Nullable[SystemVerilogVersion] = None, project: Nullable["Project"] = None, design: Nullable["Design"] = None, fileSet: Nullable["FileSet"] = None):
+		super().__init__(path, project, design, fileSet)
+
+		self._version = version
+
+
+@export
+class VerilogSourceFile(VerilogBaseFile, VerilogMixIn):
+	"""A Verilog source file (of any language version)."""
+
+
+@export
+class VerilogHeaderFile(VerilogBaseFile, VerilogMixIn):
+	"""A Verilog header file (of any language version)."""
+
+
+@export
+class SystemVerilogBaseFile(VerilogBaseFile):
+	...
+
+
+@export
+class SystemVerilogSourceFile(SystemVerilogBaseFile, SystemVerilogMixIn):
+	"""A SystemVerilog source file (of any language version)."""
+
+
+@export
+class SystemVerilogHeaderFile(SystemVerilogBaseFile, SystemVerilogMixIn):
+	"""A SystemVerilog header file (of any language version)."""
+
+
+@export
+class SystemRDLSourceFile(RDLSourceFile, HumanReadableContent):
+	"""A SystemRDL source file (of any language version)."""
+
+	_srdlVersion: SystemRDLVersion
+
+	def __init__(self, path: pathlib_Path, srdlVersion: Nullable[SystemRDLVersion] = None, project: Nullable["Project"] = None, design: Nullable["Design"] = None, fileSet: Nullable["FileSet"] = None):
+		super().__init__(path, project, design, fileSet)
+
+		self._srdlVersion = srdlVersion
+
+	@property
+	def SystemRDLVersion(self) -> SystemRDLVersion:
+		"""Property setting or returning the SystemRDL version this SystemRDL source file is used in."""
+		if self._srdlVersion is not None:
+			return self._srdlVersion
+		elif self._fileSet is not None:
+			return self._fileSet.SRDLVersion
+		else:
+			raise Exception("SRDLVersion was neither set locally nor globally.")
+
+	@SystemRDLVersion.setter
+	def SystemRDLVersion(self, value: SystemRDLVersion) -> None:
+		self._srdlVersion = value
+
+
+@export
+class PythonSourceFile(SourceFile, PythonContent):
+	"""A Python source file."""
+
+
+# TODO: move to a Cocotb module
+@export
+class CocotbPythonFile(PythonSourceFile):
+	"""A Python source file used by Cocotb."""
+
+
+@export
+class ConstraintFile(File, HumanReadableContent):
+	"""Base-class of all constraint files."""
+
+
+@export
+class ProjectFile(File):
+	"""Base-class of all tool-specific project files."""
+
+
+@export
+class CSourceFile(SourceFile):
+	"""Base-class of all ANSI-C source files."""
+
+
+@export
+class CppSourceFile(SourceFile):
+	"""Base-class of all ANSI-C++ source files."""
+
+
+@export
+class SettingFile(File):
+	"""Base-class of all tool-specific setting files."""
+
+
+@export
+class SimulationAnalysisFile(File):
+	"""Base-class of all tool-specific analysis files."""
+
+
+@export
+class SimulationElaborationFile(File):
+	"""Base-class of all tool-specific elaboration files."""
+
+
+@export
+class SimulationStartFile(File):
+	"""Base-class of all tool-specific simulation start-up files."""
+
+
+@export
+class SimulationRunFile(File):
+	"""Base-class of all tool-specific simulation run (execution) files."""
+
+
+@export
+class WaveformConfigFile(File):
+	"""Base-class of all tool-specific waveform configuration files."""
+
+
+@export
+class WaveformDatabaseFile(File):
+	"""Base-class of all tool-specific waveform database files."""
+
+
+@export
+class WaveformExchangeFile(File):
+	"""Base-class of all tool-independent waveform exchange files."""
+
+
+@export
+class FileSet(metaclass=ExtendedType, slots=True):
+	"""
+	A :term:`FileSet` represents a group of files. Filesets can have sub-filesets.
+
+	The order of insertion is preserved. A fileset can be created standalone and
+	later associated to another fileset, design and/or project. Or a fileset,
+	design and/or project can be associated immediately while creating the
+	fileset.
+
+	:arg name:            Name of this fileset.
+	:arg topLevel:        Name of the fileset's toplevel.
+	:arg directory:       Path of this fileset (absolute or relative to a parent fileset or design).
+	:arg project:         Project the file is associated with.
+	:arg design:          Design the file is associated with.
+	:arg parent:          Parent fileset if this fileset is nested.
+	:arg vhdlLibrary:     Default VHDL library for files in this fileset, if not specified for the file itself.
+	:arg vhdlVersion:     Default VHDL version for files in this fileset, if not specified for the file itself.
+	:arg verilogVersion:  Default Verilog version for files in this fileset, if not specified for the file itself.
+	:arg svVersion:       Default SystemVerilog version for files in this fileset, if not specified for the file itself.
+	:arg srdlVersion:     Default SystemRDL version for files in this fileset, if not specified for the file itself.
+	"""
+
+	_name:            str
+	_topLevel:        Nullable[str]
+	_project:         Nullable['Project']
+	_design:          Nullable['Design']
+	_directory:       pathlib_Path
+	_parent:          Nullable['FileSet']
+	_fileSets:        Dict[str, 'FileSet']
+	_files:           List[File]
+	_set:             Set
+	_attributes:      Dict[Type[Attribute], typing_Any]
+	_vhdlLibraries:   Dict[str, 'VHDLLibrary']
+	_vhdlLibrary:     'VHDLLibrary'
+	_vhdlVersion:     VHDLVersion
+	_verilogVersion:  SystemVerilogVersion
+	_svVersion:       SystemVerilogVersion
+	_srdlVersion:     SystemRDLVersion
+
+	def __init__(
+		self,
+		name: str,
+		topLevel:       Nullable[str] =                  None,
+		directory:      pathlib_Path =                   pathlib_Path("."),
+		project:        Nullable["Project"] =            None,
+		design:         Nullable["Design"] =             None,
+		parent:         Nullable['FileSet'] =            None,
+		vhdlLibrary:    Union[str, 'VHDLLibrary'] =      None,
+		vhdlVersion:    Nullable[VHDLVersion] =          None,
+		verilogVersion: Nullable[SystemVerilogVersion] = None,
+		svVersion:      Nullable[SystemVerilogVersion] = None,
+		srdlVersion:    Nullable[SystemRDLVersion] =     None
+	):
+		self._name =      name
+		self._topLevel =  topLevel
+		if project is not None:
+			self._project = project
+			self._design =  design if design is not None else project.DefaultDesign
+
+		elif design is not None:
+			self._project = design._project
+			self._design =  design
+		else:
+			self._project = None
+			self._design =  None
+		self._directory = directory
+		self._parent =    parent
+		self._fileSets =  {}
+		self._files =     []
+		self._set =     set()
+
+		if design is not None:
+			design._fileSets[name] = self
+
+		self._attributes =      {}
+		self._vhdlLibraries =   {}
+
+		# TODO: handle if vhdlLibrary is a string
+		self._vhdlLibrary =     vhdlLibrary
+		self._vhdlVersion =     vhdlVersion
+		self._verilogVersion =  verilogVersion
+		self._svVersion =       svVersion
+		self._srdlVersion =     srdlVersion
+
+	@property
+	def Name(self) -> str:
+		"""Property setting or returning the fileset's name."""
+		return self._name
+
+	@Name.setter
+	def Name(self, value: str) -> None:
+		self._name = value
+
+	@property
+	def TopLevel(self) -> str:
+		"""Property setting or returning the fileset's toplevel."""
+		return self._topLevel
+
+	@TopLevel.setter
+	def TopLevel(self, value: str) -> None:
+		self._topLevel = value
+
+	@property
+	def Project(self) -> Nullable['Project']:
+		"""Property setting or returning the project this fileset is used in."""
+		return self._project
+
+	@Project.setter
+	def Project(self, value: 'Project') -> None:
+		self._project = value
+
+	@property
+	def Design(self) -> Nullable['Design']:
+		"""Property setting or returning the design this fileset is used in."""
+		if self._design is not None:
+			return self._design
+		elif self._parent is not None:
+			return self._parent.Design
+		else:
+			return None
+			# TODO: raise exception instead
+			# QUESTION: how to handle if design and parent is set?
+
+	@Design.setter
+	def Design(self, value: 'Design') -> None:
+		self._design = value
+		if self._project is None:
+			self._project = value._project
+		elif self._project is not value._project:
+			raise Exception("The design's project is not identical to the already assigned project.")
+
+	@property
+	def Directory(self) -> pathlib_Path:
+		"""Property setting or returning the directory this fileset is located in."""
+		return self._directory
+
+	@Directory.setter
+	def Directory(self, value: pathlib_Path) -> None:
+		self._directory = value
+
+	@property
+	def ResolvedPath(self) -> pathlib_Path:
+		"""Read-only property returning the resolved path of this fileset."""
+		if self._directory.is_absolute():
+			return self._directory.resolve()
+		else:
+			if self._parent is not None:
+				directory = self._parent.ResolvedPath
+			elif self._design is not None:
+				directory = self._design.ResolvedPath
+			elif self._project is not None:
+				directory = self._project.ResolvedPath
+			else:
+				# TODO: message and exception type
+				raise Exception("")
+
+			directory = (directory / self._directory).resolve()
+			if directory.is_absolute():
+				return directory
+			else:
+				# WORKAROUND: https://stackoverflow.com/questions/67452690/pathlib-path-relative-to-vs-os-path-relpath
+				return pathlib_Path(path_relpath(directory, pathlib_Path.cwd()))
+
+	@property
+	def Parent(self) -> Nullable['FileSet']:
+		"""Property setting or returning the parent fileset this fileset is used in."""
+		return self._parent
+
+	@Parent.setter
+	def Parent(self, value: 'FileSet') -> None:
+		self._parent = value
+		value._fileSets[self._name] = self
+		# TODO: check it it already exists
+		# QUESTION: make an Add fileset method?
+
+	@property
+	def FileSets(self) -> Dict[str, 'FileSet']:
+		"""Read-only property returning the dictionary of sub-filesets."""
+		return self._fileSets
+
+	def Files(self, fileType: FileType = FileTypes.Any, fileSet: Union[bool, str, 'FileSet'] = None) -> Generator[File, None, None]:
+		"""
+		Method returning the files of this fileset.
+
+		:arg fileType: A filter for file types. Default: ``Any``.
+		:arg fileSet:  Specifies how to handle sub-filesets.
+		"""
+		if fileSet is False:
+			for file in self._files:
+				if file.FileType in fileType:
+					yield file
+		elif fileSet is None:
+			for fileSet in self._fileSets.values():
+				for file in fileSet.Files(fileType):
+					yield file
+			for file in self._files:
+				if file.FileType in fileType:
+					yield file
+		else:
+			if isinstance(fileSet, str):
+				fileSetName = fileSet
+				try:
+					fileSet = self._fileSets[fileSetName]
+				except KeyError as ex:
+					raise Exception(f"Fileset {fileSetName} not bound to fileset {self.Name}.") from ex
+			elif not isinstance(fileSet, FileSet):
+				raise TypeError("Parameter 'fileSet' is not of type 'str' or 'FileSet' nor value 'None'.")
+
+			for file in fileSet.Files(fileType):
+				yield file
+
+	def AddFileSet(self, fileSet: "FileSet") -> None:
+		"""
+		Method to add a single sub-fileset to this fileset.
+
+		:arg fileSet: A fileset to add to this fileset as sub-fileset.
+		"""
+		if not isinstance(fileSet, FileSet):
+			raise ValueError("Parameter 'fileSet' is not of type ProjectModel.FileSet.")
+		elif fileSet in self._fileSets:
+			raise Exception("Sub-fileset already contains this fileset.")
+		elif fileSet.Name in self._fileSets.keys():
+			raise Exception(f"Fileset already contains a sub-fileset named '{fileSet.Name}'.")
+
+		self._fileSets[fileSet.Name] = fileSet
+		fileSet._parent = self
+
+	def AddFileSets(self, fileSets: Iterable["FileSet"]) -> None:
+		"""
+		Method to add a multiple sub-filesets to this fileset.
+
+		:arg fileSets: An iterable of filesets to add each to the fileset.
+		"""
+		for fileSet in fileSets:
+			self.AddFileSet(fileSet)
+
+	@property
+	def FileSetCount(self) -> int:
+		"""Returns number of file sets excl. sub-filesets."""
+		return len(self._fileSets)
+
+	@property
+	def TotalFileSetCount(self) -> int:
+		"""Returns number of file sets incl. sub-filesets."""
+		fileSetCount = len(self._fileSets)
+		for fileSet in self._fileSets.values():
+			fileSetCount += fileSet.TotalFileSetCount
+
+		return fileSetCount
+
+	def AddFile(self, file: File) -> None:
+		"""
+		Method to add a single file to this fileset.
+
+		:arg file: A file to add to this fileset.
+		"""
+		if not isinstance(file, File):
+			raise TypeError("Parameter 'file' is not of type ProjectModel.File.")
+		elif file._fileSet is not None:
+			ex = ValueError(f"File '{file.Path!s}' is already part of fileset '{file.FileSet.Name}'.")
+			if version_info >= (3, 11):  # pragma: no cover
+				ex.add_note(f"A file can't be assigned to another fileset.")
+			raise ex
+		elif file in self._set:
+			ex = ValueError(f"File '{file.Path!s}' is already part of this fileset.")
+			if version_info >= (3, 11):  # pragma: no cover
+				ex.add_note(f"A file can't be added twice to a fileset.")
+			raise ex
+
+		self._files.append(file)
+		self._set.add(file)
+		file._fileSet = self
+
+	def AddFiles(self, files: Iterable[File]) -> None:
+		"""
+		Method to add a multiple files to this fileset.
+
+		:arg files: An iterable of files to add each to the fileset.
+		"""
+		for file in files:
+			self.AddFile(file)
+
+	@property
+	def FileCount(self) -> int:
+		"""Returns number of files excl. sub-filesets."""
+		return len(self._files)
+
+	@property
+	def TotalFileCount(self) -> int:
+		"""Returns number of files incl. the files in sub-filesets."""
+		fileCount = len(self._files)
+		for fileSet in self._fileSets.values():
+			fileCount += fileSet.FileCount
+
+		return fileCount
+
+	def Validate(self) -> None:
+		"""Validate this fileset."""
+		if self._name is None or self._name == "":
+			raise Exception("Validation: FileSet has no name.")
+
+		if self._directory is None:
+			raise Exception(f"Validation: FileSet '{self._name}' has no directory.")
+		try:
+			path = self.ResolvedPath
+		except Exception as ex:
+			raise Exception(f"Validation: FileSet '{self._name}' could not compute resolved path.") from ex
+		if not path.exists():
+			raise Exception(f"Validation: FileSet '{self._name}'s directory '{path}' does not exist.")
+		if not path.is_dir():
+			raise Exception(f"Validation: FileSet '{self._name}'s directory '{path}' is not a directory.")
+
+		if self._design is None:
+			raise Exception(f"Validation: FileSet '{self._directory}' has no design.")
+		if self._project is None:
+			raise Exception(f"Validation: FileSet '{self._directory}' has no project.")
+
+		for fileSet in self._fileSets.values():
+			fileSet.Validate()
+		for file in self._files:
+			file.Validate()
+
+	def GetOrCreateVHDLLibrary(self, name) -> 'VHDLLibrary':
+		if name in self._vhdlLibraries:
+			return self._vhdlLibraries[name]
+		elif name in self._design._vhdlLibraries:
+			library = self._design._vhdlLibraries[name]
+			self._vhdlLibraries[name] = library
+			return library
+		else:
+			library = VHDLLibrary(name, design=self._design, vhdlVersion=self._vhdlVersion)
+			self._vhdlLibraries[name] = library
+			return library
+
+	@property
+	def VHDLLibrary(self) -> 'VHDLLibrary':
+		"""Property setting or returning the VHDL library of this fileset."""
+		if self._vhdlLibrary is not None:
+			return self._vhdlLibrary
+		elif self._parent is not None:
+			return self._parent.VHDLLibrary
+		elif self._design is not None:
+			return self._design.VHDLLibrary
+		else:
+			raise Exception("VHDLLibrary was neither set locally nor globally.")
+
+	@VHDLLibrary.setter
+	def VHDLLibrary(self, value: 'VHDLLibrary') -> None:
+		self._vhdlLibrary = value
+
+	@property
+	def VHDLVersion(self) -> VHDLVersion:
+		"""Property setting or returning the VHDL version of this fileset."""
+		if self._vhdlVersion is not None:
+			return self._vhdlVersion
+		elif self._parent is not None:
+			return self._parent.VHDLVersion
+		elif self._design is not None:
+			return self._design.VHDLVersion
+		else:
+			raise Exception("VHDLVersion was neither set locally nor globally.")
+
+	@VHDLVersion.setter
+	def VHDLVersion(self, value: VHDLVersion) -> None:
+		self._vhdlVersion = value
+
+	@property
+	def VerilogVersion(self) -> SystemVerilogVersion:
+		"""Property setting or returning the Verilog version of this fileset."""
+		if self._verilogVersion is not None:
+			return self._verilogVersion
+		elif self._parent is not None:
+			return self._parent.VerilogVersion
+		elif self._design is not None:
+			return self._design.VerilogVersion
+		else:
+			raise Exception("VerilogVersion was neither set locally nor globally.")
+
+	@VerilogVersion.setter
+	def VerilogVersion(self, value: SystemVerilogVersion) -> None:
+		self._verilogVersion = value
+
+	@property
+	def SVVersion(self) -> SystemVerilogVersion:
+		"""Property setting or returning the SystemVerilog version of this fileset."""
+		if self._svVersion is not None:
+			return self._svVersion
+		elif self._parent is not None:
+			return self._parent.SVVersion
+		elif self._design is not None:
+			return self._design.SVVersion
+		else:
+			raise Exception("SVVersion was neither set locally nor globally.")
+
+	@SVVersion.setter
+	def SVVersion(self, value: SystemVerilogVersion) -> None:
+		self._svVersion = value
+
+	@property
+	def SRDLVersion(self) -> SystemRDLVersion:
+		if self._srdlVersion is not None:
+			return self._srdlVersion
+		elif self._parent is not None:
+			return self._parent.SRDLVersion
+		elif self._design is not None:
+			return self._design.SRDLVersion
+		else:
+			raise Exception("SRDLVersion was neither set locally nor globally.")
+
+	@SRDLVersion.setter
+	def SRDLVersion(self, value: SystemRDLVersion) -> None:
+		self._srdlVersion = value
+
+	def __len__(self) -> int:
+		"""
+		Returns number of attributes set on this fileset.
+
+		:returns: The number if attributes set on this fileset.
+		"""
+		return len(self._attributes)
+
+	def __getitem__(self, key: Type[Attribute]) -> Any:
+		"""Index access for returning attributes on this fileset.
+
+		:param key:        The attribute type.
+		:returns:          The attribute's value.
+		:raises TypeError: When parameter 'key' is not a subclass of Attribute.
+		"""
+		if not issubclass(key, Attribute):
+			raise TypeError("Parameter 'key' is not an 'Attribute'.")
+
+		try:
+			return self._attributes[key]
+		except KeyError:
+			return key.resolve(self, key)
+
+	def __setitem__(self, key: Type[Attribute], value: typing_Any) -> None:
+		"""
+		Index access for adding or setting attributes on this fileset.
+
+		:param key:        The attribute type.
+		:param value:      The attributes value.
+		:raises TypeError: When parameter 'key' is not a subclass of Attribute.
+		"""
+		if not issubclass(key, Attribute):
+			raise TypeError("Parameter 'key' is not an 'Attribute'.")
+
+		self._attributes[key] = value
+
+	def __delitem__(self, key: Type[Attribute]) -> None:
+		"""
+		Index access for deleting attributes on this fileset.
+
+		:param key: The attribute type.
+		"""
+		if not issubclass(key, Attribute):
+			raise TypeError("Parameter 'key' is not an 'Attribute'.")
+
+		del self._attributes[key]
+
+	def __str__(self) -> str:
+		"""Returns the fileset's name."""
+		return self._name
+
+
+@export
+class VHDLLibrary(metaclass=ExtendedType, slots=True):
+	"""
+	A :term:`VHDLLibrary` represents a group of VHDL source files compiled into the same VHDL library.
+
+	:arg name:        The VHDL libraries' name.
+	:arg project:     Project the VHDL library is associated with.
+	:arg design:      Design the VHDL library is associated with.
+	:arg vhdlVersion: Default VHDL version for files in this VHDL library, if not specified for the file itself.
+	"""
+
+	_name:        str
+	_project:     Nullable['Project']
+	_design:      Nullable['Design']
+	_files:       List[File]
+	_vhdlVersion: VHDLVersion
+
+	_dependencyNode: Vertex
+
+	def __init__(
+		self,
+		name: str,
+		project:     Nullable["Project"] =   None,
+		design:      Nullable["Design"] =    None,
+		vhdlVersion: Nullable[VHDLVersion] = None
+	):
+		self._name =    name
+		if project is not None:
+			self._project = project
+			self._design = project._defaultDesign if design is None else design
+			self._dependencyNode = Vertex(value=self, graph=self._design._vhdlLibraryDependencyGraph)
+
+			if name in self._design._vhdlLibraries:
+				raise Exception(f"Library '{name}' already in design '{self._design.Name}'.")
+			else:
+				self._design._vhdlLibraries[name] = self
+
+		elif design is not None:
+			self._project = design._project
+			self._design = design
+			self._dependencyNode = Vertex(value=self, graph=design._vhdlLibraryDependencyGraph)
+
+			if name in design._vhdlLibraries:
+				raise Exception(f"Library '{name}' already in design '{design.Name}'.")
+			else:
+				design._vhdlLibraries[name] = self
+
+		else:
+			self._project = None
+			self._design =  None
+			self._dependencyNode = None
+
+		self._files =     []
+		self._vhdlVersion = vhdlVersion
+
+	@property
+	def Name(self) -> str:
+		return self._name
+
+	@property
+	def Project(self) -> Nullable['Project']:
+		"""Property setting or returning the project this VHDL library is used in."""
+		return self._project
+
+	@Project.setter
+	def Project(self, value: 'Project') -> None:
+		if not isinstance(value, Project):
+			raise TypeError("Parameter 'value' is not of type 'Project'.")
+
+		if value is None:
+			# TODO: unlink VHDLLibrary from project
+			self._project = None
+		else:
+			self._project = value
+			if self._design is None:
+				self._design = value._defaultDesign
+
+	@property
+	def Design(self) -> Nullable['Design']:
+		"""Property setting or returning the design this VHDL library is used in."""
+		return self._design
+
+	@Design.setter
+	def Design(self, value: 'Design') -> None:
+		if not isinstance(value, Design):
+			raise TypeError("Parameter 'value' is not of type 'Design'.")
+
+		if value is None:
+			# TODO: unlink VHDLLibrary from design
+			self._design = None
+		else:
+			if self._design is None:
+				self._design = value
+				self._dependencyNode = Vertex(value=self, graph=self._design._vhdlLibraryDependencyGraph)
+			elif self._design is not value:
+				# TODO: move VHDLLibrary to other design
+				# TODO: create new vertex in dependency graph and remove vertex from old graph
+				self._design = value
+			else:
+				pass
+
+			if self._project is None:
+				self._project = value._project
+			elif self._project is not value._project:
+				raise Exception("The design's project is not identical to the already assigned project.")
+
+	@property
+	def Files(self) -> Generator[File, None, None]:
+		"""Read-only property to return all files in this VHDL library."""
+		for file in self._files:
+			yield file
+
+	@property
+	def VHDLVersion(self) -> VHDLVersion:
+		"""Property setting or returning the VHDL version of this VHDL library."""
+		if self._vhdlVersion is not None:
+			return self._vhdlVersion
+		elif self._design is not None:
+			return self._design.VHDLVersion
+		else:
+			raise Exception("VHDLVersion is not set on VHDLLibrary nor parent object.")
+
+	@VHDLVersion.setter
+	def VHDLVersion(self, value: VHDLVersion) -> None:
+		self._vhdlVersion = value
+
+	def AddDependency(self, library: 'VHDLLibrary') -> None:
+		library.parent = self
+
+	def AddFile(self, vhdlFile: VHDLSourceFile) -> None:
+		if not isinstance(vhdlFile, VHDLSourceFile):
+			ex = TypeError(f"Parameter 'vhdlFile' is not a 'VHDLSourceFile'.")
+			if version_info >= (3, 11):  # pragma: no cover
+				ex.add_note(f"Got type '{getFullyQualifiedName(vhdlFile)}'.")
+			raise ex
+
+		self._files.append(vhdlFile)
+
+	def AddFiles(self, vhdlFiles: Iterable[VHDLSourceFile]) -> None:
+		for vhdlFile in vhdlFiles:
+			if not isinstance(vhdlFile, VHDLSourceFile):
+				raise TypeError(f"Item '{vhdlFile}' in parameter 'vhdlFiles' is not a 'VHDLSourceFile'.")
+
+			self._files.append(vhdlFile)
+
+	@property
+	def FileCount(self) -> int:
+		"""Returns number of files."""
+		return len(self._files)
+
+	def __len__(self) -> int:
+		"""
+		Returns number of attributes set on this VHDL library.
+
+		:returns: The number if attributes set on this VHDL library.
+		"""
+		return len(self._attributes)
+
+	def __getitem__(self, key: Type[Attribute]) -> Any:
+		"""Index access for returning attributes on this VHDL library.
+
+		:param key:        The attribute type.
+		:returns:          The attribute's value.
+		:raises TypeError: When parameter 'key' is not a subclass of Attribute.
+		"""
+		if not issubclass(key, Attribute):
+			raise TypeError("Parameter 'key' is not an 'Attribute'.")
+
+		try:
+			return self._attributes[key]
+		except KeyError:
+			return key.resolve(self, key)
+
+	def __setitem__(self, key: Type[Attribute], value: typing_Any) -> None:
+		"""
+		Index access for adding or setting attributes on this VHDL library.
+
+		:param key:        The attribute type.
+		:param value:      The attributes value.
+		:raises TypeError: When parameter 'key' is not a subclass of Attribute.
+		"""
+		if not issubclass(key, Attribute):
+			raise TypeError("Parameter 'key' is not an 'Attribute'.")
+
+		self._attributes[key] = value
+
+	def __delitem__(self, key: Type[Attribute]) -> None:
+		"""
+		Index access for deleting attributes on this VHDL library.
+
+		:param key: The attribute type.
+		"""
+		if not issubclass(key, Attribute):
+			raise TypeError("Parameter 'key' is not an 'Attribute'.")
+
+		del self._attributes[key]
+
+	def __str__(self) -> str:
+		"""Returns the VHDL library's name."""
+		return self._name
+
+
+@export
+class Design(metaclass=ExtendedType, slots=True):
+	"""
+	A :term:`Design` represents a group of filesets and the source files therein.
+
+	Each design contains at least one fileset - the :term:`default fileset`. For
+	designs with VHDL source files, a independent `VHDLLibraries` overlay structure
+	exists.
+
+	:arg name:            The design's name.
+	:arg topLevel:        Name of the design's toplevel.
+	:arg directory:       Path of this design (absolute or relative to the project).
+	:arg project:         Project the design is associated with.
+	:arg vhdlVersion:     Default VHDL version for files in this design, if not specified for the file itself.
+	:arg verilogVersion:  Default Verilog version for files in this design, if not specified for the file itself.
+	:arg svVersion:       Default SystemVerilog version for files in this design, if not specified for the file itself.
+	:arg srdlVersion:     Default SystemRDL version for files in this fileset, if not specified for the file itself.
+	"""
+
+	_name:                  str
+	_topLevel:              Nullable[str]
+	_project:               Nullable['Project']
+	_directory:             pathlib_Path
+	_fileSets:              Dict[str, FileSet]
+	_defaultFileSet:        Nullable[FileSet]
+	_attributes:            Dict[Type[Attribute], typing_Any]
+
+	_vhdlLibraries:         Dict[str, VHDLLibrary]
+	_vhdlVersion:           VHDLVersion
+	_verilogVersion:        SystemVerilogVersion
+	_svVersion:             SystemVerilogVersion
+	_srdlVersion:           SystemRDLVersion
+	_externalVHDLLibraries: List
+
+	_vhdlLibraryDependencyGraph: Graph
+	_fileDependencyGraph:        Graph
+
+	def __init__(
+		self,
+		name: str,
+		topLevel:       Nullable[str] =                  None,
+		directory:      pathlib_Path =                   pathlib_Path("."),
+		project:        Nullable["Project"] =            None,
+		vhdlVersion:    Nullable[VHDLVersion] =          None,
+		verilogVersion: Nullable[SystemVerilogVersion] = None,
+		svVersion:      Nullable[SystemVerilogVersion] = None,
+		srdlVersion:    Nullable[SystemRDLVersion] =     None
+	):
+		self._name =                  name
+		self._topLevel =              topLevel
+		self._project =               project
+		if project is not None:
+			project._designs[name] = self
+		self._directory =             directory
+		self._fileSets =              {}
+		self._defaultFileSet =        FileSet("default", project=project, design=self)
+		self._attributes =            {}
+		self._vhdlLibraries =         {}
+		self._vhdlVersion =           vhdlVersion
+		self._verilogVersion =        verilogVersion
+		self._svVersion =             svVersion
+		self._srdlVersion =           srdlVersion
+		self._externalVHDLLibraries = []
+
+		self._vhdlLibraryDependencyGraph = Graph()
+		self._fileDependencyGraph = Graph()
+
+	@property
+	def Name(self) -> str:
+		"""Property setting or returning the design's name."""
+		return self._name
+
+	@Name.setter
+	def Name(self, value: str) -> None:
+		self._name = value
+
+	@property
+	def TopLevel(self) -> str:
+		"""Property setting or returning the fileset's toplevel."""
+		return self._topLevel
+
+	@TopLevel.setter
+	def TopLevel(self, value: str) -> None:
+		self._topLevel = value
+
+	@property
+	def Project(self) -> Nullable['Project']:
+		"""Property setting or returning the project this design is used in."""
+		return self._project
+
+	@Project.setter
+	def Project(self, value: 'Project') -> None:
+		self._project = value
+
+	@property
+	def Directory(self) -> pathlib_Path:
+		"""Property setting or returning the directory this design is located in."""
+		return self._directory
+
+	@Directory.setter
+	def Directory(self, value: pathlib_Path) -> None:
+		self._directory = value
+
+	@property
+	def ResolvedPath(self) -> pathlib_Path:
+		"""Read-only property returning the resolved path of this fileset."""
+		if self._directory.is_absolute():
+			return self._directory.resolve()
+		elif self._project is not None:
+			path = (self._project.ResolvedPath / self._directory).resolve()
+
+			if path.is_absolute():
+				return path
+			else:
+				# WORKAROUND: https://stackoverflow.com/questions/67452690/pathlib-path-relative-to-vs-os-path-relpath
+				return pathlib_Path(path_relpath(path, pathlib_Path.cwd()))
+		else:
+			# TODO: message and exception type
+			raise Exception("")
+
+	@property
+	def DefaultFileSet(self) -> FileSet:
+		"""Property setting or returning the default fileset of this design."""
+		return self._defaultFileSet
+
+	@DefaultFileSet.setter
+	def DefaultFileSet(self, value: Union[str, FileSet]) -> None:
+		if isinstance(value, str):
+			if value not in self._fileSets.keys():
+				raise Exception(f"Fileset '{value}' is not in this design.")
+
+			self._defaultFileSet = self._fileSets[value]
+		elif isinstance(value, FileSet):
+			if value not in self.FileSets:
+				raise Exception(f"Fileset '{value}' is not associated to this design.")
+
+			self._defaultFileSet = value
+		else:
+			raise ValueError("Unsupported parameter type for 'value'.")
+
+	# TODO: return generator with another method
+	@property
+	def FileSets(self) -> Dict[str, FileSet]:
+		"""Read-only property returning the dictionary of filesets."""
+		return self._fileSets
+
+	def Files(self, fileType: FileType = FileTypes.Any, fileSet: Union[str, FileSet] = None) -> Generator[File, None, None]:
+		"""
+		Method returning the files of this design.
+
+		:arg fileType: A filter for file types. Default: ``Any``.
+		:arg fileSet:  Specifies if all files from all filesets (``fileSet=None``) are files from a single fileset are returned.
+		"""
+		if fileSet is None:
+			for fileSet in self._fileSets.values():
+				for file in fileSet.Files(fileType):
+					yield file
+		else:
+			if isinstance(fileSet, str):
+				try:
+					fileSet = self._fileSets[fileSet]
+				except KeyError as ex:
+					raise Exception(f"Fileset {fileSet.Name} not bound to design {self.Name}.") from ex
+			elif not isinstance(fileSet, FileSet):
+				raise TypeError("Parameter 'fileSet' is not of type 'str' or 'FileSet' nor value 'None'.")
+
+			for file in fileSet.Files(fileType):
+				yield file
+
+	def Validate(self) -> None:
+		"""Validate this design."""
+		if self._name is None or self._name == "":
+			raise Exception("Validation: Design has no name.")
+
+		if self._directory is None:
+			raise Exception(f"Validation: Design '{self._name}' has no directory.")
+		try:
+			path = self.ResolvedPath
+		except Exception as ex:
+			raise Exception(f"Validation: Design '{self._name}' could not compute resolved path.") from ex
+		if not path.exists():
+			raise Exception(f"Validation: Design '{self._name}'s directory '{path}' does not exist.")
+		if not path.is_dir():
+			raise Exception(f"Validation: Design '{self._name}'s directory '{path}' is not a directory.")
+
+		if len(self._fileSets) == 0:
+			raise Exception(f"Validation: Design '{self._name}' has no fileset.")
+		try:
+			if self._defaultFileSet is not self._fileSets[self._defaultFileSet.Name]:
+				raise Exception(f"Validation: Design '{self._name}'s default fileset is the same as listed in filesets.")
+		except KeyError as ex:
+			raise Exception(f"Validation: Design '{self._name}'s default fileset is not in list of filesets.") from ex
+		if self._project is None:
+			raise Exception(f"Validation: Design '{self._path}' has no project.")
+
+		for fileSet in self._fileSets.values():
+			fileSet.Validate()
+
+	@property
+	def VHDLLibraries(self) -> Dict[str, VHDLLibrary]:
+		return self._vhdlLibraries
+
+	@property
+	def VHDLVersion(self) -> VHDLVersion:
+		if self._vhdlVersion is not None:
+			return self._vhdlVersion
+		elif self._project is not None:
+			return self._project.VHDLVersion
+		else:
+			raise Exception("VHDLVersion was neither set locally nor globally.")
+
+	@VHDLVersion.setter
+	def VHDLVersion(self, value: VHDLVersion) -> None:
+		self._vhdlVersion = value
+
+	@property
+	def VerilogVersion(self) -> SystemVerilogVersion:
+		if self._verilogVersion is not None:
+			return self._verilogVersion
+		elif self._project is not None:
+			return self._project.VerilogVersion
+		else:
+			raise Exception("VerilogVersion was neither set locally nor globally.")
+
+	@VerilogVersion.setter
+	def VerilogVersion(self, value: SystemVerilogVersion) -> None:
+		self._verilogVersion = value
+
+	@property
+	def SVVersion(self) -> SystemVerilogVersion:
+		if self._svVersion is not None:
+			return self._svVersion
+		elif self._project is not None:
+			return self._project.SVVersion
+		else:
+			raise Exception("SVVersion was neither set locally nor globally.")
+
+	@SVVersion.setter
+	def SVVersion(self, value: SystemVerilogVersion) -> None:
+		self._svVersion = value
+
+	@property
+	def SRDLVersion(self) -> SystemRDLVersion:
+		if self._srdlVersion is not None:
+			return self._srdlVersion
+		elif self._project is not None:
+			return self._project.SRDLVersion
+		else:
+			raise Exception("SRDLVersion was neither set locally nor globally.")
+
+	@SRDLVersion.setter
+	def SRDLVersion(self, value: SystemRDLVersion) -> None:
+		self._srdlVersion = value
+
+	@property
+	def ExternalVHDLLibraries(self) -> List:
+		return self._externalVHDLLibraries
+
+	def AddFileSet(self, fileSet: FileSet) -> None:
+		if not isinstance(fileSet, FileSet):
+			raise ValueError("Parameter 'fileSet' is not of type ProjectModel.FileSet.")
+		elif fileSet in self._fileSets:
+			raise Exception("Design already contains this fileset.")
+		elif fileSet.Name in self._fileSets.keys():
+			raise Exception(f"Design already contains a fileset named '{fileSet.Name}'.")
+
+		self._fileSets[fileSet.Name] = fileSet
+		fileSet.Design = self
+		fileSet._parent = self
+
+	def AddFileSets(self, fileSets: Iterable[FileSet]) -> None:
+		for fileSet in fileSets:
+			self.AddFileSet(fileSet)
+
+	@property
+	def FileSetCount(self) -> int:
+		"""Returns number of file sets excl. sub-filesets."""
+		return len(self._fileSets)
+
+	@property
+	def TotalFileSetCount(self) -> int:
+		"""Returns number of file sets incl. sub-filesets."""
+		fileSetCount = len(self._fileSets)
+		for fileSet in self._fileSets.values():
+			fileSetCount += fileSet.TotalFileSetCount
+
+		return fileSetCount
+
+	def AddFile(self, file: File) -> None:
+		if file.FileSet is None:
+			self._defaultFileSet.AddFile(file)
+		else:
+			raise ValueError(f"File '{file.Path!s}' is already part of fileset '{file.FileSet.Name}' and can't be assigned via Design to a default fileset.")
+
+	def AddFiles(self, files: Iterable[File]) -> None:
+		for file in files:
+			self.AddFile(file)
+
+	def AddVHDLLibrary(self, vhdlLibrary: VHDLLibrary) -> None:
+		if vhdlLibrary.Name in self._vhdlLibraries:
+			if self._vhdlLibraries[vhdlLibrary.Name] is vhdlLibrary:
+				raise Exception(f"The VHDLLibrary '{vhdlLibrary.Name}' was already added to the design.")
+			else:
+				raise Exception(f"A VHDLLibrary with same name ('{vhdlLibrary.Name}') already exists for this design.")
+
+
+	def __len__(self) -> int:
+		"""
+		Returns number of attributes set on this design.
+
+		:returns: The number if attributes set on this design.
+		"""
+		return len(self._attributes)
+
+	def __getitem__(self, key: Type[Attribute]) -> Any:
+		"""Index access for returning attributes on this design.
+
+		:param key:        The attribute type.
+		:returns:          The attribute's value.
+		:raises TypeError: When parameter 'key' is not a subclass of Attribute.
+		"""
+		if not issubclass(key, Attribute):
+			raise TypeError("Parameter 'key' is not an 'Attribute'.")
+
+		try:
+			return self._attributes[key]
+		except KeyError:
+			return key.resolve(self, key)
+
+	def __setitem__(self, key: Type[Attribute], value: typing_Any) -> None:
+		"""
+		Index access for adding or setting attributes on this design.
+
+		:param key:        The attribute type.
+		:param value:      The attributes value.
+		:raises TypeError: When parameter 'key' is not a subclass of Attribute.
+		"""
+		if not issubclass(key, Attribute):
+			raise TypeError("Parameter 'key' is not an 'Attribute'.")
+
+		self._attributes[key] = value
+
+	def __delitem__(self, key: Type[Attribute]) -> None:
+		"""
+		Index access for deleting attributes on this design.
+
+		:param key: The attribute type.
+		"""
+		if not issubclass(key, Attribute):
+			raise TypeError("Parameter 'key' is not an 'Attribute'.")
+
+		del self._attributes[key]
+
+	def __str__(self) -> str:
+		return self._name
+
+
+@export
+class Project(metaclass=ExtendedType, slots=True):
+	"""
+	A :term:`Project` represents a group of designs and the source files therein.
+
+	:arg name:            The project's name.
+	:arg rootDirectory:   Base-path to the project.
+	:arg vhdlVersion:     Default VHDL version for files in this project, if not specified for the file itself.
+	:arg verilogVersion:  Default Verilog version for files in this project, if not specified for the file itself.
+	:arg svVersion:       Default SystemVerilog version for files in this project, if not specified for the file itself.
+	"""
+
+	_name:            str
+	_rootDirectory:   pathlib_Path
+	_designs:         Dict[str, Design]
+	_defaultDesign:   Design
+	_attributes:      Dict[Type[Attribute], typing_Any]
+
+	_vhdlVersion:     VHDLVersion
+	_verilogVersion:  SystemVerilogVersion
+	_svVersion:       SystemVerilogVersion
+	_srdlVersion:     SystemRDLVersion
+
+	def __init__(
+		self,
+		name: str,
+		rootDirectory:  pathlib_Path =                   pathlib_Path("."),
+		vhdlVersion:    Nullable[VHDLVersion] =          None,
+		verilogVersion: Nullable[SystemVerilogVersion] = None,
+		svVersion:      Nullable[SystemVerilogVersion] = None
+	):
+		self._name =            name
+		self._rootDirectory =   rootDirectory
+		self._designs =         {}
+		self._defaultDesign =   Design("default", project=self)
+		self._attributes =      {}
+		self._vhdlVersion =     vhdlVersion
+		self._verilogVersion =  verilogVersion
+		self._svVersion =       svVersion
+
+	@property
+	def Name(self) -> str:
+		"""Property setting or returning the project's name."""
+		return self._name
+
+	@property
+	def RootDirectory(self) -> pathlib_Path:
+		"""Property setting or returning the root directory this project is located in."""
+		return self._rootDirectory
+
+	@RootDirectory.setter
+	def RootDirectory(self, value: pathlib_Path) -> None:
+		self._rootDirectory = value
+
+	@property
+	def ResolvedPath(self) -> pathlib_Path:
+		"""Read-only property returning the resolved path of this fileset."""
+		path = self._rootDirectory.resolve()
+		if self._rootDirectory.is_absolute():
+			return path
+		else:
+			# WORKAROUND: https://stackoverflow.com/questions/67452690/pathlib-path-relative-to-vs-os-path-relpath
+			return pathlib_Path(path_relpath(path, pathlib_Path.cwd()))
+
+	# TODO: return generator with another method
+	@property
+	def Designs(self) -> Dict[str, Design]:
+		return self._designs
+
+	@property
+	def DefaultDesign(self) -> Design:
+		return self._defaultDesign
+
+	def Validate(self) -> None:
+		"""Validate this project."""
+		if self._name is None or self._name == "":
+			raise Exception("Validation: Project has no name.")
+
+		if self._rootDirectory is None:
+			raise Exception(f"Validation: Project '{self._name}' has no root directory.")
+		try:
+			path = self.ResolvedPath
+		except Exception as ex:
+			raise Exception(f"Validation: Project '{self._name}' could not compute resolved path.") from ex
+		if not path.exists():
+			raise Exception(f"Validation: Project '{self._name}'s directory '{path}' does not exist.")
+		if not path.is_dir():
+			raise Exception(f"Validation: Project '{self._name}'s directory '{path}' is not a directory.")
+
+		if len(self._designs) == 0:
+			raise Exception(f"Validation: Project '{self._name}' has no design.")
+		try:
+			if self._defaultDesign is not self._designs[self._defaultDesign.Name]:
+				raise Exception(f"Validation: Project '{self._name}'s default design is the same as listed in designs.")
+		except KeyError as ex:
+			raise Exception(f"Validation: Project '{self._name}'s default design is not in list of designs.") from ex
+
+		for design in self._designs.values():
+			design.Validate()
+
+	@property
+	def DesignCount(self) -> int:
+		"""Returns number of designs."""
+		return len(self._designs)
+
+	@property
+	def VHDLVersion(self) -> VHDLVersion:
+		# TODO: check for None and return exception
+		return self._vhdlVersion
+
+	@VHDLVersion.setter
+	def VHDLVersion(self, value: VHDLVersion) -> None:
+		self._vhdlVersion = value
+
+	@property
+	def VerilogVersion(self) -> SystemVerilogVersion:
+		# TODO: check for None and return exception
+		return self._verilogVersion
+
+	@VerilogVersion.setter
+	def VerilogVersion(self, value: SystemVerilogVersion) -> None:
+		self._verilogVersion = value
+
+	@property
+	def SVVersion(self) -> SystemVerilogVersion:
+		# TODO: check for None and return exception
+		return self._svVersion
+
+	@SVVersion.setter
+	def SVVersion(self, value: SystemVerilogVersion) -> None:
+		self._svVersion = value
+
+	@property
+	def SRDLVersion(self) -> SystemRDLVersion:
+		# TODO: check for None and return exception
+		return self._srdlVersion
+
+	@SRDLVersion.setter
+	def SRDLVersion(self, value: SystemRDLVersion) -> None:
+		self._srdlVersion = value
+
+	def __len__(self) -> int:
+		"""
+		Returns number of attributes set on this project.
+
+		:returns: The number if attributes set on this project.
+		"""
+		return len(self._attributes)
+
+	def __getitem__(self, key: Type[Attribute]) -> Any:
+		"""Index access for returning attributes on this project.
+
+		:param key:        The attribute type.
+		:returns:          The attribute's value.
+		:raises TypeError: When parameter 'key' is not a subclass of Attribute.
+		"""
+		if not issubclass(key, Attribute):
+			raise TypeError("Parameter 'key' is not an 'Attribute'.")
+
+		try:
+			return self._attributes[key]
+		except KeyError:
+			return key.resolve(self, key)
+
+	def __setitem__(self, key: Type[Attribute], value: typing_Any) -> None:
+		"""
+		Index access for adding or setting attributes on this project.
+
+		:param key:        The attribute type.
+		:param value:      The attributes value.
+		:raises TypeError: When parameter 'key' is not a subclass of Attribute.
+		"""
+		if not issubclass(key, Attribute):
+			raise TypeError("Parameter 'key' is not an 'Attribute'.")
+
+		self._attributes[key] = value
+
+	def __delitem__(self, key: Type[Attribute]) -> None:
+		"""
+		Index access for deleting attributes on this project.
+
+		:param key: The attribute type.
+		"""
+		if not issubclass(key, Attribute):
+			raise TypeError("Parameter 'key' is not an 'Attribute'.")
+
+		del self._attributes[key]
+
+	def __str__(self) -> str:
+		return self._name
+
+ + diff --git a/typing/index.html b/typing/index.html new file mode 100644 index 00000000..e244ed50 --- /dev/null +++ b/typing/index.html @@ -0,0 +1,104 @@ + + + + + + +

Mypy Type Check Coverage Summary

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary from index
FileImprecisionLines
Total9.89% imprecise2749 LOC
pyEDAA.ProjectModel10.44% imprecise1868 LOC
pyEDAA.ProjectModel.Altera0.00% imprecise31 LOC
pyEDAA.ProjectModel.Altera.Quartus0.00% imprecise44 LOC
pyEDAA.ProjectModel.Attributes0.00% imprecise53 LOC
pyEDAA.ProjectModel.GHDL0.00% imprecise39 LOC
pyEDAA.ProjectModel.Intel0.00% imprecise31 LOC
pyEDAA.ProjectModel.Intel.QuartusPrime0.00% imprecise44 LOC
pyEDAA.ProjectModel.MentorGraphics0.00% imprecise31 LOC
pyEDAA.ProjectModel.MentorGraphics.ModelSim0.00% imprecise49 LOC
pyEDAA.ProjectModel.MentorGraphics.QuestaSim0.00% imprecise49 LOC
pyEDAA.ProjectModel.OSVVM11.98% imprecise192 LOC
pyEDAA.ProjectModel.VHDL0.00% imprecise0 LOC
pyEDAA.ProjectModel.Verilog0.00% imprecise39 LOC
pyEDAA.ProjectModel.Xilinx0.00% imprecise31 LOC
pyEDAA.ProjectModel.Xilinx.ISE0.00% imprecise44 LOC
pyEDAA.ProjectModel.Xilinx.Vivado26.47% imprecise204 LOC
+ + diff --git a/typing/mypy-html.css b/typing/mypy-html.css new file mode 100644 index 00000000..ec2bdf9c --- /dev/null +++ b/typing/mypy-html.css @@ -0,0 +1,104 @@ +/* CSS for type check coverage reports */ + +/* + Used by both summary and file. +*/ +body { + font-family: "Helvetica Neue", sans-serif; +} + +/* + Used only by summary. +*/ + +h1 { + text-align: center; + font-size: 135%; + margin: 20px; +} + +table.summary { + border-collapse: collapse; + margin-left: 7%; + margin-right: 7%; + width: 85%; +} + +table caption { + margin: 1em; +} + +table.summary, tr.summary, th.summary, td.summary { + border: 1px solid #aaa; +} + +th.summary, td.summary { + padding: 0.4em; +} + +td.summary a { + text-decoration: none; +} + +.summary-quality-0 { + background-color: #dfd; +} + +.summary-quality-1 { + background-color: #ffa; +} + +.summary-quality-2 { + background-color: #faa; +} + +td.summary-filename, th.summary-filename { + text-align: left; +} + +td.summary-filename { + width: 50%; +} + +.summary-precision { + text-align: center; +} + +.summary-lines { + text-align: center; +} + +/* + Used only by file. +*/ + +td.table-lines { + text-align: right; + padding-right: 0.5em; +} + +td.table-code { } + +span.lineno { + text-align: right; +} + +a:link.lineno, a:visited.lineno { + color: #999; text-decoration: none; +} + +a:hover.lineno, a:active.lineno { + color: #000; text-decoration: underline; +} + +.line-empty, .line-precise { + background-color: #dfd; +} + +.line-imprecise { + background-color: #ffa; +} + +.line-any, .line-unanalyzed { + background-color: #faa; +}