├── docs ├── .gitignore ├── source │ ├── requirements.txt │ ├── prga.py │ │ ├── modules.rst │ │ ├── prga.xml.rst │ │ ├── prga.util.rst │ │ ├── prga.app.app.rst │ │ ├── prga.system.rst │ │ ├── prga.exception.rst │ │ ├── prga.passes.rtl.rst │ │ ├── prga.tools.util.rst │ │ ├── prga.app.softregs.rst │ │ ├── prga.core.common.rst │ │ ├── prga.core.context.rst │ │ ├── prga.passes.base.rst │ │ ├── prga.passes.flow.rst │ │ ├── prga.passes.yosys.rst │ │ ├── prga.prog.common.rst │ │ ├── prga.renderer.lib.rst │ │ ├── prga.passes.vpr.rrg.rst │ │ ├── prga.prog.frame.lib.rst │ │ ├── prga.prog.magic.lib.rst │ │ ├── prga.netlist.net.bus.rst │ │ ├── prga.passes.vpr.arch.rst │ │ ├── prga.core.builder.base.rst │ │ ├── prga.netlist.net.util.rst │ │ ├── prga.passes.annotation.rst │ │ ├── prga.prog.pktchain.lib.rst │ │ ├── prga.renderer.renderer.rst │ │ ├── prga.tools.bitgen.util.rst │ │ ├── prga.tools.wizard.v2b.rst │ │ ├── prga.core.builder.block.rst │ │ ├── prga.integration.common.rst │ │ ├── prga.netlist.net.common.rst │ │ ├── prga.passes.translation.rst │ │ ├── prga.prog.scanchain.lib.rst │ │ ├── prga.tools.bitgen.frame.rst │ │ ├── prga.tools.bitgen.magic.rst │ │ ├── prga.tools.wizard.verif.rst │ │ ├── prga.netlist.module.util.rst │ │ ├── prga.passes.vpr.delegate.rst │ │ ├── prga.prog.frame.protocol.rst │ │ ├── prga.tools.bitgen.common.rst │ │ ├── prga.tools.ioplan.ioplan.rst │ │ ├── prga.passes.proginsertion.rst │ │ ├── prga.algorithm.interconnect.rst │ │ ├── prga.core.builder.box.base.rst │ │ ├── prga.core.builder.box.cbox.rst │ │ ├── prga.core.builder.box.sbox.rst │ │ ├── prga.core.builder.primitive.rst │ │ ├── prga.netlist.module.module.rst │ │ ├── prga.passes.materialization.rst │ │ ├── prga.prog.pktchain.protocol.rst │ │ ├── prga.tools.bitgen.pktchain.rst │ │ ├── prga.tools.bitgen.scanchain.rst │ │ ├── prga.tools.wizard.implwrap.rst │ │ ├── prga.core.builder.array.base.rst │ │ ├── prga.core.builder.array.tile.rst │ │ ├── prga.integration.integration.rst │ │ ├── prga.netlist.module.instance.rst │ │ ├── prga.tools.analysis.rrg.util.rst │ │ ├── prga.core.builder.array.array.rst │ │ ├── prga.app.rst │ │ ├── prga.prog.magic.rst │ │ ├── prga.algorithm.rst │ │ ├── prga.netlist.rst │ │ ├── prga.tools.ioplan.rst │ │ ├── prga.prog.scanchain.rst │ │ ├── prga.renderer.rst │ │ ├── prga.tools.analysis.rst │ │ ├── prga.prog.frame.rst │ │ ├── prga.tools.analysis.rrg.rst │ │ ├── prga.integration.rst │ │ ├── prga.prog.pktchain.rst │ │ ├── prga.passes.vpr.rst │ │ ├── prga.netlist.net.rst │ │ ├── prga.netlist.module.rst │ │ ├── prga.core.builder.box.rst │ │ ├── prga.core.builder.array.rst │ │ ├── prga.core.rst │ │ ├── prga.prog.rst │ │ ├── prga.tools.wizard.rst │ │ ├── prga.tools.rst │ │ ├── prga.tools.bitgen.rst │ │ ├── prga.core.builder.rst │ │ ├── prga.rst │ │ └── prga.passes.rst │ ├── _static │ │ └── images │ │ │ ├── grid.png │ │ │ ├── logo.png │ │ │ ├── convgrid.png │ │ │ ├── domains.png │ │ │ ├── picosoc.PNG │ │ │ ├── zoomx3.png │ │ │ ├── workflow_prga.png │ │ │ ├── FracLUT3_Design.png │ │ │ ├── FracLUT3_Abstract.png │ │ │ └── convgrid_noslots.png │ ├── fpga_primer.rst │ ├── tutorial │ │ └── index.rst │ ├── index.rst │ └── conf.py └── Makefile ├── .gitignore ├── examples ├── app │ ├── picorv32 │ │ ├── fpga21 │ │ │ ├── config │ │ │ │ ├── io.partial │ │ │ │ ├── config.vcs.yaml │ │ │ │ └── config.ivl.yaml │ │ │ └── Makefile │ │ ├── .gitignore │ │ ├── magic_grady18v2_N10_mem32Kb_42x34 │ │ │ ├── config │ │ │ │ ├── io.partial │ │ │ │ ├── config.vcs.yaml │ │ │ │ └── config.ivl.yaml │ │ │ └── Makefile │ │ ├── magic_fle6_N10_mem32Kb_mul24x18_42x34 │ │ │ ├── config │ │ │ │ ├── io.partial │ │ │ │ ├── config.vcs.yaml │ │ │ │ └── config.ivl.yaml │ │ │ └── Makefile │ │ └── frame_grady18_N10_mem32Kb_mul24x18_42x34 │ │ │ ├── config │ │ │ ├── io.partial │ │ │ ├── config.vcs.yaml │ │ │ └── config.ivl.yaml │ │ │ └── Makefile │ ├── bcd2bin │ │ ├── frame_k4_N2_8x8 │ │ │ ├── config │ │ │ │ ├── io.partial │ │ │ │ ├── config.vcs.yaml │ │ │ │ └── config.ivl.yaml │ │ │ └── Makefile │ │ ├── magic_k4_N2_8x8 │ │ │ ├── config │ │ │ │ ├── io.partial │ │ │ │ ├── config.vcs.yaml │ │ │ │ └── config.ivl.yaml │ │ │ └── Makefile │ │ ├── frame_k4_N2_8x8_b8 │ │ │ ├── config │ │ │ │ ├── io.partial │ │ │ │ ├── config.vcs.yaml │ │ │ │ └── config.ivl.yaml │ │ │ └── Makefile │ │ ├── pktchain_k4_N2_8x8 │ │ │ ├── config │ │ │ │ ├── io.partial │ │ │ │ ├── config.vcs.yaml │ │ │ │ └── config.ivl.yaml │ │ │ └── Makefile │ │ ├── scanchain_k4_N2_8x8 │ │ │ ├── config │ │ │ │ ├── io.partial │ │ │ │ ├── config.vcs.yaml │ │ │ │ └── config.ivl.yaml │ │ │ └── Makefile │ │ ├── magic_fle6_N2_mem2K_8x8 │ │ │ ├── config │ │ │ │ ├── io.partial │ │ │ │ ├── config.vcs.yaml │ │ │ │ └── config.ivl.yaml │ │ │ └── Makefile │ │ ├── magic_grady18_N2_10x6 │ │ │ ├── config │ │ │ │ ├── io.partial │ │ │ │ ├── config.vcs.yaml │ │ │ │ └── config.ivl.yaml │ │ │ └── Makefile │ │ ├── scanchain_grady18_N2_10x6 │ │ │ ├── config │ │ │ │ ├── io.partial │ │ │ │ ├── config.vcs.yaml │ │ │ │ └── config.ivl.yaml │ │ │ └── Makefile │ │ ├── magic_grady18v2_N2_8x8_hier │ │ │ ├── config │ │ │ │ ├── io.partial │ │ │ │ ├── config.vcs.yaml │ │ │ │ └── config.ivl.yaml │ │ │ └── Makefile │ │ ├── scanchain_fle6_N2_mem2K_8x8 │ │ │ ├── config │ │ │ │ ├── io.partial │ │ │ │ ├── config.vcs.yaml │ │ │ │ └── config.ivl.yaml │ │ │ └── Makefile │ │ ├── .gitignore │ │ ├── pktchain_defaultchain_k4_N2_8x8 │ │ │ ├── config │ │ │ │ ├── io.partial │ │ │ │ ├── config.vcs.yaml │ │ │ │ └── config.ivl.yaml │ │ │ └── Makefile │ │ ├── scanchain_grady18v2_N2_8x8_hier │ │ │ ├── config │ │ │ │ ├── io.partial │ │ │ │ ├── config.vcs.yaml │ │ │ │ └── config.ivl.yaml │ │ │ └── Makefile │ │ └── src │ │ │ ├── bcd2bin.v │ │ │ └── bcd2bin_test_basic.v │ ├── picosoc │ │ ├── frame_hardpico │ │ │ ├── config │ │ │ │ ├── io.partial │ │ │ │ ├── .gitignore │ │ │ │ └── config.vcs.yaml │ │ │ └── Makefile │ │ ├── magic_hardpico │ │ │ ├── config │ │ │ │ ├── io.partial │ │ │ │ ├── .gitignore │ │ │ │ └── config.vcs.yaml │ │ │ └── Makefile │ │ ├── .gitignore │ │ └── src │ │ │ └── hx8kdemo.v │ └── romtest │ │ ├── frame_hardpico │ │ ├── config │ │ │ ├── io.partial │ │ │ ├── config.vcs.yaml │ │ │ └── config.ivl.yaml │ │ └── Makefile │ │ ├── frame_grady18_N4_rom2K_8x8 │ │ ├── config │ │ │ ├── io.partial │ │ │ ├── config.vcs.yaml │ │ │ └── config.ivl.yaml │ │ └── Makefile │ │ ├── .gitignore │ │ └── src │ │ ├── romtest.v │ │ └── romtest_test.v └── fpga │ ├── frame │ ├── hardpico │ │ ├── Makefile │ │ └── src │ │ │ ├── dffn.techmap.tmpl.v │ │ │ └── dffn.v │ ├── k4_N2_8x8 │ │ └── Makefile │ ├── k4_N2_8x8_b8 │ │ └── Makefile │ ├── grady18_N4_rom2K_8x8 │ │ └── Makefile │ └── grady18_N10_mem32Kb_mul24x18_42x34 │ │ └── Makefile │ ├── magic │ ├── hardpico │ │ ├── Makefile │ │ └── src │ │ │ ├── dffn.techmap.tmpl.v │ │ │ └── dffn.v │ ├── k4_N2_8x8 │ │ ├── Makefile │ │ └── build.py │ ├── fle6_N2_mem2K_8x8 │ │ └── Makefile │ ├── grady18_N2_10x6 │ │ ├── Makefile │ │ └── build.py │ ├── grady18v2_N2_8x8_hier │ │ └── Makefile │ ├── grady18v2_N10_mem32Kb_42x34 │ │ └── Makefile │ └── fle6_N10_mem32Kb_mul24x18_42x34 │ │ └── Makefile │ ├── pktchain │ ├── fpga21 │ │ └── Makefile │ ├── k4_N2_8x8 │ │ └── Makefile │ └── defaultchain_k4_N2_8x8 │ │ ├── Makefile │ │ └── build.py │ ├── scanchain │ ├── k4_N2_8x8 │ │ ├── Makefile │ │ └── build.py │ ├── grady18_N2_10x6 │ │ ├── Makefile │ │ └── build.py │ ├── fle6_N2_mem2K_8x8 │ │ └── Makefile │ └── grady18v2_N2_8x8_hier │ │ └── Makefile │ ├── .gitignore │ └── Makefile.in ├── website ├── Makefile ├── _includes │ ├── footer │ │ └── custom.html │ ├── comments-providers │ │ ├── custom.html │ │ ├── custom_scripts.html │ │ ├── facebook.html │ │ ├── scripts.html │ │ ├── utterances.html │ │ ├── disqus.html │ │ ├── discourse.html │ │ ├── staticman.html │ │ └── staticman_v2.html │ ├── analytics-providers │ │ ├── custom.html │ │ ├── google-universal.html │ │ ├── google-gtag.html │ │ └── google.html │ ├── page__hero_video.html │ ├── head │ │ └── custom.html │ ├── posts-tag.html │ ├── posts-category.html │ ├── page__taxonomy.html │ ├── browser-upgrade.html │ ├── author-profile-custom-links.html │ ├── toc │ ├── figure │ ├── documents-collection.html │ ├── search │ │ ├── lunr-search-scripts.html │ │ ├── google-search-scripts.html │ │ ├── search_form.html │ │ └── algolia-search-scripts.html │ ├── analytics.html │ ├── skip-links.html │ ├── page__date.html │ ├── sidebar.html │ ├── tag-list.html │ ├── category-list.html │ ├── post_pagination.html │ ├── scripts.html │ ├── feature_section │ ├── video │ ├── nav_list │ ├── gallery │ ├── comment.html │ ├── head.html │ ├── footer.html │ ├── group-by-array │ ├── archive-single.html │ ├── social-share.html │ ├── feature_row │ ├── page__meta.html │ ├── breadcrumbs.html │ ├── masthead.html │ └── page__hero.html ├── assets │ └── images │ │ ├── logo.png │ │ ├── picosoc.PNG │ │ ├── splash.png │ │ ├── multimode.PNG │ │ └── case_study_arch.png ├── README.md ├── _data │ └── navigation.yml ├── .gitignore ├── _sass │ ├── minimal-mistakes │ │ ├── skins │ │ │ ├── _default.scss │ │ │ ├── _air.scss │ │ │ ├── _mint.scss │ │ │ ├── _dirt.scss │ │ │ ├── _dark.scss │ │ │ ├── _aqua.scss │ │ │ ├── _contrast.scss │ │ │ ├── _sunrise.scss │ │ │ ├── _neon.scss │ │ │ └── _plum.scss │ │ ├── _animations.scss │ │ ├── _tables.scss │ │ ├── _feature.scss │ │ ├── _footer.scss │ │ ├── _masthead.scss │ │ ├── _mixins.scss │ │ ├── _notices.scss │ │ ├── _buttons.scss │ │ └── _search.scss │ └── minimal-mistakes.scss ├── 404.html ├── Gemfile ├── publications.markdown └── _config.yml ├── .gitmodules ├── .readthedocs.yaml ├── LICENSE ├── README.md ├── envscr ├── run └── activate └── .github ├── workflows └── checkinstall.yml └── actions └── run_example └── action.yml /docs/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | .eggs 3 | .* 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .python-version 2 | local 3 | pyenv 4 | -------------------------------------------------------------------------------- /examples/app/picorv32/fpga21/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 21 0 2 | -------------------------------------------------------------------------------- /docs/source/requirements.txt: -------------------------------------------------------------------------------- 1 | sphinx-materialdesign-theme==0.1.11 2 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/frame_k4_N2_8x8/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/magic_k4_N2_8x8/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/app/picosoc/frame_hardpico/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/app/picosoc/magic_hardpico/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/app/romtest/frame_hardpico/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/fpga/frame/hardpico/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/fpga/frame/k4_N2_8x8/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/fpga/magic/hardpico/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/fpga/magic/k4_N2_8x8/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/fpga/pktchain/fpga21/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/frame_k4_N2_8x8_b8/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/pktchain_k4_N2_8x8/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/scanchain_k4_N2_8x8/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/app/picosoc/frame_hardpico/config/.gitignore: -------------------------------------------------------------------------------- 1 | config.yaml 2 | -------------------------------------------------------------------------------- /examples/app/picosoc/magic_hardpico/config/.gitignore: -------------------------------------------------------------------------------- 1 | config.yaml 2 | -------------------------------------------------------------------------------- /examples/fpga/frame/k4_N2_8x8_b8/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/fpga/pktchain/k4_N2_8x8/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/fpga/scanchain/k4_N2_8x8/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/magic_fle6_N2_mem2K_8x8/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/magic_grady18_N2_10x6/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/scanchain_grady18_N2_10x6/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/fpga/magic/fle6_N2_mem2K_8x8/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/fpga/magic/grady18_N2_10x6/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/fpga/scanchain/grady18_N2_10x6/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/magic_grady18v2_N2_8x8_hier/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/scanchain_fle6_N2_mem2K_8x8/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/app/romtest/frame_grady18_N4_rom2K_8x8/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/fpga/frame/grady18_N4_rom2K_8x8/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/fpga/magic/grady18v2_N2_8x8_hier/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/fpga/scanchain/fle6_N2_mem2K_8x8/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/.gitignore: -------------------------------------------------------------------------------- 1 | /*/* 2 | !/src/*.v 3 | !/*/Makefile 4 | !/*/config 5 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/pktchain_defaultchain_k4_N2_8x8/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/scanchain_grady18v2_N2_8x8_hier/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/app/picorv32/.gitignore: -------------------------------------------------------------------------------- 1 | /*/* 2 | !/src/* 3 | !/*/Makefile 4 | !/*/config 5 | -------------------------------------------------------------------------------- /examples/app/picorv32/magic_grady18v2_N10_mem32Kb_42x34/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/app/picosoc/.gitignore: -------------------------------------------------------------------------------- 1 | /*/* 2 | !/src/* 3 | !/*/Makefile 4 | !/*/config 5 | -------------------------------------------------------------------------------- /examples/fpga/.gitignore: -------------------------------------------------------------------------------- 1 | /*/*/* 2 | !/*/*/build.py 3 | !/*/*/Makefile 4 | !/*/*/src 5 | -------------------------------------------------------------------------------- /examples/fpga/magic/grady18v2_N10_mem32Kb_42x34/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/fpga/pktchain/defaultchain_k4_N2_8x8/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/fpga/scanchain/grady18v2_N2_8x8_hier/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/app/picorv32/magic_fle6_N10_mem32Kb_mul24x18_42x34/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /examples/fpga/frame/grady18_N10_mem32Kb_mul24x18_42x34/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/fpga/magic/fle6_N10_mem32Kb_mul24x18_42x34/Makefile: -------------------------------------------------------------------------------- 1 | include ../../Makefile.in 2 | -------------------------------------------------------------------------------- /examples/app/picorv32/frame_grady18_N10_mem32Kb_mul24x18_42x34/config/io.partial: -------------------------------------------------------------------------------- 1 | clk 0 1 0 2 | -------------------------------------------------------------------------------- /docs/source/prga.py/modules.rst: -------------------------------------------------------------------------------- 1 | prga 2 | ==== 3 | 4 | .. toctree:: 5 | :maxdepth: 4 6 | 7 | prga 8 | -------------------------------------------------------------------------------- /examples/app/romtest/.gitignore: -------------------------------------------------------------------------------- 1 | /*/* 2 | !/src/*.v 3 | !/src/include 4 | !/*/Makefile 5 | !/*/config 6 | -------------------------------------------------------------------------------- /website/Makefile: -------------------------------------------------------------------------------- 1 | tar: build 2 | tar -cvzf prga.tar.gz _site 3 | 4 | build: 5 | bundle exec jekyll build 6 | -------------------------------------------------------------------------------- /website/_includes/footer/custom.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /website/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PrincetonUniversity/prga/HEAD/website/assets/images/logo.png -------------------------------------------------------------------------------- /website/assets/images/picosoc.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PrincetonUniversity/prga/HEAD/website/assets/images/picosoc.PNG -------------------------------------------------------------------------------- /website/assets/images/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PrincetonUniversity/prga/HEAD/website/assets/images/splash.png -------------------------------------------------------------------------------- /docs/source/_static/images/grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PrincetonUniversity/prga/HEAD/docs/source/_static/images/grid.png -------------------------------------------------------------------------------- /docs/source/_static/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PrincetonUniversity/prga/HEAD/docs/source/_static/images/logo.png -------------------------------------------------------------------------------- /website/_includes/comments-providers/custom.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /website/assets/images/multimode.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PrincetonUniversity/prga/HEAD/website/assets/images/multimode.PNG -------------------------------------------------------------------------------- /docs/source/_static/images/convgrid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PrincetonUniversity/prga/HEAD/docs/source/_static/images/convgrid.png -------------------------------------------------------------------------------- /docs/source/_static/images/domains.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PrincetonUniversity/prga/HEAD/docs/source/_static/images/domains.png -------------------------------------------------------------------------------- /docs/source/_static/images/picosoc.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PrincetonUniversity/prga/HEAD/docs/source/_static/images/picosoc.PNG -------------------------------------------------------------------------------- /docs/source/_static/images/zoomx3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PrincetonUniversity/prga/HEAD/docs/source/_static/images/zoomx3.png -------------------------------------------------------------------------------- /website/_includes/analytics-providers/custom.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /website/_includes/comments-providers/custom_scripts.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /website/assets/images/case_study_arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PrincetonUniversity/prga/HEAD/website/assets/images/case_study_arch.png -------------------------------------------------------------------------------- /docs/source/_static/images/workflow_prga.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PrincetonUniversity/prga/HEAD/docs/source/_static/images/workflow_prga.png -------------------------------------------------------------------------------- /docs/source/_static/images/FracLUT3_Design.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PrincetonUniversity/prga/HEAD/docs/source/_static/images/FracLUT3_Design.png -------------------------------------------------------------------------------- /docs/source/_static/images/FracLUT3_Abstract.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PrincetonUniversity/prga/HEAD/docs/source/_static/images/FracLUT3_Abstract.png -------------------------------------------------------------------------------- /docs/source/_static/images/convgrid_noslots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PrincetonUniversity/prga/HEAD/docs/source/_static/images/convgrid_noslots.png -------------------------------------------------------------------------------- /website/_includes/page__hero_video.html: -------------------------------------------------------------------------------- 1 | {% assign video = page.header.video %} 2 | {% include video id=video.id provider=video.provider danmaku=video.danmaku %} 3 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.xml.rst: -------------------------------------------------------------------------------- 1 | prga.xml module 2 | =============== 3 | 4 | .. automodule:: prga.xml 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.util.rst: -------------------------------------------------------------------------------- 1 | prga.util module 2 | ================ 3 | 4 | .. automodule:: prga.util 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.app.app.rst: -------------------------------------------------------------------------------- 1 | prga.app.app module 2 | =================== 3 | 4 | .. automodule:: prga.app.app 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.system.rst: -------------------------------------------------------------------------------- 1 | prga.system package 2 | =================== 3 | 4 | .. automodule:: prga.system 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /website/_includes/head/custom.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/source/fpga_primer.rst: -------------------------------------------------------------------------------- 1 | FPGA Primer 2 | =========== 3 | 4 | This page covers the basics of FPGA architectures and how RTL designs are 5 | emulated with FPGAs. 6 | 7 | Work in progress. 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.exception.rst: -------------------------------------------------------------------------------- 1 | prga.exception module 2 | ===================== 3 | 4 | .. automodule:: prga.exception 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.passes.rtl.rst: -------------------------------------------------------------------------------- 1 | prga.passes.rtl module 2 | ====================== 3 | 4 | .. automodule:: prga.passes.rtl 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.util.rst: -------------------------------------------------------------------------------- 1 | prga.tools.util module 2 | ====================== 3 | 4 | .. automodule:: prga.tools.util 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /examples/fpga/frame/hardpico/src/dffn.techmap.tmpl.v: -------------------------------------------------------------------------------- 1 | module \$_DFF_N_ (D, C, Q); 2 | input D, C; 3 | output Q; 4 | 5 | dffn _TECHMAP_REPLACE_ (.clk(C), .D(D), .Q(Q)); 6 | 7 | endmodule 8 | -------------------------------------------------------------------------------- /examples/fpga/magic/hardpico/src/dffn.techmap.tmpl.v: -------------------------------------------------------------------------------- 1 | module \$_DFF_N_ (D, C, Q); 2 | input D, C; 3 | output Q; 4 | 5 | dffn _TECHMAP_REPLACE_ (.clk(C), .D(D), .Q(Q)); 6 | 7 | endmodule 8 | -------------------------------------------------------------------------------- /website/_includes/posts-tag.html: -------------------------------------------------------------------------------- 1 | {%- for post in site.tags[include.taxonomy] -%} 2 | {%- unless post.hidden -%} 3 | {% include archive-single.html %} 4 | {%- endunless -%} 5 | {%- endfor -%} 6 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.app.softregs.rst: -------------------------------------------------------------------------------- 1 | prga.app.softregs module 2 | ======================== 3 | 4 | .. automodule:: prga.app.softregs 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.core.common.rst: -------------------------------------------------------------------------------- 1 | prga.core.common module 2 | ======================= 3 | 4 | .. automodule:: prga.core.common 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.core.context.rst: -------------------------------------------------------------------------------- 1 | prga.core.context module 2 | ======================== 3 | 4 | .. automodule:: prga.core.context 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.passes.base.rst: -------------------------------------------------------------------------------- 1 | prga.passes.base module 2 | ======================= 3 | 4 | .. automodule:: prga.passes.base 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.passes.flow.rst: -------------------------------------------------------------------------------- 1 | prga.passes.flow module 2 | ======================= 3 | 4 | .. automodule:: prga.passes.flow 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.passes.yosys.rst: -------------------------------------------------------------------------------- 1 | prga.passes.yosys module 2 | ======================== 3 | 4 | .. automodule:: prga.passes.yosys 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.prog.common.rst: -------------------------------------------------------------------------------- 1 | prga.prog.common module 2 | ======================= 3 | 4 | .. automodule:: prga.prog.common 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.renderer.lib.rst: -------------------------------------------------------------------------------- 1 | prga.renderer.lib module 2 | ======================== 3 | 4 | .. automodule:: prga.renderer.lib 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /website/_includes/posts-category.html: -------------------------------------------------------------------------------- 1 | {%- for post in site.categories[include.taxonomy] -%} 2 | {%- unless post.hidden -%} 3 | {% include archive-single.html %} 4 | {%- endunless -%} 5 | {%- endfor -%} 6 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.passes.vpr.rrg.rst: -------------------------------------------------------------------------------- 1 | prga.passes.vpr.rrg module 2 | ========================== 3 | 4 | .. automodule:: prga.passes.vpr.rrg 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.prog.frame.lib.rst: -------------------------------------------------------------------------------- 1 | prga.prog.frame.lib module 2 | ========================== 3 | 4 | .. automodule:: prga.prog.frame.lib 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.prog.magic.lib.rst: -------------------------------------------------------------------------------- 1 | prga.prog.magic.lib module 2 | ========================== 3 | 4 | .. automodule:: prga.prog.magic.lib 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.netlist.net.bus.rst: -------------------------------------------------------------------------------- 1 | prga.netlist.net.bus module 2 | =========================== 3 | 4 | .. automodule:: prga.netlist.net.bus 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.passes.vpr.arch.rst: -------------------------------------------------------------------------------- 1 | prga.passes.vpr.arch module 2 | =========================== 3 | 4 | .. automodule:: prga.passes.vpr.arch 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /examples/fpga/frame/hardpico/src/dffn.v: -------------------------------------------------------------------------------- 1 | module dffn ( 2 | input wire clk, 3 | input wire D, 4 | output reg Q 5 | ); 6 | 7 | always @(negedge clk) 8 | Q <= D; 9 | 10 | endmodule 11 | -------------------------------------------------------------------------------- /examples/fpga/magic/hardpico/src/dffn.v: -------------------------------------------------------------------------------- 1 | module dffn ( 2 | input wire clk, 3 | input wire D, 4 | output reg Q 5 | ); 6 | 7 | always @(negedge clk) 8 | Q <= D; 9 | 10 | endmodule 11 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.core.builder.base.rst: -------------------------------------------------------------------------------- 1 | prga.core.builder.base module 2 | ============================= 3 | 4 | .. automodule:: prga.core.builder.base 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.netlist.net.util.rst: -------------------------------------------------------------------------------- 1 | prga.netlist.net.util module 2 | ============================ 3 | 4 | .. automodule:: prga.netlist.net.util 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.passes.annotation.rst: -------------------------------------------------------------------------------- 1 | prga.passes.annotation module 2 | ============================= 3 | 4 | .. automodule:: prga.passes.annotation 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.prog.pktchain.lib.rst: -------------------------------------------------------------------------------- 1 | prga.prog.pktchain.lib module 2 | ============================= 3 | 4 | .. automodule:: prga.prog.pktchain.lib 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.renderer.renderer.rst: -------------------------------------------------------------------------------- 1 | prga.renderer.renderer module 2 | ============================= 3 | 4 | .. automodule:: prga.renderer.renderer 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.bitgen.util.rst: -------------------------------------------------------------------------------- 1 | prga.tools.bitgen.util module 2 | ============================= 3 | 4 | .. automodule:: prga.tools.bitgen.util 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.wizard.v2b.rst: -------------------------------------------------------------------------------- 1 | prga.tools.wizard.v2b module 2 | ============================ 3 | 4 | .. automodule:: prga.tools.wizard.v2b 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /website/README.md: -------------------------------------------------------------------------------- 1 | Source code for the [PRGA Website](https://parallel.princeton.edu/prga). 2 | 3 | Developed with [Jekyll](https://jekyllrb.com/) and 4 | [Minimal-Mistakes](https://mmistakes.github.io/minimal-mistakes/). 5 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.core.builder.block.rst: -------------------------------------------------------------------------------- 1 | prga.core.builder.block module 2 | ============================== 3 | 4 | .. automodule:: prga.core.builder.block 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.integration.common.rst: -------------------------------------------------------------------------------- 1 | prga.integration.common module 2 | ============================== 3 | 4 | .. automodule:: prga.integration.common 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.netlist.net.common.rst: -------------------------------------------------------------------------------- 1 | prga.netlist.net.common module 2 | ============================== 3 | 4 | .. automodule:: prga.netlist.net.common 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.passes.translation.rst: -------------------------------------------------------------------------------- 1 | prga.passes.translation module 2 | ============================== 3 | 4 | .. automodule:: prga.passes.translation 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.prog.scanchain.lib.rst: -------------------------------------------------------------------------------- 1 | prga.prog.scanchain.lib module 2 | ============================== 3 | 4 | .. automodule:: prga.prog.scanchain.lib 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.bitgen.frame.rst: -------------------------------------------------------------------------------- 1 | prga.tools.bitgen.frame module 2 | ============================== 3 | 4 | .. automodule:: prga.tools.bitgen.frame 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.bitgen.magic.rst: -------------------------------------------------------------------------------- 1 | prga.tools.bitgen.magic module 2 | ============================== 3 | 4 | .. automodule:: prga.tools.bitgen.magic 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.wizard.verif.rst: -------------------------------------------------------------------------------- 1 | prga.tools.wizard.verif module 2 | ============================== 3 | 4 | .. automodule:: prga.tools.wizard.verif 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.netlist.module.util.rst: -------------------------------------------------------------------------------- 1 | prga.netlist.module.util module 2 | =============================== 3 | 4 | .. automodule:: prga.netlist.module.util 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.passes.vpr.delegate.rst: -------------------------------------------------------------------------------- 1 | prga.passes.vpr.delegate module 2 | =============================== 3 | 4 | .. automodule:: prga.passes.vpr.delegate 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.prog.frame.protocol.rst: -------------------------------------------------------------------------------- 1 | prga.prog.frame.protocol module 2 | =============================== 3 | 4 | .. automodule:: prga.prog.frame.protocol 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.bitgen.common.rst: -------------------------------------------------------------------------------- 1 | prga.tools.bitgen.common module 2 | =============================== 3 | 4 | .. automodule:: prga.tools.bitgen.common 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.ioplan.ioplan.rst: -------------------------------------------------------------------------------- 1 | prga.tools.ioplan.ioplan module 2 | =============================== 3 | 4 | .. automodule:: prga.tools.ioplan.ioplan 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.passes.proginsertion.rst: -------------------------------------------------------------------------------- 1 | prga.passes.proginsertion module 2 | ================================ 3 | 4 | .. automodule:: prga.passes.proginsertion 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/tutorial/index.rst: -------------------------------------------------------------------------------- 1 | Tutorials 2 | ========= 3 | 4 | This page lists PRGA tutorials. 5 | 6 | .. toctree:: 7 | :maxdepth: 2 8 | :caption: Contents: 9 | 10 | build_your_custom_fpga 11 | bring_your_own_ip 12 | -------------------------------------------------------------------------------- /examples/app/picorv32/fpga21/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= ivl 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.algorithm.interconnect.rst: -------------------------------------------------------------------------------- 1 | prga.algorithm.interconnect module 2 | ================================== 3 | 4 | .. automodule:: prga.algorithm.interconnect 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.core.builder.box.base.rst: -------------------------------------------------------------------------------- 1 | prga.core.builder.box.base module 2 | ================================= 3 | 4 | .. automodule:: prga.core.builder.box.base 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.core.builder.box.cbox.rst: -------------------------------------------------------------------------------- 1 | prga.core.builder.box.cbox module 2 | ================================= 3 | 4 | .. automodule:: prga.core.builder.box.cbox 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.core.builder.box.sbox.rst: -------------------------------------------------------------------------------- 1 | prga.core.builder.box.sbox module 2 | ================================= 3 | 4 | .. automodule:: prga.core.builder.box.sbox 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.core.builder.primitive.rst: -------------------------------------------------------------------------------- 1 | prga.core.builder.primitive module 2 | ================================== 3 | 4 | .. automodule:: prga.core.builder.primitive 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.netlist.module.module.rst: -------------------------------------------------------------------------------- 1 | prga.netlist.module.module module 2 | ================================= 3 | 4 | .. automodule:: prga.netlist.module.module 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.passes.materialization.rst: -------------------------------------------------------------------------------- 1 | prga.passes.materialization module 2 | ================================== 3 | 4 | .. automodule:: prga.passes.materialization 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.prog.pktchain.protocol.rst: -------------------------------------------------------------------------------- 1 | prga.prog.pktchain.protocol module 2 | ================================== 3 | 4 | .. automodule:: prga.prog.pktchain.protocol 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.bitgen.pktchain.rst: -------------------------------------------------------------------------------- 1 | prga.tools.bitgen.pktchain module 2 | ================================= 3 | 4 | .. automodule:: prga.tools.bitgen.pktchain 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.bitgen.scanchain.rst: -------------------------------------------------------------------------------- 1 | prga.tools.bitgen.scanchain module 2 | ================================== 3 | 4 | .. automodule:: prga.tools.bitgen.scanchain 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.wizard.implwrap.rst: -------------------------------------------------------------------------------- 1 | prga.tools.wizard.implwrap package 2 | ================================== 3 | 4 | .. automodule:: prga.tools.wizard.implwrap 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /examples/app/romtest/frame_hardpico/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= vcs 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /website/_data/navigation.yml: -------------------------------------------------------------------------------- 1 | main: 2 | - title: GitHub 3 | url: https://github.com/PrincetonUniversity/prga 4 | - title: Documentation 5 | url: https://prga.readthedocs.io 6 | - title: Publications 7 | url: /publications.html 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.core.builder.array.base.rst: -------------------------------------------------------------------------------- 1 | prga.core.builder.array.base module 2 | =================================== 3 | 4 | .. automodule:: prga.core.builder.array.base 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.core.builder.array.tile.rst: -------------------------------------------------------------------------------- 1 | prga.core.builder.array.tile module 2 | =================================== 3 | 4 | .. automodule:: prga.core.builder.array.tile 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.integration.integration.rst: -------------------------------------------------------------------------------- 1 | prga.integration.integration module 2 | =================================== 3 | 4 | .. automodule:: prga.integration.integration 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.netlist.module.instance.rst: -------------------------------------------------------------------------------- 1 | prga.netlist.module.instance module 2 | =================================== 3 | 4 | .. automodule:: prga.netlist.module.instance 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.analysis.rrg.util.rst: -------------------------------------------------------------------------------- 1 | prga.tools.analysis.rrg.util module 2 | =================================== 3 | 4 | .. automodule:: prga.tools.analysis.rrg.util 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/frame_k4_N2_8x8/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= vcs 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/frame_k4_N2_8x8_b8/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= vcs 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/magic_k4_N2_8x8/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= ivl 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/pktchain_k4_N2_8x8/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= ivl 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/scanchain_k4_N2_8x8/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= ivl 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.core.builder.array.array.rst: -------------------------------------------------------------------------------- 1 | prga.core.builder.array.array module 2 | ==================================== 3 | 4 | .. automodule:: prga.core.builder.array.array 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/magic_fle6_N2_mem2K_8x8/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= ivl 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/magic_grady18_N2_10x6/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= ivl 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /website/.gitignore: -------------------------------------------------------------------------------- 1 | # Jekyll cache & output 2 | _site 3 | .sass-cache 4 | .jekyll-cache 5 | .jekyll-metadata 6 | vendor 7 | 8 | # Ruby GEM 9 | *.gem 10 | .bundle 11 | Gemfile.lock 12 | **/vendor/bundle 13 | 14 | # Deployment 15 | prga.tar.gz 16 | -------------------------------------------------------------------------------- /website/_includes/page__taxonomy.html: -------------------------------------------------------------------------------- 1 | {% if site.tag_archive.type and page.tags[0] %} 2 | {% include tag-list.html %} 3 | {% endif %} 4 | 5 | {% if site.category_archive.type and page.categories[0] %} 6 | {% include category-list.html %} 7 | {% endif %} -------------------------------------------------------------------------------- /examples/app/bcd2bin/magic_grady18v2_N2_8x8_hier/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= ivl 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/scanchain_fle6_N2_mem2K_8x8/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= ivl 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/scanchain_grady18_N2_10x6/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= ivl 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /examples/app/romtest/frame_grady18_N4_rom2K_8x8/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= vcs 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/pktchain_defaultchain_k4_N2_8x8/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= ivl 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/scanchain_grady18v2_N2_8x8_hier/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= ivl 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /examples/app/picorv32/magic_grady18v2_N10_mem32Kb_42x34/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= ivl 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /examples/app/picorv32/magic_fle6_N10_mem32Kb_mul24x18_42x34/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= ivl 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /examples/app/picorv32/frame_grady18_N10_mem32Kb_mul24x18_42x34/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= ivl 2 | CONFIG := config/config.${COMP}.yaml 3 | PROJECTS := app tests 4 | 5 | $(PROJECTS): $(CONFIG) 6 | python -O -m prga.tools.wizard $< 7 | 8 | clean: 9 | rm -rf $(PROJECTS) 10 | -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/skins/_default.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Default skin 3 | ========================================================================== */ 4 | 5 | // Intentionally left blank 6 | -------------------------------------------------------------------------------- /website/_includes/browser-upgrade.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /website/_includes/author-profile-custom-links.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.app.rst: -------------------------------------------------------------------------------- 1 | prga.app package 2 | ================ 3 | 4 | .. automodule:: prga.app 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Submodules 10 | ---------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.app.app 16 | prga.app.softregs 17 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.prog.magic.rst: -------------------------------------------------------------------------------- 1 | prga.prog.magic package 2 | ======================= 3 | 4 | .. automodule:: prga.prog.magic 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Submodules 10 | ---------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.prog.magic.lib 16 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "prga.py"] 2 | path = prga.py 3 | url = https://github.com/PrincetonUniversity/prga.py.git 4 | [submodule "vtr"] 5 | path = vtr 6 | url = https://github.com/verilog-to-routing/vtr-verilog-to-routing.git 7 | [submodule "yosys"] 8 | path = yosys 9 | url = https://github.com/YosysHQ/yosys.git 10 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.algorithm.rst: -------------------------------------------------------------------------------- 1 | prga.algorithm package 2 | ====================== 3 | 4 | .. automodule:: prga.algorithm 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Submodules 10 | ---------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.algorithm.interconnect 16 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.netlist.rst: -------------------------------------------------------------------------------- 1 | prga.netlist package 2 | ==================== 3 | 4 | .. automodule:: prga.netlist 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Subpackages 10 | ----------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.netlist.module 16 | prga.netlist.net 17 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.ioplan.rst: -------------------------------------------------------------------------------- 1 | prga.tools.ioplan package 2 | ========================= 3 | 4 | .. automodule:: prga.tools.ioplan 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Submodules 10 | ---------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.tools.ioplan.ioplan 16 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.prog.scanchain.rst: -------------------------------------------------------------------------------- 1 | prga.prog.scanchain package 2 | =========================== 3 | 4 | .. automodule:: prga.prog.scanchain 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Submodules 10 | ---------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.prog.scanchain.lib 16 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.renderer.rst: -------------------------------------------------------------------------------- 1 | prga.renderer package 2 | ===================== 3 | 4 | .. automodule:: prga.renderer 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Submodules 10 | ---------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.renderer.lib 16 | prga.renderer.renderer 17 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.analysis.rst: -------------------------------------------------------------------------------- 1 | prga.tools.analysis package 2 | =========================== 3 | 4 | .. automodule:: prga.tools.analysis 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Subpackages 10 | ----------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.tools.analysis.rrg 16 | -------------------------------------------------------------------------------- /website/_includes/toc: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.prog.frame.rst: -------------------------------------------------------------------------------- 1 | prga.prog.frame package 2 | ======================= 3 | 4 | .. automodule:: prga.prog.frame 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Submodules 10 | ---------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.prog.frame.lib 16 | prga.prog.frame.protocol 17 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/frame_k4_N2_8x8/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/frame/k4_N2_8x8/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/magic_k4_N2_8x8/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/magic/k4_N2_8x8/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.analysis.rrg.rst: -------------------------------------------------------------------------------- 1 | prga.tools.analysis.rrg package 2 | =============================== 3 | 4 | .. automodule:: prga.tools.analysis.rrg 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Submodules 10 | ---------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.tools.analysis.rrg.util 16 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/frame_k4_N2_8x8/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/frame/k4_N2_8x8/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/frame_k4_N2_8x8_b8/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/frame/k4_N2_8x8_b8/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/magic_k4_N2_8x8/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/magic/k4_N2_8x8/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/pktchain_k4_N2_8x8/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/pktchain/k4_N2_8x8/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.integration.rst: -------------------------------------------------------------------------------- 1 | prga.integration package 2 | ======================== 3 | 4 | .. automodule:: prga.integration 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Submodules 10 | ---------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.integration.common 16 | prga.integration.integration 17 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/frame_k4_N2_8x8_b8/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/frame/k4_N2_8x8_b8/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/pktchain_k4_N2_8x8/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/pktchain/k4_N2_8x8/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/scanchain_k4_N2_8x8/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/scanchain/k4_N2_8x8/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.prog.pktchain.rst: -------------------------------------------------------------------------------- 1 | prga.prog.pktchain package 2 | ========================== 3 | 4 | .. automodule:: prga.prog.pktchain 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Submodules 10 | ---------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.prog.pktchain.lib 16 | prga.prog.pktchain.protocol 17 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/magic_fle6_N2_mem2K_8x8/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/magic/fle6_N2_mem2K_8x8/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/magic_grady18_N2_10x6/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/magic/grady18_N2_10x6/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/scanchain_k4_N2_8x8/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/scanchain/k4_N2_8x8/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/magic_fle6_N2_mem2K_8x8/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/magic/fle6_N2_mem2K_8x8/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/magic_grady18_N2_10x6/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/magic/grady18_N2_10x6/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/scanchain_grady18_N2_10x6/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/scanchain/grady18_N2_10x6/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/magic_grady18v2_N2_8x8_hier/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/magic/grady18v2_N2_8x8_hier/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/scanchain_fle6_N2_mem2K_8x8/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/scanchain/fle6_N2_mem2K_8x8/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/scanchain_grady18_N2_10x6/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/scanchain/grady18_N2_10x6/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/romtest/frame_hardpico/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/frame/hardpico/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: romtest 5 | sources: 6 | - ../../src/romtest.v 7 | includes: 8 | - ../../src/include 9 | constraints: 10 | io: io.partial 11 | tests: 12 | romtest_test: 13 | sources: 14 | - ../../src/romtest_test.v 15 | -------------------------------------------------------------------------------- /website/_includes/figure: -------------------------------------------------------------------------------- 1 |
2 | {% if include.alt %}{{ include.alt }}{% endif %} 4 | {%- if include.caption -%} 5 |
6 | {{ include.caption | markdownify | remove: "

" | remove: "

" }} 7 |
8 | {%- endif -%} 9 |
10 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.passes.vpr.rst: -------------------------------------------------------------------------------- 1 | prga.passes.vpr package 2 | ======================= 3 | 4 | .. automodule:: prga.passes.vpr 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Submodules 10 | ---------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.passes.vpr.arch 16 | prga.passes.vpr.delegate 17 | prga.passes.vpr.rrg 18 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/magic_grady18v2_N2_8x8_hier/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/magic/grady18v2_N2_8x8_hier/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/scanchain_fle6_N2_mem2K_8x8/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/scanchain/fle6_N2_mem2K_8x8/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/romtest/frame_hardpico/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/frame/hardpico/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: romtest 5 | sources: 6 | - ../../src/romtest.v 7 | includes: 8 | - ../../src/include 9 | constraints: 10 | io: io.partial 11 | tests: 12 | romtest_test: 13 | sources: 14 | - ../../src/romtest_test.v 15 | -------------------------------------------------------------------------------- /examples/app/romtest/src/romtest.v: -------------------------------------------------------------------------------- 1 | module romtest ( 2 | input wire clk, 3 | input wire [7:0] addr, 4 | output reg [7:0] dout 5 | ); 6 | 7 | reg [7:0] rom [0:255]; 8 | 9 | initial begin 10 | `include "rom.vh" 11 | end 12 | 13 | always @(posedge clk) begin 14 | dout <= rom[addr]; 15 | end 16 | 17 | endmodule 18 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.netlist.net.rst: -------------------------------------------------------------------------------- 1 | prga.netlist.net package 2 | ======================== 3 | 4 | .. automodule:: prga.netlist.net 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Submodules 10 | ---------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.netlist.net.bus 16 | prga.netlist.net.common 17 | prga.netlist.net.util 18 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/pktchain_defaultchain_k4_N2_8x8/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/pktchain/defaultchain_k4_N2_8x8/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/scanchain_grady18v2_N2_8x8_hier/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/scanchain/grady18v2_N2_8x8_hier/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/pktchain_defaultchain_k4_N2_8x8/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/pktchain/defaultchain_k4_N2_8x8/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/scanchain_grady18v2_N2_8x8_hier/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/scanchain/grady18v2_N2_8x8_hier/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: bcd2bin 5 | sources: 6 | - ../../src/bcd2bin.v 7 | constraints: 8 | io: io.partial 9 | tests: 10 | basic: 11 | sources: 12 | - ../../src/bcd2bin_test_basic.v 13 | -------------------------------------------------------------------------------- /examples/app/romtest/frame_grady18_N4_rom2K_8x8/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/frame/grady18_N4_rom2K_8x8/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: romtest 5 | sources: 6 | - ../../src/romtest.v 7 | includes: 8 | - ../../src/include 9 | constraints: 10 | io: io.partial 11 | tests: 12 | romtest_test: 13 | sources: 14 | - ../../src/romtest_test.v 15 | -------------------------------------------------------------------------------- /examples/app/romtest/frame_grady18_N4_rom2K_8x8/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/frame/grady18_N4_rom2K_8x8/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: romtest 5 | sources: 6 | - ../../src/romtest.v 7 | includes: 8 | - ../../src/include 9 | constraints: 10 | io: io.partial 11 | tests: 12 | romtest_test: 13 | sources: 14 | - ../../src/romtest_test.v 15 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.netlist.module.rst: -------------------------------------------------------------------------------- 1 | prga.netlist.module package 2 | =========================== 3 | 4 | .. automodule:: prga.netlist.module 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Submodules 10 | ---------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.netlist.module.instance 16 | prga.netlist.module.module 17 | prga.netlist.module.util 18 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.core.builder.box.rst: -------------------------------------------------------------------------------- 1 | prga.core.builder.box package 2 | ============================= 3 | 4 | .. automodule:: prga.core.builder.box 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Submodules 10 | ---------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.core.builder.box.base 16 | prga.core.builder.box.cbox 17 | prga.core.builder.box.sbox 18 | -------------------------------------------------------------------------------- /website/_includes/analytics-providers/google-universal.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.core.builder.array.rst: -------------------------------------------------------------------------------- 1 | prga.core.builder.array package 2 | =============================== 3 | 4 | .. automodule:: prga.core.builder.array 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Submodules 10 | ---------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.core.builder.array.array 16 | prga.core.builder.array.base 17 | prga.core.builder.array.tile 18 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.core.rst: -------------------------------------------------------------------------------- 1 | prga.core package 2 | ================= 3 | 4 | .. automodule:: prga.core 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Subpackages 10 | ----------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.core.builder 16 | 17 | Submodules 18 | ---------- 19 | 20 | .. toctree:: 21 | :maxdepth: 4 22 | 23 | prga.core.common 24 | prga.core.context 25 | -------------------------------------------------------------------------------- /examples/app/picosoc/frame_hardpico/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= vcs 2 | CONFIG := config/config.${COMP}.yaml 3 | CONFIG_POSTPROCESS := config/config.yaml 4 | PROJECTS := app tests 5 | 6 | $(PROJECTS): $(CONFIG_POSTPROCESS) 7 | python -O -m prga.tools.wizard $< 8 | 9 | $(CONFIG_POSTPROCESS): $(CONFIG) 10 | s=`yosys-config --datdir` && sed "s/%YOSYS_DATDIR%/$${s//\//\\/}/g" $< > $@ 11 | 12 | clean: 13 | rm -rf $(PROJECTS) $(CONFIG_POSTPROCESS) 14 | -------------------------------------------------------------------------------- /examples/app/picosoc/magic_hardpico/Makefile: -------------------------------------------------------------------------------- 1 | COMP ?= vcs 2 | CONFIG := config/config.${COMP}.yaml 3 | CONFIG_POSTPROCESS := config/config.yaml 4 | PROJECTS := app tests 5 | 6 | $(PROJECTS): $(CONFIG_POSTPROCESS) 7 | python -O -m prga.tools.wizard $< 8 | 9 | $(CONFIG_POSTPROCESS): $(CONFIG) 10 | s=`yosys-config --datdir` && sed "s/%YOSYS_DATDIR%/$${s//\//\\/}/g" $< > $@ 11 | 12 | clean: 13 | rm -rf $(PROJECTS) $(CONFIG_POSTPROCESS) 14 | -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/_animations.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | ANIMATIONS 3 | ========================================================================== */ 4 | 5 | @-webkit-keyframes intro { 6 | 0% { 7 | opacity: 0; 8 | } 9 | 100% { 10 | opacity: 1; 11 | } 12 | } 13 | 14 | @keyframes intro { 15 | 0% { 16 | opacity: 0; 17 | } 18 | 100% { 19 | opacity: 1; 20 | } 21 | } -------------------------------------------------------------------------------- /website/_includes/documents-collection.html: -------------------------------------------------------------------------------- 1 | {% assign entries = site[include.collection] %} 2 | 3 | {% if include.sort_by %} 4 | {% assign entries = entries | sort: include.sort_by %} 5 | {% endif %} 6 | 7 | {% if include.sort_order == 'reverse' %} 8 | {% assign entries = entries | reverse %} 9 | {% endif %} 10 | 11 | {%- for post in entries -%} 12 | {%- unless post.hidden -%} 13 | {% include archive-single.html %} 14 | {%- endunless -%} 15 | {%- endfor -%} 16 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.prog.rst: -------------------------------------------------------------------------------- 1 | prga.prog package 2 | ================= 3 | 4 | .. automodule:: prga.prog 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Subpackages 10 | ----------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.prog.frame 16 | prga.prog.magic 17 | prga.prog.pktchain 18 | prga.prog.scanchain 19 | 20 | Submodules 21 | ---------- 22 | 23 | .. toctree:: 24 | :maxdepth: 4 25 | 26 | prga.prog.common 27 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.wizard.rst: -------------------------------------------------------------------------------- 1 | prga.tools.wizard package 2 | ========================= 3 | 4 | .. automodule:: prga.tools.wizard 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Subpackages 10 | ----------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.tools.wizard.implwrap 16 | 17 | Submodules 18 | ---------- 19 | 20 | .. toctree:: 21 | :maxdepth: 4 22 | 23 | prga.tools.wizard.v2b 24 | prga.tools.wizard.verif 25 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.rst: -------------------------------------------------------------------------------- 1 | prga.tools package 2 | ================== 3 | 4 | .. automodule:: prga.tools 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Subpackages 10 | ----------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.tools.analysis 16 | prga.tools.bitgen 17 | prga.tools.ioplan 18 | prga.tools.wizard 19 | 20 | Submodules 21 | ---------- 22 | 23 | .. toctree:: 24 | :maxdepth: 4 25 | 26 | prga.tools.util 27 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.tools.bitgen.rst: -------------------------------------------------------------------------------- 1 | prga.tools.bitgen package 2 | ========================= 3 | 4 | .. automodule:: prga.tools.bitgen 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Submodules 10 | ---------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.tools.bitgen.common 16 | prga.tools.bitgen.frame 17 | prga.tools.bitgen.magic 18 | prga.tools.bitgen.pktchain 19 | prga.tools.bitgen.scanchain 20 | prga.tools.bitgen.util 21 | -------------------------------------------------------------------------------- /website/_includes/comments-providers/facebook.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /website/_includes/search/lunr-search-scripts.html: -------------------------------------------------------------------------------- 1 | {% assign lang = site.locale | slice: 0,2 | default: "en" %} 2 | {% case lang %} 3 | {% when "gr" %} 4 | {% assign lang = "gr" %} 5 | {% else %} 6 | {% assign lang = "en" %} 7 | {% endcase %} 8 | 9 | 10 | -------------------------------------------------------------------------------- /website/_includes/analytics-providers/google-gtag.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.core.builder.rst: -------------------------------------------------------------------------------- 1 | prga.core.builder package 2 | ========================= 3 | 4 | .. automodule:: prga.core.builder 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Subpackages 10 | ----------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.core.builder.array 16 | prga.core.builder.box 17 | 18 | Submodules 19 | ---------- 20 | 21 | .. toctree:: 22 | :maxdepth: 4 23 | 24 | prga.core.builder.base 25 | prga.core.builder.block 26 | prga.core.builder.primitive 27 | -------------------------------------------------------------------------------- /website/_includes/analytics.html: -------------------------------------------------------------------------------- 1 | {% if jekyll.environment == 'production' and site.analytics.provider and page.analytics != false %} 2 | 3 | {% case site.analytics.provider %} 4 | {% when "google" %} 5 | {% include /analytics-providers/google.html %} 6 | {% when "google-universal" %} 7 | {% include /analytics-providers/google-universal.html %} 8 | {% when "google-gtag" %} 9 | {% include /analytics-providers/google-gtag.html %} 10 | {% when "custom" %} 11 | {% include /analytics-providers/custom.html %} 12 | {% endcase %} 13 | 14 | {% endif %} -------------------------------------------------------------------------------- /website/404.html: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /404.html 3 | layout: default 4 | --- 5 | 6 | 19 | 20 |
21 |

404

22 | 23 |

Page not found :(

24 |

The requested page is either missing or under construction.

25 |
26 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.rst: -------------------------------------------------------------------------------- 1 | prga package 2 | ============ 3 | 4 | .. automodule:: prga 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Subpackages 10 | ----------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.algorithm 16 | prga.app 17 | prga.core 18 | prga.integration 19 | prga.netlist 20 | prga.passes 21 | prga.prog 22 | prga.renderer 23 | prga.system 24 | prga.tools 25 | 26 | Submodules 27 | ---------- 28 | 29 | .. toctree:: 30 | :maxdepth: 4 31 | 32 | prga.exception 33 | prga.util 34 | prga.xml 35 | -------------------------------------------------------------------------------- /docs/source/prga.py/prga.passes.rst: -------------------------------------------------------------------------------- 1 | prga.passes package 2 | =================== 3 | 4 | .. automodule:: prga.passes 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | 9 | Subpackages 10 | ----------- 11 | 12 | .. toctree:: 13 | :maxdepth: 4 14 | 15 | prga.passes.vpr 16 | 17 | Submodules 18 | ---------- 19 | 20 | .. toctree:: 21 | :maxdepth: 4 22 | 23 | prga.passes.annotation 24 | prga.passes.base 25 | prga.passes.flow 26 | prga.passes.materialization 27 | prga.passes.proginsertion 28 | prga.passes.rtl 29 | prga.passes.translation 30 | prga.passes.yosys 31 | -------------------------------------------------------------------------------- /website/_includes/skip-links.html: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /website/_includes/page__date.html: -------------------------------------------------------------------------------- 1 | {% if page.last_modified_at %} 2 |

{{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}

3 | {% elsif page.date %} 4 |

{{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}

5 | {% endif %} 6 | -------------------------------------------------------------------------------- /website/_includes/analytics-providers/google.html: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /examples/app/picorv32/fpga21/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/pktchain/fpga21/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: picorv32_axi 5 | sources: 6 | - ../../src/picorv32.v 7 | parameters: 8 | COMPRESSED_ISA: 1 9 | ENABLE_MUL: 1 10 | ENABLE_FAST_MUL: 1 11 | ENABLE_DIV: 1 12 | ENABLE_IRQ: 1 13 | ENABLE_TRACE: 1 14 | constraints: 15 | io: io.partial 16 | tests: 17 | picorv32_test_basic: 18 | sources: 19 | - ../../src/picorv32_test_basic.v 20 | run_flags: 21 | - +firmware=${PRGA_ROOT}/examples/app/picorv32/src/firmware.hex 22 | - +max_cycle=1000000 23 | -------------------------------------------------------------------------------- /examples/app/picorv32/fpga21/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/pktchain/fpga21/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: picorv32_axi 5 | sources: 6 | - ../../src/picorv32.v 7 | parameters: 8 | COMPRESSED_ISA: 1 9 | ENABLE_MUL: 1 10 | ENABLE_FAST_MUL: 1 11 | ENABLE_DIV: 1 12 | ENABLE_IRQ: 1 13 | ENABLE_TRACE: 1 14 | constraints: 15 | io: io.partial 16 | tests: 17 | picorv32_test_basic: 18 | sources: 19 | - ../../src/picorv32_test_basic.v 20 | run_flags: 21 | - +firmware=${PRGA_ROOT}/examples/app/picorv32/src/firmware.hex 22 | - +max_cycle=1000000 23 | -------------------------------------------------------------------------------- /examples/app/picorv32/magic_grady18v2_N10_mem32Kb_42x34/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/magic/grady18v2_N10_mem32Kb_42x34/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: picorv32_axi 5 | sources: 6 | - ../../src/picorv32.v 7 | parameters: 8 | COMPRESSED_ISA: 1 9 | ENABLE_MUL: 1 10 | ENABLE_FAST_MUL: 1 11 | ENABLE_DIV: 1 12 | ENABLE_IRQ: 1 13 | ENABLE_TRACE: 1 14 | constraints: 15 | io: io.partial 16 | tests: 17 | picorv32_test_basic: 18 | sources: 19 | - ../../src/picorv32_test_basic.v 20 | run_flags: 21 | - +firmware=${PRGA_ROOT}/examples/app/picorv32/src/firmware.hex 22 | - +max_cycle=1000000 23 | -------------------------------------------------------------------------------- /examples/app/picorv32/magic_grady18v2_N10_mem32Kb_42x34/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/magic/grady18v2_N10_mem32Kb_42x34/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: picorv32_axi 5 | sources: 6 | - ../../src/picorv32.v 7 | parameters: 8 | COMPRESSED_ISA: 1 9 | ENABLE_MUL: 1 10 | ENABLE_FAST_MUL: 1 11 | ENABLE_DIV: 1 12 | ENABLE_IRQ: 1 13 | ENABLE_TRACE: 1 14 | constraints: 15 | io: io.partial 16 | tests: 17 | picorv32_test_basic: 18 | sources: 19 | - ../../src/picorv32_test_basic.v 20 | run_flags: 21 | - +firmware=${PRGA_ROOT}/examples/app/picorv32/src/firmware.hex 22 | - +max_cycle=1000000 23 | -------------------------------------------------------------------------------- /examples/app/picorv32/magic_fle6_N10_mem32Kb_mul24x18_42x34/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/magic/fle6_N10_mem32Kb_mul24x18_42x34/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: picorv32_axi 5 | sources: 6 | - ../../src/picorv32.v 7 | parameters: 8 | COMPRESSED_ISA: 1 9 | ENABLE_MUL: 1 10 | ENABLE_FAST_MUL: 1 11 | ENABLE_DIV: 1 12 | ENABLE_IRQ: 1 13 | ENABLE_TRACE: 1 14 | constraints: 15 | io: io.partial 16 | tests: 17 | picorv32_test_basic: 18 | sources: 19 | - ../../src/picorv32_test_basic.v 20 | run_flags: 21 | - +firmware=${PRGA_ROOT}/examples/app/picorv32/src/firmware.hex 22 | - +max_cycle=1000000 23 | -------------------------------------------------------------------------------- /examples/app/picorv32/frame_grady18_N10_mem32Kb_mul24x18_42x34/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/frame/grady18_N10_mem32Kb_mul24x18_42x34/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: picorv32_axi 5 | sources: 6 | - ../../src/picorv32.v 7 | parameters: 8 | COMPRESSED_ISA: 1 9 | ENABLE_MUL: 1 10 | ENABLE_FAST_MUL: 1 11 | ENABLE_DIV: 1 12 | ENABLE_IRQ: 1 13 | ENABLE_TRACE: 1 14 | constraints: 15 | io: io.partial 16 | tests: 17 | picorv32_test_basic: 18 | sources: 19 | - ../../src/picorv32_test_basic.v 20 | run_flags: 21 | - +firmware=${PRGA_ROOT}/examples/app/picorv32/src/firmware.hex 22 | - +max_cycle=1000000 23 | -------------------------------------------------------------------------------- /examples/app/picorv32/magic_fle6_N10_mem32Kb_mul24x18_42x34/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/magic/fle6_N10_mem32Kb_mul24x18_42x34/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: picorv32_axi 5 | sources: 6 | - ../../src/picorv32.v 7 | parameters: 8 | COMPRESSED_ISA: 1 9 | ENABLE_MUL: 1 10 | ENABLE_FAST_MUL: 1 11 | ENABLE_DIV: 1 12 | ENABLE_IRQ: 1 13 | ENABLE_TRACE: 1 14 | constraints: 15 | io: io.partial 16 | tests: 17 | picorv32_test_basic: 18 | sources: 19 | - ../../src/picorv32_test_basic.v 20 | run_flags: 21 | - +firmware=${PRGA_ROOT}/examples/app/picorv32/src/firmware.hex 22 | - +max_cycle=1000000 23 | -------------------------------------------------------------------------------- /examples/app/picorv32/frame_grady18_N10_mem32Kb_mul24x18_42x34/config/config.ivl.yaml: -------------------------------------------------------------------------------- 1 | context: ../../../../fpga/frame/grady18_N10_mem32Kb_mul24x18_42x34/ctx.pkl 2 | compiler: iverilog 3 | app: 4 | name: picorv32_axi 5 | sources: 6 | - ../../src/picorv32.v 7 | parameters: 8 | COMPRESSED_ISA: 1 9 | ENABLE_MUL: 1 10 | ENABLE_FAST_MUL: 1 11 | ENABLE_DIV: 1 12 | ENABLE_IRQ: 1 13 | ENABLE_TRACE: 1 14 | constraints: 15 | io: io.partial 16 | tests: 17 | picorv32_test_basic: 18 | sources: 19 | - ../../src/picorv32_test_basic.v 20 | run_flags: 21 | - +firmware=${PRGA_ROOT}/examples/app/picorv32/src/firmware.hex 22 | - +max_cycle=1000000 23 | -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | # .readthedocs.yml 2 | # Read the Docs configuration file 3 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 4 | 5 | # Required 6 | version: 2 7 | 8 | # Build documentation in the docs/ directory with Sphinx 9 | sphinx: 10 | configuration: docs/source/conf.py 11 | 12 | # Optionally build your docs in additional formats such as PDF and ePub 13 | formats: all 14 | 15 | # Optionally set the version of Python and requirements required to build 16 | # your docs 17 | python: 18 | version: 3.8 19 | install: 20 | - requirements: docs/source/requirements.txt 21 | - method: pip 22 | path: prga.py 23 | 24 | # include submoduls for building the docs 25 | submodules: 26 | include: 27 | - prga.py 28 | -------------------------------------------------------------------------------- /website/_includes/comments-providers/scripts.html: -------------------------------------------------------------------------------- 1 | {% if site.comments.provider and page.comments %} 2 | {% case site.comments.provider %} 3 | {% when "disqus" %} 4 | {% include /comments-providers/disqus.html %} 5 | {% when "discourse" %} 6 | {% include /comments-providers/discourse.html %} 7 | {% when "facebook" %} 8 | {% include /comments-providers/facebook.html %} 9 | {% when "staticman" %} 10 | {% include /comments-providers/staticman.html %} 11 | {% when "staticman_v2" %} 12 | {% include /comments-providers/staticman_v2.html %} 13 | {% when "utterances" %} 14 | {% include /comments-providers/utterances.html %} 15 | {% when "custom" %} 16 | {% include /comments-providers/custom_scripts.html %} 17 | {% endcase %} 18 | {% endif %} -------------------------------------------------------------------------------- /website/_includes/comments-providers/utterances.html: -------------------------------------------------------------------------------- 1 | 21 | -------------------------------------------------------------------------------- /website/_includes/sidebar.html: -------------------------------------------------------------------------------- 1 | {% if page.author_profile or layout.author_profile or page.sidebar %} 2 | 19 | {% endif %} 20 | -------------------------------------------------------------------------------- /website/_includes/tag-list.html: -------------------------------------------------------------------------------- 1 | {% case site.tag_archive.type %} 2 | {% when "liquid" %} 3 | {% assign path_type = "#" %} 4 | {% when "jekyll-archives" %} 5 | {% assign path_type = nil %} 6 | {% endcase %} 7 | 8 | {% if site.tag_archive.path %} 9 | {% assign tags_sorted = page.tags | sort_natural %} 10 | 11 |

12 | {{ site.data.ui-text[site.locale].tags_label | default: "Tags:" }} 13 | 14 | {% for tag_word in tags_sorted %} 15 | {% unless forloop.last %}, {% endunless %} 16 | {% endfor %} 17 | 18 |

19 | {% endif %} -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line, and also 5 | # from the environment for the first two. 6 | SPHINXOPTS ?= 7 | SPHINXBUILD ?= sphinx-build 8 | SOURCEDIR = source 9 | BUILDDIR = build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | # regenerate source 16 | update-source: 17 | rm -rf source/prga.py 18 | sphinx-apidoc -o source/prga.py -e -M ../prga.py/prga 19 | 20 | .PHONY: help update-source Makefile 21 | 22 | # Catch-all target: route all unknown targets to Sphinx using the new 23 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 24 | %: Makefile 25 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 26 | -------------------------------------------------------------------------------- /website/_includes/comments-providers/disqus.html: -------------------------------------------------------------------------------- 1 | {% if site.comments.disqus.shortname %} 2 | 14 | 15 | {% endif %} 16 | -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/skins/_air.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Air skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $background-color: #eeeeee !default; 7 | $text-color: #222831 !default; 8 | $muted-text-color: #393e46 !default; 9 | $primary-color: #0092ca !default; 10 | $border-color: mix(#fff, #393e46, 75%) !default; 11 | $footer-background-color: $primary-color !default; 12 | $link-color: #393e46 !default; 13 | $masthead-link-color: $text-color !default; 14 | $masthead-link-color-hover: $text-color !default; 15 | $navicon-link-color-hover: mix(#fff, $text-color, 80%) !default; 16 | 17 | .page__footer { 18 | color: #fff !important; // override 19 | } 20 | 21 | .page__footer-follow .social-icons .svg-inline--fa { 22 | color: inherit; 23 | } 24 | -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/_tables.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | TABLES 3 | ========================================================================== */ 4 | 5 | table { 6 | display: block; 7 | margin-bottom: 1em; 8 | width: 100%; 9 | font-family: $global-font-family; 10 | font-size: $type-size-6; 11 | border-collapse: collapse; 12 | overflow-x: auto; 13 | 14 | & + table { 15 | margin-top: 1em; 16 | } 17 | } 18 | 19 | thead { 20 | background-color: $border-color; 21 | border-bottom: 2px solid mix(#000, $border-color, 25%); 22 | } 23 | 24 | th { 25 | padding: 0.5em; 26 | font-weight: bold; 27 | text-align: left; 28 | } 29 | 30 | td { 31 | padding: 0.5em; 32 | border-bottom: 1px solid mix(#000, $border-color, 25%); 33 | } 34 | 35 | tr, 36 | td, 37 | th { 38 | vertical-align: middle; 39 | } -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/_feature.scss: -------------------------------------------------------------------------------- 1 | .feature__section { 2 | display: -ms-flexbox; 3 | display: flex; 4 | -ms-flex-align: center; 5 | align-items: center; 6 | margin-bottom: 1em; 7 | 8 | @media only screen and (max-width: 801px) { 9 | -ms-flex-direction: column; 10 | flex-direction: column; 11 | } 12 | 13 | .feature__image { 14 | margin: 1em; 15 | } 16 | 17 | .feature__body { 18 | &:not(:only-child) { 19 | -ms-flex: 0 0 60%; 20 | flex: 0 0 60%; 21 | @media only screen and (min-width: 800px) { 22 | max-width: 60%; 23 | } 24 | } 25 | 26 | margin: 0.5em; 27 | } 28 | } 29 | 30 | .feature__section-swap { 31 | @media only screen and (min-width: 800px) { 32 | -ms-flex-direction: row-reverse; 33 | flex-direction: row-reverse; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/skins/_mint.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Mint skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $background-color: #f3f6f6 !default; 7 | $text-color: #40514e !default; 8 | $muted-text-color: #40514e !default; 9 | $primary-color: #11999e !default; 10 | $border-color: mix(#fff, #40514e, 75%) !default; 11 | $footer-background-color: #30e3ca !default; 12 | $link-color: #11999e !default; 13 | $masthead-link-color: $text-color !default; 14 | $masthead-link-color-hover: $text-color !default; 15 | $navicon-link-color-hover: mix(#fff, $text-color, 80%) !default; 16 | 17 | .page__footer { 18 | color: #fff !important; // override 19 | } 20 | 21 | .page__footer-follow .social-icons i, 22 | .page__footer-follow .social-icons .svg-inline--fa { 23 | color: inherit; 24 | } 25 | -------------------------------------------------------------------------------- /examples/app/picosoc/frame_hardpico/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ${PRGA_ROOT}/examples/fpga/frame/hardpico/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: picosoc 5 | sources: 6 | - ../../src/simpleuart.v 7 | - ../../src/spimemio.v 8 | - ../../src/picosoc.v 9 | constraints: 10 | io: io.partial 11 | tests: 12 | testbench: 13 | sources: 14 | - ../../src/hx8kdemo.v 15 | - ../../src/spiflash.v 16 | - ../../src/hx8kdemo_tb.v 17 | - %YOSYS_DATDIR%/ice40/cells_sim.v 18 | defines: 19 | PRGA_POSTSYN_NO_REGINIT: null 20 | PRGA_POSTSYN_NO_MEMINIT: null 21 | comp_flags: 22 | - +vcs+initreg+random 23 | run_flags: 24 | - +firmware=${PRGA_ROOT}/examples/app/picosoc/src/hx8kdemo_fw.hex 25 | - +max_cycle=1000000 26 | - +verbosity=0 27 | - +vcs+initreg+0 28 | -------------------------------------------------------------------------------- /website/_includes/category-list.html: -------------------------------------------------------------------------------- 1 | {% case site.category_archive.type %} 2 | {% when "liquid" %} 3 | {% assign path_type = "#" %} 4 | {% when "jekyll-archives" %} 5 | {% assign path_type = nil %} 6 | {% endcase %} 7 | 8 | {% if site.category_archive.path %} 9 | {% assign categories_sorted = page.categories | sort_natural %} 10 | 11 |

12 | {{ site.data.ui-text[site.locale].categories_label | default: "Categories:" }} 13 | 14 | {% for category_word in categories_sorted %} 15 | {% unless forloop.last %}, {% endunless %} 16 | {% endfor %} 17 | 18 |

19 | {% endif %} -------------------------------------------------------------------------------- /examples/app/picosoc/magic_hardpico/config/config.vcs.yaml: -------------------------------------------------------------------------------- 1 | context: ${PRGA_ROOT}/examples/fpga/magic/hardpico/ctx.pkl 2 | compiler: vcs 3 | app: 4 | name: picosoc 5 | sources: 6 | - ../../src/simpleuart.v 7 | - ../../src/spimemio.v 8 | - ../../src/picosoc.v 9 | constraints: 10 | io: io.partial 11 | tests: 12 | testbench: 13 | sources: 14 | - ../../src/hx8kdemo.v 15 | - ../../src/spiflash.v 16 | - ../../src/hx8kdemo_tb.v 17 | - %YOSYS_DATDIR%/ice40/cells_sim.v 18 | defines: 19 | PRGA_POSTSYN_NO_REGINIT: null 20 | PRGA_POSTSYN_NO_MEMINIT: null 21 | comp_flags: 22 | - +vcs+initreg+random 23 | run_flags: 24 | - +firmware=${PRGA_ROOT}/examples/app/picosoc/src/hx8kdemo_fw.hex 25 | - +max_cycle=1000000 26 | - +verbosity=0 27 | - +vcs+initreg+random 28 | -------------------------------------------------------------------------------- /website/_includes/comments-providers/discourse.html: -------------------------------------------------------------------------------- 1 | {% if site.comments.discourse.server %} 2 | {% capture canonical %}{% if site.permalink contains '.html' %}{{ page.url | absolute_url }}{% else %}{{ page.url | absolute_url | remove:'index.html' | strip_slash }}{% endif %}{% endcapture %} 3 | 12 | 13 | {% endif %} 14 | -------------------------------------------------------------------------------- /website/_includes/post_pagination.html: -------------------------------------------------------------------------------- 1 | {% if page.previous or page.next %} 2 | 14 | {% endif %} -------------------------------------------------------------------------------- /examples/fpga/Makefile.in: -------------------------------------------------------------------------------- 1 | PICKLED_CTX := ctx.pkl 2 | BACKUP ?= $(shell date "+%Y-%m-%d-%H-%M") 3 | 4 | SHELL = /bin/bash 5 | .SHELLFLAGS = -o pipefail -c 6 | 7 | .PHONY: all clean backup recover clean-backup 8 | all: $(PICKLED_CTX) 9 | 10 | clean: 11 | rm -rf rtl syn vpr *.log *.pkl 12 | 13 | backup: 14 | if [[ -d backup-$(BACKUP) ]]; then echo "Backup $(BACKUP) already exists"; exit 1; fi 15 | mkdir backup-$(BACKUP) 16 | mv $(PICKLED_CTX) backup-$(BACKUP) 17 | mv rtl backup-$(BACKUP) 18 | mv syn backup-$(BACKUP) 19 | mv vpr backup-$(BACKUP) 20 | 21 | recover: 22 | if [[ ! -d backup-$(BACKUP) ]]; then echo "Backup $(BACKUP) does not exist"; exit 1; fi 23 | rm -rf $(PICKLED_CTX) && mv backup-$(BACKUP)/$(PICKLED_CTX) . 24 | rm -rf rtl && mv backup-$(BACKUP)/rtl . 25 | rm -rf syn && mv backup-$(BACKUP)/syn . 26 | rm -rf vpr && mv backup-$(BACKUP)/vpr . 27 | rmdir backup-$(BACKUP) 28 | 29 | clean-backup: 30 | rm -rf backup-* 31 | 32 | $(PICKLED_CTX): build.py 33 | python -O $< $@ | tee build.log 34 | -------------------------------------------------------------------------------- /website/_includes/search/google-search-scripts.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /website/_includes/scripts.html: -------------------------------------------------------------------------------- 1 | {% if site.footer_scripts %} 2 | {% for script in site.footer_scripts %} 3 | 4 | {% endfor %} 5 | {% else %} 6 | 7 | {% endif %} 8 | 9 | {% if site.search == true or page.layout == "search" %} 10 | {%- assign search_provider = site.search_provider | default: "lunr" -%} 11 | {%- case search_provider -%} 12 | {%- when "lunr" -%} 13 | {% include_cached search/lunr-search-scripts.html %} 14 | {%- when "google" -%} 15 | {% include_cached search/google-search-scripts.html %} 16 | {%- when "algolia" -%} 17 | {% include_cached search/algolia-search-scripts.html %} 18 | {%- endcase -%} 19 | {% endif %} 20 | 21 | {% include analytics.html %} 22 | {% include /comments-providers/scripts.html %} 23 | 24 | {% if site.after_footer_scripts %} 25 | {% for script in site.after_footer_scripts %} 26 | 27 | {% endfor %} 28 | {% endif %} 29 | -------------------------------------------------------------------------------- /website/_includes/feature_section: -------------------------------------------------------------------------------- 1 | {% if include.id %} 2 | {% assign section = page[include.id] %} 3 | {% else %} 4 | {% assign section = page.feature_section %} 5 | {% endif %} 6 | 7 |
8 |
9 | {% if section.image_path %} 10 |
11 | {% if section.alt %}{{ section.alt }}{% endif %} 13 |
14 | {% endif %} 15 | 16 |
17 | {% if section.title %} 18 |
19 |

{{ section.title }}

20 |
21 | {% endif %} 22 | 23 | {% if section.excerpt %} 24 |
25 | {{ section.excerpt | markdownify }} 26 |
27 | {% endif %} 28 |
29 |
30 |
31 | -------------------------------------------------------------------------------- /website/_includes/video: -------------------------------------------------------------------------------- 1 | {% capture video_id %}{{ include.id }}{% endcapture %} 2 | {% capture video_provider %}{{ include.provider }}{% endcapture %} 3 | {% capture video_danmaku %}{{ include.danmaku | default: 0 }}{% endcapture %} 4 | 5 | {% capture video_src %} 6 | {% case video_provider %} 7 | {% when "vimeo" %} 8 | https://player.vimeo.com/video/{{ video_id }}?dnt=true 9 | {% when "youtube" %} 10 | https://www.youtube-nocookie.com/embed/{{ video_id }} 11 | {% when "google-drive" %} 12 | https://drive.google.com/file/d/{{ video_id }}/preview 13 | {% when "bilibili" %} 14 | https://player.bilibili.com/player.html?bvid={{ video_id }}&page=1&as_wide=1&high_quality=1&danmaku={{ video_danmaku }} 15 | {% endcase %} 16 | {% endcapture %} 17 | {% assign video_src = video_src | strip %} 18 | 19 | 20 | {% unless video_src == "" %} 21 |
22 | 23 |
24 | {% endunless %} 25 | -------------------------------------------------------------------------------- /website/_includes/nav_list: -------------------------------------------------------------------------------- 1 | {% assign navigation = site.data.navigation[include.nav] %} 2 | 3 | 27 | -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/skins/_dirt.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Dirt skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $background-color: #f3f3f3 !default; 7 | $text-color: #343434 !default; 8 | $muted-text-color: #8e8b82 !default; 9 | $primary-color: #343434 !default; 10 | $border-color: #e9dcbe !default; 11 | $footer-background-color: #e9dcbe !default; 12 | $link-color: #343434 !default; 13 | $masthead-link-color: $text-color !default; 14 | $masthead-link-color-hover: $text-color !default; 15 | $navicon-link-color-hover: mix(#fff, $text-color, 80%) !default; 16 | 17 | /* dirt syntax highlighting (base16) */ 18 | $base00: #231e18 !default; 19 | $base01: #302b25 !default; 20 | $base02: #48413a !default; 21 | $base03: #9d8b70 !default; 22 | $base04: #b4a490 !default; 23 | $base05: #cabcb1 !default; 24 | $base06: #d7c8bc !default; 25 | $base07: #e4d4c8 !default; 26 | $base08: #d35c5c !default; 27 | $base09: #ca7f32 !default; 28 | $base0a: #e0ac16 !default; 29 | $base0b: #b7ba53 !default; 30 | $base0c: #6eb958 !default; 31 | $base0d: #88a4d3 !default; 32 | $base0e: #bb90e2 !default; 33 | $base0f: #b49368 !default; 34 | -------------------------------------------------------------------------------- /website/_includes/gallery: -------------------------------------------------------------------------------- 1 | {% if include.id %} 2 | {% assign gallery = page[include.id] %} 3 | {% else %} 4 | {% assign gallery = page.gallery %} 5 | {% endif %} 6 | 7 | {% if include.layout %} 8 | {% assign gallery_layout = include.layout %} 9 | {% else %} 10 | {% if gallery.size == 2 %} 11 | {% assign gallery_layout = 'half' %} 12 | {% elsif gallery.size >= 3 %} 13 | {% assign gallery_layout = 'third' %} 14 | {% else %} 15 | {% assign gallery_layout = '' %} 16 | {% endif %} 17 | {% endif %} 18 | 19 | 36 | -------------------------------------------------------------------------------- /website/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | # Hello! This is where you manage which Jekyll version is used to run. 3 | # When you want to use a different version, change it below, save the 4 | # file and run `bundle install`. Run Jekyll with `bundle exec`, like so: 5 | # 6 | # bundle exec jekyll serve 7 | # 8 | # This will help ensure the proper Jekyll version is running. 9 | # Happy Jekylling! 10 | gem "jekyll", "~> 4.2.0" 11 | # This is the default theme for new Jekyll sites. You may change this to anything you like. 12 | gem "minimal-mistakes-jekyll" 13 | # If you want to use GitHub Pages, remove the "gem "jekyll"" above and 14 | # uncomment the line below. To upgrade, run `bundle update github-pages`. 15 | # gem "github-pages", group: :jekyll_plugins 16 | # If you have any plugins, put them here! 17 | group :jekyll_plugins do 18 | # gem "jekyll-feed", "~> 0.12" 19 | end 20 | 21 | # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem 22 | # and associated library. 23 | platforms :mingw, :x64_mingw, :mswin, :jruby do 24 | gem "tzinfo", "~> 1.2" 25 | gem "tzinfo-data" 26 | end 27 | 28 | # Performance-booster for watching directories on Windows 29 | gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin] 30 | 31 | -------------------------------------------------------------------------------- /website/_includes/comment.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {{ include.name }} 4 |
5 |
6 | 13 |

14 | {% if include.date %} 15 | {% if include.index %}{% endif %} 18 | {% endif %} 19 |

20 |
{{ include.message | markdownify }}
21 |
22 |
23 | -------------------------------------------------------------------------------- /website/_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% include seo.html %} 4 | 5 | {% unless site.atom_feed.hide %} 6 | 7 | {% endunless %} 8 | 9 | 10 | 11 | 12 | 15 | 16 | 17 | 18 | 19 | 20 | 34 | 35 | {% if site.head_scripts %} 36 | {% for script in site.head_scripts %} 37 | 38 | {% endfor %} 39 | {% endif %} -------------------------------------------------------------------------------- /website/_includes/footer.html: -------------------------------------------------------------------------------- 1 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /website/_includes/group-by-array: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | {% assign __empty_array = '' | split: ',' %} 10 | {% assign group_names = __empty_array %} 11 | {% assign group_items = __empty_array %} 12 | 13 | 14 | {% assign __names = include.collection | map: include.field %} 15 | 16 | 17 | {% assign __names = __names | join: ',' | join: ',' | split: ',' %} 18 | 19 | 20 | {% assign __names = __names | sort %} 21 | {% for name in __names %} 22 | 23 | 24 | {% unless name == previous %} 25 | 26 | 27 | {% assign group_names = group_names | push: name %} 28 | {% endunless %} 29 | 30 | {% assign previous = name %} 31 | {% endfor %} 32 | 33 | 34 | 35 | {% for name in group_names %} 36 | 37 | 38 | {% assign __item = __empty_array %} 39 | {% for __element in include.collection %} 40 | {% if __element[include.field] contains name %} 41 | {% assign __item = __item | push: __element %} 42 | {% endif %} 43 | {% endfor %} 44 | 45 | 46 | {% assign group_items = group_items | push: __item %} 47 | {% endfor %} -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/skins/_dark.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Dark skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $background-color: #252a34 !default; 7 | $text-color: #eaeaea !default; 8 | $primary-color: #00adb5 !default; 9 | $border-color: mix(#fff, $background-color, 20%) !default; 10 | $code-background-color: mix(#000, $background-color, 15%) !default; 11 | $code-background-color-dark: mix(#000, $background-color, 20%) !default; 12 | $form-background-color: mix(#000, $background-color, 15%) !default; 13 | $footer-background-color: mix(#000, $background-color, 30%) !default; 14 | $link-color: mix($primary-color, $text-color, 40%) !default; 15 | $link-color-hover: mix(#fff, $link-color, 25%) !default; 16 | $link-color-visited: mix(#000, $link-color, 25%) !default; 17 | $masthead-link-color: $text-color !default; 18 | $masthead-link-color-hover: mix(#000, $text-color, 20%) !default; 19 | $navicon-link-color-hover: mix(#000, $background-color, 30%) !default; 20 | 21 | .author__urls.social-icons i, 22 | .author__urls.social-icons .svg-inline--fa, 23 | .page__footer-follow .social-icons i, 24 | .page__footer-follow .social-icons .svg-inline--fa { 25 | color: inherit; 26 | } 27 | 28 | .ais-search-box .ais-search-box--input { 29 | background-color: $form-background-color; 30 | } -------------------------------------------------------------------------------- /website/_includes/archive-single.html: -------------------------------------------------------------------------------- 1 | {% if post.header.teaser %} 2 | {% capture teaser %}{{ post.header.teaser }}{% endcapture %} 3 | {% else %} 4 | {% assign teaser = site.teaser %} 5 | {% endif %} 6 | 7 | {% if post.id %} 8 | {% assign title = post.title | markdownify | remove: "

" | remove: "

" %} 9 | {% else %} 10 | {% assign title = post.title %} 11 | {% endif %} 12 | 13 |
14 |
15 | {% if include.type == "grid" and teaser %} 16 |
17 | 18 |
19 | {% endif %} 20 |

21 | {% if post.link %} 22 | {{ title }} Permalink 23 | {% else %} 24 | {{ title }} 25 | {% endif %} 26 |

27 | {% include page__meta.html type=include.type %} 28 | {% if post.excerpt %}

{{ post.excerpt | markdownify | strip_html | truncate: 160 }}

{% endif %} 29 |
30 |
31 | -------------------------------------------------------------------------------- /website/_includes/search/search_form.html: -------------------------------------------------------------------------------- 1 |
2 | {%- assign search_provider = site.search_provider | default: "lunr" -%} 3 | {%- case search_provider -%} 4 | {%- when "lunr" -%} 5 |
6 | 9 | 10 |
11 |
12 | {%- when "google" -%} 13 |
14 | 17 | 18 |
19 |
20 | 21 |
22 | {%- when "algolia" -%} 23 | 24 |
25 | {%- endcase -%} 26 |
27 | -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/skins/_aqua.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Aqua skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $gray : #1976d2 !default; 7 | $dark-gray : mix(#000, $gray, 40%) !default; 8 | $darker-gray : mix(#000, $gray, 60%) !default; 9 | $light-gray : mix(#fff, $gray, 50%) !default; 10 | $lighter-gray : mix(#fff, $gray, 90%) !default; 11 | 12 | $body-color : #fff !default; 13 | $background-color : #f0fff0 !default; 14 | $code-background-color : $lighter-gray !default; 15 | $code-background-color-dark : $light-gray !default; 16 | $text-color : $dark-gray !default; 17 | $border-color : $lighter-gray !default; 18 | 19 | $primary-color : $gray !default; 20 | $success-color : #27ae60 !default; 21 | $warning-color : #e67e22 !default; 22 | $danger-color : #c0392b !default; 23 | $info-color : #03a9f4 !default; 24 | 25 | /* links */ 26 | $link-color : $info-color !default; 27 | $link-color-hover : mix(#000, $link-color, 25%) !default; 28 | $link-color-visited : mix(#fff, $link-color, 25%) !default; 29 | $masthead-link-color : $primary-color !default; 30 | $masthead-link-color-hover : mix(#000, $primary-color, 25%) !default; -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Minimal Mistakes Jekyll Theme 4.22.0 by Michael Rose 3 | * Copyright 2013-2020 Michael Rose - mademistakes.com | @mmistakes 4 | * Licensed under MIT (https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE) 5 | */ 6 | 7 | /* Variables */ 8 | @import "minimal-mistakes/variables"; 9 | 10 | /* Mixins and functions */ 11 | @import "minimal-mistakes/vendor/breakpoint/breakpoint"; 12 | @include breakpoint-set("to ems", true); 13 | @import "minimal-mistakes/vendor/magnific-popup/magnific-popup"; // Magnific Popup 14 | @import "minimal-mistakes/vendor/susy/susy"; 15 | @import "minimal-mistakes/mixins"; 16 | 17 | /* Core CSS */ 18 | @import "minimal-mistakes/reset"; 19 | @import "minimal-mistakes/base"; 20 | @import "minimal-mistakes/forms"; 21 | @import "minimal-mistakes/tables"; 22 | @import "minimal-mistakes/animations"; 23 | 24 | /* Components */ 25 | @import "minimal-mistakes/buttons"; 26 | @import "minimal-mistakes/notices"; 27 | @import "minimal-mistakes/masthead"; 28 | @import "minimal-mistakes/navigation"; 29 | @import "minimal-mistakes/footer"; 30 | @import "minimal-mistakes/search"; 31 | @import "minimal-mistakes/syntax"; 32 | 33 | /* Utility classes */ 34 | @import "minimal-mistakes/utilities"; 35 | 36 | /* Layout specific */ 37 | @import "minimal-mistakes/page"; 38 | @import "minimal-mistakes/archive"; 39 | @import "minimal-mistakes/sidebar"; 40 | @import "minimal-mistakes/print"; 41 | 42 | /* Custom */ 43 | @import "minimal-mistakes/feature"; 44 | -------------------------------------------------------------------------------- /docs/source/index.rst: -------------------------------------------------------------------------------- 1 | .. Princeton Reconfigurable Gate Array documentation master file, created by 2 | sphinx-quickstart on Sun Nov 3 22:08:40 2019. 3 | You can adapt this file completely to your liking, but it should at least 4 | contain the root `toctree` directive. 5 | 6 | Welcome to Princeton Reconfigurable Gate Array's documentation! 7 | =============================================================== 8 | 9 | Princeton Reconfigurable Gate Array (PRGA) is a customizable, scalable, 10 | versatile, extensible open-source framework for building and using custom 11 | FPGAs. 12 | 13 | Visit PRGA's github repo: `github.com/PrincetonUniversity/prga 14 | `_ 15 | 16 | Features 17 | -------- 18 | * Highly customizable FPGA structures: bring your own IP cores, design your 19 | multi-modal primitive cells into PRGA, and explore heterogeneous CLB/IOB, 20 | custom routing connectivity, and more! 21 | * Scalability: capable of imitating commercial-class FPGAs 22 | * Extensibility: modularized workflow and well-documented low-level API 23 | * Versatility: supporting different configuration circuitry types 24 | 25 | Contents 26 | -------- 27 | .. toctree:: 28 | :maxdepth: 2 29 | :caption: Contents: 30 | 31 | quickstart 32 | fpga_primer 33 | workflow 34 | arch 35 | tutorial/index 36 | API Reference 37 | 38 | 39 | Indices and tables 40 | ------------------ 41 | 42 | * :ref:`genindex` 43 | * :ref:`modindex` 44 | * :ref:`search` 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2021, Princeton University 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /website/_includes/social-share.html: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/skins/_contrast.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Contrast skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $text-color: #000 !default; 7 | $muted-text-color: $text-color !default; 8 | $primary-color: #ff0000 !default; 9 | $border-color: mix(#fff, $text-color, 75%) !default; 10 | $footer-background-color: #000 !default; 11 | $link-color: #0000ff !default; 12 | $masthead-link-color: $text-color !default; 13 | $masthead-link-color-hover: $text-color !default; 14 | $navicon-link-color-hover: mix(#fff, $text-color, 80%) !default; 15 | 16 | /* contrast syntax highlighting (base16) */ 17 | $base00: #000000 !default; 18 | $base01: #242422 !default; 19 | $base02: #484844 !default; 20 | $base03: #6c6c66 !default; 21 | $base04: #918f88 !default; 22 | $base05: #b5b3aa !default; 23 | $base06: #d9d7cc !default; 24 | $base07: #fdfbee !default; 25 | $base08: #ff6c60 !default; 26 | $base09: #e9c062 !default; 27 | $base0a: #ffffb6 !default; 28 | $base0b: #a8ff60 !default; 29 | $base0c: #c6c5fe !default; 30 | $base0d: #96cbfe !default; 31 | $base0e: #ff73fd !default; 32 | $base0f: #b18a3d !default; 33 | 34 | .page__content { 35 | .notice, 36 | .notice--primary, 37 | .notice--info, 38 | .notice--warning, 39 | .notice--success, 40 | .notice--danger { 41 | color: $text-color; 42 | } 43 | } 44 | 45 | .page__footer { 46 | color: #fff !important; // override 47 | } 48 | 49 | .page__footer-follow .social-icons i, 50 | .page__footer-follow .social-icons .svg-inline--fa { 51 | color: inherit; 52 | } 53 | -------------------------------------------------------------------------------- /website/_includes/feature_row: -------------------------------------------------------------------------------- 1 | {% if include.id %} 2 | {% assign feature_row = page[include.id] %} 3 | {% else %} 4 | {% assign feature_row = page.feature_row %} 5 | {% endif %} 6 | 7 |
8 | 9 | {% for f in feature_row %} 10 |
11 |
12 | {% if f.image_path %} 13 |
14 | {% if f.alt %}{{ f.alt }}{% endif %} 16 | {% if f.image_caption %} 17 | {{ f.image_caption | markdownify | remove: "

" | remove: "

" }}
18 | {% endif %} 19 |
20 | {% endif %} 21 | 22 |
23 | {% if f.title %} 24 |

{{ f.title }}

25 | {% endif %} 26 | 27 | {% if f.excerpt %} 28 |
29 | {{ f.excerpt | markdownify }} 30 |
31 | {% endif %} 32 | 33 | {% for a in f.actions %} 34 | 35 | {{ a.btn_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }} 36 |

37 | {% endfor %} 38 |
39 |
40 |
41 | {% endfor %} 42 | 43 |
44 | -------------------------------------------------------------------------------- /website/_includes/page__meta.html: -------------------------------------------------------------------------------- 1 | {% assign document = post | default: page %} 2 | {% if document.read_time or document.show_date %} 3 |

4 | {% if document.show_date and document.date %} 5 | {% assign date = document.date %} 6 | 7 | 8 | 9 | 10 | {% endif %} 11 | 12 | {% if document.read_time and document.show_date %}{% endif %} 13 | 14 | {% if document.read_time %} 15 | {% assign words_per_minute = document.words_per_minute | default: site.words_per_minute | default: 200 %} 16 | {% assign words = document.content | strip_html | number_of_words %} 17 | 18 | 19 | 20 | {% if words < words_per_minute %} 21 | {{ site.data.ui-text[site.locale].less_than | default: "less than" }} 1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }} 22 | {% elsif words == words_per_minute %} 23 | 1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }} 24 | {% else %} 25 | {{ words | divided_by: words_per_minute }} {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }} 26 | {% endif %} 27 | 28 | {% endif %} 29 |

30 | {% endif %} 31 | -------------------------------------------------------------------------------- /examples/app/romtest/src/romtest_test.v: -------------------------------------------------------------------------------- 1 | module romtest_test ( 2 | input wire tb_clk, 3 | input wire tb_rst, 4 | output reg tb_pass, 5 | output reg tb_fail, 6 | input wire tb_prog_done, 7 | input wire [31:0] tb_verbosity, 8 | input wire [31:0] tb_cycle_cnt, 9 | 10 | output wire clk, 11 | output reg [7:0] addr, 12 | input wire [7:0] dout 13 | ); 14 | 15 | assign clk = tb_clk; 16 | 17 | reg tb_prog_done_f; 18 | reg [7:0] addr_f; 19 | reg [7:0] rom [0:255]; 20 | 21 | initial begin 22 | addr = 8'h0; 23 | tb_prog_done_f = 1'b0; 24 | tb_pass = 1'b0; 25 | tb_fail = 1'b0; 26 | 27 | `include "rom.vh" 28 | end 29 | 30 | always @(posedge tb_clk) begin 31 | if (tb_rst) begin 32 | addr <= 8'h0; 33 | tb_prog_done_f <= 1'b0; 34 | end else if (tb_prog_done) begin 35 | addr <= addr + 1; 36 | tb_prog_done_f <= 1'b1; 37 | end 38 | end 39 | 40 | always @(posedge tb_clk) begin 41 | addr_f <= addr; 42 | end 43 | 44 | always @(posedge tb_clk) begin 45 | #0; 46 | 47 | if (tb_prog_done_f) begin 48 | if (dout == rom[addr_f]) begin 49 | $display("[Cycle %05d] rom[%03d] => 0x%02x", 50 | tb_cycle_cnt, addr_f, dout); 51 | 52 | if (&addr_f) begin 53 | tb_pass <= 1'b1; 54 | end 55 | end else begin 56 | $display("[Cycle %05d] rom[%03d] => 0x%02x != 0x%02x (expected), fail", 57 | tb_cycle_cnt, addr_f, dout, rom[addr_f]); 58 | tb_fail <= 1'b1; 59 | end 60 | end 61 | end 62 | 63 | endmodule 64 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![PRGA logo](/docs/source/_static/images/logo.png)](https://parallel.princeton.edu/prga) 2 | 3 | # **P**rinceton **R**econfigurable **G**ate **A**rray 4 | 5 | [![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause) 6 | [![Documentation Status](https://readthedocs.org/projects/prga/badge/?version=latest)](https://prga.readthedocs.io/en/latest/?badge=latest) 7 | [![ci-install](https://github.com/PrincetonUniversity/prga/actions/workflows/checkinstall.yml/badge.svg?branch=release)](https://github.com/PrincetonUniversity/prga/actions/workflows/checkinstall.yml) 8 | [![ci-dev](https://github.com/PrincetonUniversity/prga/actions/workflows/quickcheck.yml/badge.svg?branch=dev)](https://github.com/PrincetonUniversity/prga/actions/workflows/quickcheck.yml) 9 | 10 | Build your own FPGA Chip or embedded FPGA IP with Python, and enjoy a fully 11 | open-source, auto-generated CAD flow specifically for your custom FPGA. 12 | 13 | #### Find out more 14 | * [Documentation](https://prga.rtfd.io) 15 | * [Website](https://parallel.princeton.edu/prga/) 16 | * [Cite PRGA](https://dl.acm.org/doi/abs/10.1145/3431920.3439294) 17 | 18 | ## Quickstart 19 | 20 | ```bash 21 | # Install PRGA and dependencies 22 | cd /path/to/prga/ 23 | ./envscr/install 24 | 25 | # Install iverilog (Icarus Verilog) if Synopsys VCS is not available 26 | # ... 27 | 28 | # Activate Python virtual environment 29 | source ./envscr/activate 30 | 31 | # build an example FPGA 32 | make -C examples/fpga/magic/k4_N2_8x8 33 | 34 | # create CAD & verification project 35 | make -C examples/app/bcd2bin/magic_k4_N2_8x8 36 | 37 | # run RTL-to-bitstream flow and post-implementation simulation 38 | make -C examples/app/bcd2bin/magic_k4_N2_8x8/tests/basic 39 | ``` 40 | -------------------------------------------------------------------------------- /envscr/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | PYTHON_VERSION=3.8.2 4 | 5 | function err() { 6 | >&2 echo -e "\033[0;31m[ERROR]\033[0m" $@ 7 | exit 1 8 | } 9 | 10 | function info() { 11 | echo -e "\033[0;34m[INFO]\033[0m" $@ 12 | } 13 | 14 | CWD=${PWD} 15 | OLD_PATH=$PATH 16 | 17 | trap "cd ${CWD} && export PATH=${OLD_PATH}" EXIT 18 | trap "cd ${CWD} && export PATH=${OLD_PATH}" SIGINT 19 | 20 | if [ ! -z "${VIRTUAL_ENV}" ]; then 21 | err "Already in a Python virtualenv" 22 | fi 23 | 24 | # choose the correct binaries 25 | info "Setting \$PATH" 26 | export PRGA_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." >/dev/null 2>&1 && pwd )" 27 | export PATH=${PRGA_ROOT}/local/bin:$PATH 28 | pushd $PRGA_ROOT 29 | 30 | # find pyenv 31 | info "Finding 'pyenv'" 32 | if command -v pyenv 2>&1 >/dev/null; then 33 | info "Active 'pyenv' found" 34 | elif [ ! -f pyenv/bin/pyenv ]; then 35 | err "'pyenv' not found. Please run envscr/install first" 36 | exit 1 37 | else 38 | export PYENV_ROOT=${PWD}/pyenv 39 | export PATH=${PWD}/pyenv/bin:$PATH 40 | 41 | info "Activating local-installed pyenv" 42 | eval "$( pyenv init - )" 43 | info "Local-installed pyenv activated" 44 | fi 45 | 46 | # select Python version 47 | if $( pyenv local ${PYTHON_VERSION} ); then 48 | info "Python ${PYTHON_VERSION} selected" 49 | else 50 | err "Python ${PYTHON_VERSION} not installed. Please run envscr/install first" 51 | exit 1 52 | fi 53 | 54 | # Run with virtualenv 55 | cd prga.py 56 | info "Entering Python virtualenv ..." 57 | PIPENV_VENV_IN_PROJECT=1 pipenv run $* 58 | info "Leaving Python virtualenv ..." 59 | 60 | # roll back to the old state 61 | info "Reverting \$PATH" 62 | export PATH=$OLD_PATH 63 | popd 64 | 65 | info "Thanks for using PRGA. We look forward to your next use :)" 66 | 67 | # vim: set ft=sh: 68 | -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/_footer.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | FOOTER 3 | ========================================================================== */ 4 | 5 | .page__footer { 6 | @include clearfix; 7 | float: left; 8 | margin-left: 0; 9 | margin-right: 0; 10 | width: 100%; 11 | margin-top: 3em; 12 | color: $muted-text-color; 13 | -webkit-animation: $intro-transition; 14 | animation: $intro-transition; 15 | -webkit-animation-delay: 0.45s; 16 | animation-delay: 0.45s; 17 | background-color: $footer-background-color; 18 | 19 | footer { 20 | @include clearfix; 21 | margin-left: auto; 22 | margin-right: auto; 23 | margin-top: 2em; 24 | max-width: 100%; 25 | padding: 0 1em 2em; 26 | 27 | @include breakpoint($x-large) { 28 | max-width: $x-large; 29 | } 30 | } 31 | 32 | a { 33 | color: inherit; 34 | text-decoration: none; 35 | 36 | &:hover { 37 | text-decoration: underline; 38 | } 39 | } 40 | 41 | .fas, 42 | .fab, 43 | .far, 44 | .fal { 45 | color: $muted-text-color; 46 | } 47 | } 48 | 49 | .page__footer-copyright { 50 | font-family: $global-font-family; 51 | font-size: $type-size-7; 52 | } 53 | 54 | .page__footer-follow { 55 | ul { 56 | margin: 0; 57 | padding: 0; 58 | list-style-type: none; 59 | } 60 | 61 | li { 62 | display: inline-block; 63 | padding-top: 5px; 64 | padding-bottom: 5px; 65 | font-family: $sans-serif-narrow; 66 | font-size: $type-size-6; 67 | text-transform: uppercase; 68 | } 69 | 70 | li + li:before { 71 | content: ""; 72 | padding-right: 5px; 73 | } 74 | 75 | a { 76 | padding-right: 10px; 77 | font-weight: bold; 78 | } 79 | 80 | .social-icons { 81 | a { 82 | white-space: nowrap; 83 | } 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /website/_includes/breadcrumbs.html: -------------------------------------------------------------------------------- 1 | {% case site.category_archive.type %} 2 | {% when "liquid" %} 3 | {% assign path_type = "#" %} 4 | {% when "jekyll-archives" %} 5 | {% assign path_type = nil %} 6 | {% endcase %} 7 | 8 | {% if page.collection != 'posts' %} 9 | {% assign path_type = nil %} 10 | {% assign crumb_path = '/' %} 11 | {% else %} 12 | {% assign crumb_path = site.category_archive.path %} 13 | {% endif %} 14 | 15 | 40 | -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/skins/_sunrise.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Sunrise skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $dark-gray: #0e2431 !default; 7 | $background-color: #e8d5b7 !default; 8 | $text-color: #000 !default; 9 | $muted-text-color: $dark-gray !default; 10 | $primary-color: #fc3a52 !default; 11 | $border-color: mix(#000, $background-color, 20%) !default; 12 | $code-background-color: mix(#fff, $background-color, 20%) !default; 13 | $code-background-color-dark: mix(#000, $background-color, 10%) !default; 14 | $form-background-color: mix(#fff, $background-color, 15%) !default; 15 | $footer-background-color: #f9b248 !default; 16 | $link-color: mix(#000, $primary-color, 10%) !default; 17 | $link-color-hover: mix(#fff, $link-color, 25%) !default; 18 | $link-color-visited: mix(#000, $link-color, 25%) !default; 19 | $masthead-link-color: $text-color !default; 20 | $masthead-link-color-hover: mix(#000, $text-color, 20%) !default; 21 | $navicon-link-color-hover: mix(#000, $background-color, 30%) !default; 22 | 23 | /* sunrise syntax highlighting (base16) */ 24 | $base00: #1d1f21 !default; 25 | $base01: #282a2e !default; 26 | $base02: #373b41 !default; 27 | $base03: #969896 !default; 28 | $base04: #b4b7b4 !default; 29 | $base05: #c5c8c6 !default; 30 | $base06: #e0e0e0 !default; 31 | $base07: #ffffff !default; 32 | $base08: #cc6666 !default; 33 | $base09: #de935f !default; 34 | $base0a: #f0c674 !default; 35 | $base0b: #b5bd68 !default; 36 | $base0c: #8abeb7 !default; 37 | $base0d: #81a2be !default; 38 | $base0e: #b294bb !default; 39 | $base0f: #a3685a !default; 40 | 41 | .author__urls.social-icons i, 42 | .author__urls.social-icons .svg-inline--fa, 43 | .page__footer-follow .social-icons i, 44 | .page__footer-follow .social-icons .svg-inline--fa { 45 | color: inherit; 46 | } 47 | -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/_masthead.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | MASTHEAD 3 | ========================================================================== */ 4 | 5 | .masthead { 6 | position: relative; 7 | border-bottom: 1px solid $border-color; 8 | -webkit-animation: $intro-transition; 9 | animation: $intro-transition; 10 | -webkit-animation-delay: 0.15s; 11 | animation-delay: 0.15s; 12 | z-index: 20; 13 | 14 | &__inner-wrap { 15 | @include clearfix; 16 | margin-left: auto; 17 | margin-right: auto; 18 | padding: 1em; 19 | max-width: 100%; 20 | display: -webkit-box; 21 | display: -ms-flexbox; 22 | display: flex; 23 | -webkit-box-pack: justify; 24 | -ms-flex-pack: justify; 25 | justify-content: space-between; 26 | font-family: $sans-serif-narrow; 27 | 28 | @include breakpoint($x-large) { 29 | max-width: $max-width; 30 | } 31 | 32 | nav { 33 | z-index: 10; 34 | } 35 | 36 | a { 37 | text-decoration: none; 38 | } 39 | } 40 | } 41 | 42 | .site-logo img { 43 | max-height: 2rem; 44 | } 45 | 46 | .site-title { 47 | display: -webkit-box; 48 | display: -ms-flexbox; 49 | display: flex; 50 | -ms-flex-item-align: center; 51 | align-self: center; 52 | font-weight: bold; 53 | // z-index: 20; 54 | } 55 | 56 | .site-subtitle { 57 | display: block; 58 | font-size: $type-size-8; 59 | } 60 | 61 | .masthead__menu { 62 | float: left; 63 | margin-left: 0; 64 | margin-right: 0; 65 | width: 100%; 66 | clear: both; 67 | 68 | .site-nav { 69 | margin-left: 0; 70 | 71 | @include breakpoint($small) { 72 | float: right; 73 | } 74 | } 75 | 76 | ul { 77 | margin: 0; 78 | padding: 0; 79 | clear: both; 80 | list-style-type: none; 81 | } 82 | } 83 | 84 | .masthead__menu-item { 85 | display: block; 86 | list-style-type: none; 87 | white-space: nowrap; 88 | 89 | &--lg { 90 | padding-right: 2em; 91 | font-weight: 700; 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /website/_includes/comments-providers/staticman.html: -------------------------------------------------------------------------------- 1 | {% if site.repository and site.staticman.branch %} 2 | 40 | {% endif %} 41 | -------------------------------------------------------------------------------- /website/_includes/comments-providers/staticman_v2.html: -------------------------------------------------------------------------------- 1 | {% if site.repository and site.comments.staticman.branch %} 2 | 40 | {% endif %} 41 | -------------------------------------------------------------------------------- /website/_includes/masthead.html: -------------------------------------------------------------------------------- 1 | {% capture logo_path %}{{ site.logo }}{% endcapture %} 2 | 3 |
4 |
5 |
6 | 35 |
36 |
37 |
38 | -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/skins/_neon.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Neon skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $background-color: #141010 !default; 7 | $text-color: #fff6fb !default; 8 | $primary-color: #f21368 !default; 9 | $border-color: mix(#fff, $background-color, 20%) !default; 10 | $code-background-color: mix(#000, $background-color, 15%) !default; 11 | $code-background-color-dark: mix(#000, $background-color, 20%) !default; 12 | $form-background-color: mix(#000, $background-color, 15%) !default; 13 | $footer-background-color: mix($primary-color, #000, 10%) !default; 14 | $link-color: $primary-color !default; 15 | $link-color-hover: mix(#fff, $link-color, 25%) !default; 16 | $link-color-visited: mix(#000, $link-color, 25%) !default; 17 | $masthead-link-color: $text-color !default; 18 | $masthead-link-color-hover: mix(#000, $text-color, 20%) !default; 19 | $navicon-link-color-hover: mix(#000, $background-color, 30%) !default; 20 | 21 | /* neon syntax highlighting (base16) */ 22 | $base00: #ffffff !default; 23 | $base01: #e0e0e0 !default; 24 | $base02: #d0d0d0 !default; 25 | $base03: #b0b0b0 !default; 26 | $base04: #000000 !default; 27 | $base05: #101010 !default; 28 | $base06: #151515 !default; 29 | $base07: #202020 !default; 30 | $base08: #ff0086 !default; 31 | $base09: #fd8900 !default; 32 | $base0a: #aba800 !default; 33 | $base0b: #00c918 !default; 34 | $base0c: #1faaaa !default; 35 | $base0d: #3777e6 !default; 36 | $base0e: #ad00a1 !default; 37 | $base0f: #cc6633 !default; 38 | 39 | .author__urls.social-icons i, 40 | .author__urls.social-icons .svg-inline--fa, 41 | .page__footer-follow .social-icons i, 42 | .page__footer-follow .social-icons .svg-inline--fa { 43 | color: inherit; 44 | } 45 | 46 | /* next/previous buttons */ 47 | .pagination--pager { 48 | color: $text-color; 49 | background-color: $primary-color; 50 | border-color: transparent; 51 | 52 | &:visited { 53 | color: $text-color; 54 | } 55 | } 56 | 57 | .ais-search-box .ais-search-box--input { 58 | background-color: $form-background-color; 59 | } -------------------------------------------------------------------------------- /website/publications.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: splash 3 | title: Princeton Reconfigurable Gate Array 4 | permalink: /publications 5 | excerpt: >- 6 | Build your own FPGA Chip or embedded FPGA IP with Python, and enjoy a fully 7 | open-source CAD flow auto-generated specifically for your custom FPGA. 8 | header: 9 | overlay_image: /assets/images/splash.png 10 | actions: 11 | - label: GitHub 12 | icon: "fab fa-fw fa-github" 13 | url: "https://github.com/PrincetonUniversity/prga" 14 | - label: Documentation 15 | icon: "fas fa-book" 16 | url: "https://prga.readthedocs.io" 17 | --- 18 | 19 | ## Main Publications 20 | 21 | * Ang Li, and David Wentzlaff, "PRGA: An Open-Source FPGA Research and 22 | Prototyping Framework", 29th ACM/SIGDA International Symposium on 23 | Field-Programmable Gate Arrays ([FPGA '21](https://isfpga.org/)), 24 | Feburary/March 2021. 25 | 26 | [ACM DL Logo](https://doi.org/10.1145/3431920.3439294) 29 | [](https://dl.acm.org/doi/10.1145/3431920.3439294#) 31 | [](http://parallel.princeton.edu/papers/FPGA21-Li.pdf) 33 |
34 | 35 | ## Other Publications 36 | 37 | * Ang Li, Ting-Jung Chang, and David Wentzlaff, "Automated Design of FPGAs 38 | Facilitated by Cycle-Free Routing", 30th International Conference on 39 | Field-Programmable Logic and Applications 40 | ([FPL '20](https://www.fpl2020.org/)), August/September 2020. 41 | 42 | [IEEE Xplore Logo](https://doi.org/10.1109/FPL50879.2020.00042) 45 | [](http://parallel.princeton.edu/papers/FPL20-Li.pdf) 47 |
48 | -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/skins/_plum.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Plum skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $background-color: #521477 !default; 7 | $text-color: #fffd86 !default; 8 | $primary-color: #c327ab !default; 9 | $border-color: mix(#fff, $background-color, 20%) !default; 10 | $code-background-color: mix(#000, $background-color, 15%) !default; 11 | $code-background-color-dark: mix(#000, $background-color, 20%) !default; 12 | $form-background-color: mix(#000, $background-color, 15%) !default; 13 | $footer-background-color: mix(#000, $background-color, 25%) !default; 14 | $link-color: $primary-color !default; 15 | $link-color-hover: mix(#fff, $link-color, 25%) !default; 16 | $link-color-visited: mix(#000, $link-color, 25%) !default; 17 | $masthead-link-color: $text-color !default; 18 | $masthead-link-color-hover: mix(#000, $text-color, 20%) !default; 19 | $navicon-link-color-hover: mix(#000, $background-color, 30%) !default; 20 | 21 | /* plum syntax highlighting (base16) */ 22 | $base00: #ffffff !default; 23 | $base01: #e0e0e0 !default; 24 | $base02: #d0d0d0 !default; 25 | $base03: #b0b0b0 !default; 26 | $base04: #000000 !default; 27 | $base05: #101010 !default; 28 | $base06: #151515 !default; 29 | $base07: #202020 !default; 30 | $base08: #ff0086 !default; 31 | $base09: #fd8900 !default; 32 | $base0a: #aba800 !default; 33 | $base0b: #00c918 !default; 34 | $base0c: #1faaaa !default; 35 | $base0d: #3777e6 !default; 36 | $base0e: #ad00a1 !default; 37 | $base0f: #cc6633 !default; 38 | 39 | .author__urls.social-icons i, 40 | .author__urls.social-icons .svg-inline--fa, 41 | .page__footer-follow .social-icons i, 42 | .page__footer-follow .social-icons .svg-inline--fa { 43 | color: inherit; 44 | } 45 | 46 | .page__content { 47 | a, 48 | a:visited { 49 | color: inherit; 50 | } 51 | } 52 | 53 | /* next/previous buttons */ 54 | .pagination--pager { 55 | color: $text-color; 56 | background-color: $primary-color; 57 | border-color: transparent; 58 | 59 | &:visited { 60 | color: $text-color; 61 | } 62 | } 63 | 64 | .ais-search-box .ais-search-box--input { 65 | background-color: $form-background-color; 66 | } -------------------------------------------------------------------------------- /website/_includes/search/algolia-search-scripts.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 62 | -------------------------------------------------------------------------------- /.github/workflows/checkinstall.yml: -------------------------------------------------------------------------------- 1 | name: checkinstall 2 | on: 3 | 4 | # weekly 5 | schedule: 6 | - cron: '0 0 * * FRI' 7 | 8 | # and also manually 9 | workflow_dispatch: 10 | 11 | # and whenever key files/submodules change 12 | push: 13 | branches: 14 | - release 15 | - dev 16 | paths: 17 | - envscr/install 18 | - vtr 19 | - yosys 20 | 21 | pull_request: 22 | branches: 23 | - release 24 | - dev 25 | paths: 26 | - envscr/install 27 | - vtr 28 | - yosys 29 | 30 | jobs: 31 | install: 32 | runs-on: ubuntu-latest 33 | 34 | steps: 35 | - name: Checkout PRGA 36 | uses: actions/checkout@v2 37 | 38 | # ======================================================== 39 | # == Restore iverilog from cache, or build from scratch == 40 | # ======================================================== 41 | - name: Cache iverilog 42 | id: cache-ivl 43 | uses: actions/cache@v2 44 | with: 45 | path: iverilog 46 | key: iverilog 47 | 48 | - name: Checkout iverilog 49 | uses: actions/checkout@v2 50 | if: ${{ ! steps.cache-ivl.outputs.cache-hit }} 51 | with: 52 | repository: steveicarus/iverilog 53 | path: iverilog 54 | 55 | - name: Compile iverilog 56 | if: ${{ ! steps.cache-ivl.outputs.cache-hit }} 57 | run: | 58 | sudo apt-get install gperf autoconf 59 | pushd iverilog 60 | sh autoconf.sh 61 | ./configure --prefix=${GITHUB_WORKSPACE}/local 62 | make -j8 63 | popd 64 | 65 | - name: Install iverilog 66 | run: | 67 | pushd iverilog 68 | make install 69 | popd 70 | 71 | # ================== 72 | # == Install PRGA == 73 | # ================== 74 | - name: Install PRGA dependencies 75 | run: sudo apt-get install tcl8.6-dev 76 | 77 | - name: Install PRGA 78 | run: bash envscr/install 79 | 80 | # ======================= 81 | # == Run a quick check == 82 | # ======================= 83 | - name: Run a quick check 84 | uses: ./.github/actions/run_example 85 | with: 86 | fpga_path: magic/k4_N2_8x8 87 | app_path: bcd2bin/magic_k4_N2_8x8 88 | test: basic 89 | -------------------------------------------------------------------------------- /.github/actions/run_example/action.yml: -------------------------------------------------------------------------------- 1 | name: Run an example 2 | description: Build an FPGA example, then run an example application on it 3 | inputs: 4 | fpga_path: 5 | description: Path to the FPGA example relative to the examples/fpga directory 6 | required: true 7 | default: "" 8 | app_path: 9 | description: Path to the application example relative to the examples/app directory 10 | required: true 11 | default: "" 12 | test: 13 | description: ID of the test to be ran. Currently only one test is supported 14 | required: true 15 | default: "" 16 | runs: 17 | using: composite 18 | steps: 19 | - name: Build the FPGA 20 | shell: bash 21 | run: | 22 | pushd ${GITHUB_WORKSPACE} 23 | bash envscr/run make -C ${PWD}/examples/fpga/${{ inputs.fpga_path }} 24 | popd 25 | 26 | - name: Make project for the application 27 | shell: bash 28 | run: | 29 | pushd ${GITHUB_WORKSPACE} 30 | bash envscr/run make -C ${PWD}/examples/app/${{ inputs.app_path }} 31 | popd 32 | 33 | - name: Run behavioral simulation of the application 34 | shell: bash 35 | run: | 36 | pushd ${GITHUB_WORKSPACE} 37 | bash envscr/run make -C ${PWD}/examples/app/${{ inputs.app_path }}/tests/${{ inputs.test }} behav 38 | popd 39 | 40 | - name: Run synthesis for the application 41 | shell: bash 42 | run: | 43 | pushd ${GITHUB_WORKSPACE} 44 | bash envscr/run make -C ${PWD}/examples/app/${{ inputs.app_path }}/app syn 45 | popd 46 | 47 | - name: Run post-synthesis simulation of the application 48 | shell: bash 49 | run: | 50 | pushd ${GITHUB_WORKSPACE} 51 | bash envscr/run make -C ${PWD}/examples/app/${{ inputs.app_path }}/tests/${{ inputs.test }} postsyn 52 | popd 53 | 54 | - name: Run the full RTL-to-bitstream flow for the application 55 | shell: bash 56 | run: | 57 | pushd ${GITHUB_WORKSPACE} 58 | bash envscr/run make -C ${PWD}/examples/app/${{ inputs.app_path }}/app 59 | popd 60 | 61 | - name: Run post-implementation simulation of the application 62 | shell: bash 63 | run: | 64 | pushd ${GITHUB_WORKSPACE} 65 | bash envscr/run make -C ${PWD}/examples/app/${{ inputs.app_path }}/tests/${{ inputs.test }} postimpl 66 | popd 67 | -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/_mixins.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | MIXINS 3 | ========================================================================== */ 4 | 5 | %tab-focus { 6 | /* Default*/ 7 | outline: thin dotted $focus-color; 8 | /* Webkit*/ 9 | outline: 5px auto $focus-color; 10 | outline-offset: -2px; 11 | } 12 | 13 | /* 14 | em function 15 | ========================================================================== */ 16 | 17 | @function em($target, $context: $doc-font-size) { 18 | @return ($target / $context) * 1em; 19 | } 20 | 21 | 22 | /* 23 | Bourbon clearfix 24 | ========================================================================== */ 25 | 26 | /* 27 | * Provides an easy way to include a clearfix for containing floats. 28 | * link http://cssmojo.com/latest_new_clearfix_so_far/ 29 | * 30 | * example scss - Usage 31 | * 32 | * .element { 33 | * @include clearfix; 34 | * } 35 | * 36 | * example css - CSS Output 37 | * 38 | * .element::after { 39 | * clear: both; 40 | * content: ""; 41 | * display: table; 42 | * } 43 | */ 44 | 45 | @mixin clearfix { 46 | clear: both; 47 | 48 | &::after { 49 | clear: both; 50 | content: ""; 51 | display: table; 52 | } 53 | } 54 | 55 | /* 56 | Compass YIQ Color Contrast 57 | https://github.com/easy-designs/yiq-color-contrast 58 | ========================================================================== */ 59 | 60 | @function yiq-is-light( 61 | $color, 62 | $threshold: $yiq-contrasted-threshold 63 | ) { 64 | $red: red($color); 65 | $green: green($color); 66 | $blue: blue($color); 67 | 68 | $yiq: (($red*299)+($green*587)+($blue*114))/1000; 69 | 70 | @if $yiq-debug { @debug $yiq, $threshold; } 71 | 72 | @return if($yiq >= $threshold, true, false); 73 | } 74 | 75 | @function yiq-contrast-color( 76 | $color, 77 | $dark: $yiq-contrasted-dark-default, 78 | $light: $yiq-contrasted-light-default, 79 | $threshold: $yiq-contrasted-threshold 80 | ) { 81 | @return if(yiq-is-light($color, $threshold), $yiq-contrasted-dark-default, $yiq-contrasted-light-default); 82 | } 83 | 84 | @mixin yiq-contrasted( 85 | $background-color, 86 | $dark: $yiq-contrasted-dark-default, 87 | $light: $yiq-contrasted-light-default, 88 | $threshold: $yiq-contrasted-threshold 89 | ) { 90 | background-color: $background-color; 91 | color: yiq-contrast-color($background-color, $dark, $light, $threshold); 92 | } -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/_notices.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | NOTICE TEXT BLOCKS 3 | ========================================================================== */ 4 | 5 | /** 6 | * Default Kramdown usage (no indents!): 7 | *
8 | * #### Headline for the Notice 9 | * Text for the notice 10 | *
11 | */ 12 | 13 | @mixin notice($notice-color) { 14 | margin: 2em 0 !important; /* override*/ 15 | padding: 1em; 16 | color: $dark-gray; 17 | font-family: $global-font-family; 18 | font-size: $type-size-6 !important; 19 | text-indent: initial; /* override*/ 20 | background-color: mix(#fff, $notice-color, 90%); 21 | border-radius: $border-radius; 22 | box-shadow: 0 1px 1px rgba($notice-color, 0.25); 23 | 24 | h4 { 25 | margin-top: 0 !important; /* override*/ 26 | margin-bottom: 0.75em; 27 | line-height: inherit; 28 | } 29 | 30 | @at-root .page__content #{&} h4 { 31 | /* using at-root to override .page-content h4 font size*/ 32 | margin-bottom: 0; 33 | font-size: 1em; 34 | } 35 | 36 | p { 37 | &:last-child { 38 | margin-bottom: 0 !important; /* override*/ 39 | } 40 | } 41 | 42 | h4 + p { 43 | /* remove space above paragraphs that appear directly after notice headline*/ 44 | margin-top: 0; 45 | padding-top: 0; 46 | } 47 | 48 | a { 49 | color: $notice-color; 50 | 51 | &:hover { 52 | color: mix(#000, $notice-color, 40%); 53 | } 54 | } 55 | 56 | code { 57 | background-color: mix(#fff, $notice-color, 95%) 58 | } 59 | 60 | pre code { 61 | background-color: inherit; 62 | } 63 | 64 | ul { 65 | &:last-child { 66 | margin-bottom: 0; /* override*/ 67 | } 68 | } 69 | } 70 | 71 | /* Default notice */ 72 | 73 | .notice { 74 | @include notice($light-gray); 75 | } 76 | 77 | /* Primary notice */ 78 | 79 | .notice--primary { 80 | @include notice($primary-color); 81 | } 82 | 83 | /* Info notice */ 84 | 85 | .notice--info { 86 | @include notice($info-color); 87 | } 88 | 89 | /* Warning notice */ 90 | 91 | .notice--warning { 92 | @include notice($warning-color); 93 | } 94 | 95 | /* Success notice */ 96 | 97 | .notice--success { 98 | @include notice($success-color); 99 | } 100 | 101 | /* Danger notice */ 102 | 103 | .notice--danger { 104 | @include notice($danger-color); 105 | } 106 | -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/_buttons.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | BUTTONS 3 | ========================================================================== */ 4 | 5 | /* 6 | Default button 7 | ========================================================================== */ 8 | 9 | .btn { 10 | /* default */ 11 | display: inline-block; 12 | margin-bottom: 0.25em; 13 | padding: 0.5em 1em; 14 | font-family: $sans-serif; 15 | font-size: $type-size-6; 16 | font-weight: bold; 17 | text-align: center; 18 | text-decoration: none; 19 | border-width: 0; 20 | border-radius: $border-radius; 21 | cursor: pointer; 22 | 23 | .icon { 24 | margin-right: 0.5em; 25 | } 26 | 27 | .icon + .hidden { 28 | margin-left: -0.5em; /* override for hidden text*/ 29 | } 30 | 31 | /* button colors */ 32 | $buttoncolors: 33 | (primary, $primary-color), 34 | (inverse, #fff), 35 | (light-outline, transparent), 36 | (success, $success-color), 37 | (warning, $warning-color), 38 | (danger, $danger-color), 39 | (info, $info-color), 40 | (facebook, $facebook-color), 41 | (twitter, $twitter-color), 42 | (linkedin, $linkedin-color); 43 | 44 | @each $buttoncolor, $color in $buttoncolors { 45 | &--#{$buttoncolor} { 46 | @include yiq-contrasted($color); 47 | @if ($buttoncolor == inverse) { 48 | border: 1px solid $border-color; 49 | } 50 | @if ($buttoncolor == light-outline) { 51 | border: 1px solid #fff; 52 | } 53 | 54 | &:visited { 55 | @include yiq-contrasted($color); 56 | } 57 | 58 | &:hover { 59 | @include yiq-contrasted(mix(#000, $color, 20%)); 60 | } 61 | } 62 | } 63 | 64 | &--link { 65 | padding: 0; 66 | } 67 | 68 | /* fills width of parent container */ 69 | &--block { 70 | display: block; 71 | width: 100%; 72 | 73 | + .btn--block { 74 | margin-top: 0.25em; 75 | } 76 | } 77 | 78 | /* disabled */ 79 | &--disabled { 80 | pointer-events: none; 81 | cursor: not-allowed; 82 | filter: alpha(opacity=65); 83 | box-shadow: none; 84 | opacity: 0.65; 85 | } 86 | 87 | /* extra large button */ 88 | &--x-large { 89 | font-size: $type-size-4; 90 | } 91 | 92 | /* large button */ 93 | &--large { 94 | font-size: $type-size-5; 95 | } 96 | 97 | /* small button */ 98 | &--small { 99 | font-size: $type-size-7; 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /website/_config.yml: -------------------------------------------------------------------------------- 1 | # Welcome to Jekyll! 2 | # 3 | # This config file is meant for settings that affect your whole blog, values 4 | # which you are expected to set up once and rarely edit after that. If you find 5 | # yourself editing this file very often, consider using Jekyll's data files 6 | # feature for the data you need to update frequently. 7 | # 8 | # For technical reasons, this file is *NOT* reloaded automatically when you use 9 | # 'bundle exec jekyll serve'. If you change this file, please restart the server process. 10 | # 11 | # If you need help with YAML syntax, here are some quick references for you: 12 | # https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml 13 | # https://learnxinyminutes.com/docs/yaml/ 14 | # 15 | # Site settings 16 | # These are used to personalize your new site. If you look in the HTML files, 17 | # you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. 18 | # You can create any custom variable you would like, and they will be accessible 19 | # in the templates via {{ site.myvariable }}. 20 | 21 | title: PRGA 22 | name: Princeton University 23 | description: >- # this means to ignore newlines until "baseurl:" 24 | Princeton Reconfigurable Gate Array 25 | baseurl: /prga # the subpath of your site, e.g. /blog 26 | url: "https://parallel.princeton.edu" # the base hostname & protocol for your site, e.g. http://example.com 27 | 28 | # Build settings 29 | theme: minimal-mistakes-jekyll 30 | minimal_mistakes_skin: dark 31 | logo: /assets/images/logo.png 32 | masthead_title: Princeton Reconfigurable Gate Array 33 | 34 | # page defaults 35 | teaser: /assets/images/logo.png 36 | 37 | # footer 38 | footer: 39 | links: 40 | - label: "Github" 41 | icon: "fab fa-fw fa-github" 42 | url: "https://github.com/PrincetonUniversity/prga" 43 | - label: "Documentation" 44 | icon: "fas fa-book" 45 | url: "https://prga.readthedocs.io" 46 | 47 | exclude: 48 | - .gitignore 49 | - README.md 50 | - Makefile 51 | - prga.tar.gz 52 | 53 | # hide feed button in footer 54 | atom_feed: 55 | hide: true 56 | 57 | # Exclude from processing. 58 | # The following items will not be processed, by default. 59 | # Any item listed under the `exclude:` key here will be automatically added to 60 | # the internal "default list". 61 | # 62 | # Excluded items can be processed by explicitly listing the directories or 63 | # their entries' file path in the `include:` list. 64 | # 65 | # exclude: 66 | # - .sass-cache/ 67 | # - .jekyll-cache/ 68 | # - gemfiles/ 69 | # - Gemfile 70 | # - Gemfile.lock 71 | # - node_modules/ 72 | # - vendor/bundle/ 73 | # - vendor/cache/ 74 | # - vendor/gems/ 75 | # - vendor/ruby/ 76 | -------------------------------------------------------------------------------- /envscr/activate: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | PYTHON_VERSION=3.8.2 4 | 5 | if [ "${BASH_SOURCE-}" = "$0" ]; then 6 | sourced=0 7 | else 8 | sourced=1 9 | fi 10 | 11 | export PRGA_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." >/dev/null 2>&1 && pwd )" 12 | 13 | function err() { 14 | >&2 echo -e "\033[0;31m[ERROR]\033[0m" $@ 15 | } 16 | 17 | function info() { 18 | echo -e "\033[0;34m[INFO]\033[0m" $@ 19 | } 20 | 21 | if [ ! -z "${VIRTUAL_ENV}" ]; then 22 | err "Already in a Python virtualenv" 23 | if [ "$sourced" = "1" ]; then return 0; else exit 1; fi 24 | fi 25 | 26 | # choose the correct binaries 27 | info "Setting \$PATH" 28 | OLD_PATH=$PATH 29 | export PATH=$PRGA_ROOT/local/bin:$PATH 30 | 31 | # activate virtualenv 32 | if [[ "$sourced" == "1" ]]; then 33 | info "'envscr/activate' sourced ..." 34 | 35 | if [ ! -f $PRGA_ROOT/prga.py/.venv/bin/activate ]; then 36 | err "Python virtualenv not created yet. Please run envscr/install first" 37 | export PATH=${OLD_PATH} 38 | else 39 | info "Activating Python virtualenv ..." 40 | source $PRGA_ROOT/prga.py/.venv/bin/activate 41 | fi 42 | 43 | else 44 | info "'envscr/activate' executed ..." 45 | 46 | CWD=${PWD} 47 | trap "cd ${CWD} && export PATH=${OLD_PATH}" EXIT 48 | trap "cd ${CWD} && export PATH=${OLD_PATH}" SIGINT 49 | 50 | pushd $PRGA_ROOT 51 | 52 | # find pyenv 53 | info "Finding 'pyenv'" 54 | if command -v pyenv 2>&1 >/dev/null; then 55 | info "Active 'pyenv' found" 56 | elif [ ! -f pyenv/bin/pyenv ]; then 57 | err "'pyenv' not found. Please run envscr/install first" 58 | exit 1 59 | else 60 | export PYENV_ROOT=${PWD}/pyenv 61 | export PATH=${PWD}/pyenv/bin:$PATH 62 | 63 | info "Activating local-installed pyenv" 64 | eval "$( pyenv init --path )" 65 | eval "$( pyenv init - )" 66 | info "Local-installed pyenv activated" 67 | fi 68 | 69 | # select Python version 70 | if $( pyenv local ${PYTHON_VERSION} ); then 71 | info "Python ${PYTHON_VERSION} selected" 72 | else 73 | err "Python ${PYTHON_VERSION} not installed. Please run envscr/install first" 74 | exit 1 75 | fi 76 | 77 | # run with virtualenv 78 | cd $PRGA_ROOT/prga.py 79 | 80 | info "Entering Python virtualenv in a subshell ..." 81 | PIPENV_VENV_IN_PROJECT=1 pipenv shell cd ${CWD} 82 | info "Leaving Python virtualenv ..." 83 | 84 | # roll back to the old state 85 | info "Reverting \$PATH" 86 | export PATH=$OLD_PATH 87 | popd 88 | 89 | info "Thanks for using PRGA. We look forward to your next use :)" 90 | fi 91 | 92 | # vim: set ft=sh: 93 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/src/bcd2bin.v: -------------------------------------------------------------------------------- 1 | module bcd2bin ( 2 | input wire clk, 3 | input wire reset, 4 | input wire start, 5 | input wire [3:0] bcd1, 6 | input wire [3:0] bcd0, 7 | output reg ready, 8 | output reg done_tick, 9 | output wire [6:0] bin 10 | ); 11 | 12 | // symbolic state declaration 13 | localparam [1:0] idle = 2'b00, 14 | op = 2'b01, 15 | done = 2'b10; 16 | 17 | // signal declaration 18 | reg [1:0] state_reg, state_next; 19 | reg [6:0] bin_reg, bin_next; 20 | reg [3:0] n_reg, n_next; 21 | reg [3:0] bcd1_reg, bcd0_reg; 22 | reg [3:0] bcd1_next, bcd0_next; 23 | 24 | // FSMD state & data registers 25 | always @(posedge clk) 26 | if (reset) 27 | begin 28 | state_reg <= idle; 29 | bin_reg <= 0; 30 | n_reg <= 0; 31 | bcd1_reg <= 0; 32 | bcd0_reg <= 0; 33 | end else begin 34 | state_reg <= state_next; 35 | bin_reg <= bin_next; 36 | n_reg <= n_next; 37 | bcd1_reg <= bcd1_next; 38 | bcd0_reg <= bcd0_next; 39 | end 40 | 41 | // FSMD next-state logic 42 | always @* 43 | begin 44 | // defaults 45 | state_next = state_reg; 46 | ready = 1'b0; 47 | done_tick = 1'b0; 48 | bin_next = bin_reg; 49 | bcd0_next = bcd0; // route in bcd1 input 50 | bcd1_next = bcd1; // route in bcd0 input 51 | n_next = n_reg; 52 | 53 | case (state_reg) 54 | idle: begin 55 | ready = 1'b1; 56 | if (start) begin 57 | state_next = op; 58 | n_next = 4'b0111; // iterate 7 times 59 | end 60 | end 61 | op: begin 62 | bin_next = {bcd0_reg[0], bin_reg[6:1]}; // right shift in lowest bit from bcd0_reg 63 | bcd1_next = {1'b0, bcd1_reg[3:1]}; // right shift in 0 to bcd1 64 | // right shift in bcd1[0] into bcd0, if bcd0 > 4, subtract 3 65 | bcd0_next = ({bcd1_reg[0], bcd0_reg[3:1]} > 4) ? ({bcd1_reg[0], bcd0_reg[3:1]} - 4'b0011) : {bcd1_reg[0], bcd0_reg[3:1]}; 66 | 67 | n_next = n_reg - 1; // decrement n 68 | if (n_next==0) 69 | state_next = done; 70 | end 71 | done: begin 72 | done_tick = 1'b1; 73 | state_next = idle; 74 | end 75 | default: 76 | state_next = idle; 77 | endcase 78 | end 79 | 80 | // assign output 81 | assign bin = bin_reg; 82 | 83 | endmodule 84 | -------------------------------------------------------------------------------- /examples/app/bcd2bin/src/bcd2bin_test_basic.v: -------------------------------------------------------------------------------- 1 | module basic ( 2 | input wire tb_clk, 3 | input wire tb_rst, 4 | output reg tb_pass, 5 | output reg tb_fail, 6 | input wire tb_prog_done, 7 | input wire [31:0] tb_verbosity, 8 | input wire [31:0] tb_cycle_cnt, 9 | 10 | output wire clk, 11 | output reg reset, 12 | output reg start, 13 | output reg [3:0] bcd0, 14 | output reg [3:0] bcd1, 15 | input wire ready, 16 | input wire done_tick, 17 | input wire [6:0] bin 18 | ); 19 | 20 | assign clk = tb_clk; 21 | 22 | reg [7:0] reset_buf; 23 | always @(posedge tb_clk) begin 24 | if (tb_rst || ~tb_prog_done) begin 25 | {reset, reset_buf} <= 9'h03f; 26 | end else begin 27 | {reset, reset_buf} <= {reset_buf, 1'b0}; 28 | end 29 | end 30 | 31 | reg [3:0] test_counter; 32 | reg [7:0] source [0:15]; 33 | reg [6:0] sink [0:15]; 34 | 35 | // set up test source & sink 36 | initial begin 37 | source[0] = {4'd0, 4'd0}; sink[0] = 7'h00; 38 | source[1] = {4'd9, 4'd9}; sink[1] = 7'h63; 39 | source[2] = {4'd5, 4'd5}; sink[2] = 7'h37; 40 | source[3] = {4'd0, 4'd9}; sink[3] = 7'h09; 41 | source[4] = {4'd9, 4'd0}; sink[4] = 7'h5a; 42 | 43 | reset = 1'b0; 44 | reset_buf = 8'h0; 45 | start = 1'b0; 46 | test_counter = 0; 47 | tb_pass = 1'b0; 48 | tb_fail = 1'b0; 49 | {bcd1, bcd0} = 0; 50 | end 51 | 52 | always @(posedge tb_clk) begin 53 | if (tb_rst || ~tb_prog_done) begin 54 | start <= 1'b0; 55 | test_counter <= 0; 56 | tb_pass <= 1'b0; 57 | tb_fail <= 1'b0; 58 | {bcd1, bcd0} <= 0; 59 | end else if (tb_prog_done) begin 60 | if (~start || done_tick) begin 61 | if (done_tick) begin 62 | if (bin == sink[test_counter - 1]) begin 63 | $display("[Cycle %04d] bcd2bin: %d => 0x%h", 64 | tb_cycle_cnt, bcd1 * 10 + bcd0, bin); 65 | end else begin 66 | $display("[Cycle %04d] bcd2bin: %d => 0x%h (0x%h expected), fail", 67 | tb_cycle_cnt, bcd1 * 10 + bcd0, bin, sink[test_counter - 1]); 68 | tb_fail <= 1'b1; 69 | end 70 | end 71 | 72 | if (source[test_counter] === 8'hx) begin 73 | tb_pass <= 1'b1; 74 | end else begin 75 | {bcd1, bcd0} <= source[test_counter]; 76 | test_counter <= test_counter + 1; 77 | start <= 1'b1; 78 | end 79 | end 80 | end 81 | end 82 | 83 | endmodule 84 | -------------------------------------------------------------------------------- /website/_sass/minimal-mistakes/_search.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | SEARCH 3 | ========================================================================== */ 4 | 5 | .layout--search { 6 | .archive__item-teaser { 7 | margin-bottom: 0.25em; 8 | } 9 | } 10 | 11 | .search__toggle { 12 | margin-left: 1rem; 13 | margin-right: 1rem; 14 | height: $nav-toggle-height; 15 | border: 0; 16 | outline: none; 17 | color: $primary-color; 18 | background-color: transparent; 19 | cursor: pointer; 20 | -webkit-transition: 0.2s; 21 | transition: 0.2s; 22 | 23 | &:hover { 24 | color: mix(#000, $primary-color, 25%); 25 | } 26 | } 27 | 28 | .search-icon { 29 | width: 100%; 30 | height: 100%; 31 | } 32 | 33 | .search-content { 34 | display: none; 35 | visibility: hidden; 36 | padding-top: 1em; 37 | padding-bottom: 1em; 38 | 39 | &__inner-wrap { 40 | width: 100%; 41 | margin-left: auto; 42 | margin-right: auto; 43 | padding-left: 1em; 44 | padding-right: 1em; 45 | -webkit-animation: $intro-transition; 46 | animation: $intro-transition; 47 | -webkit-animation-delay: 0.15s; 48 | animation-delay: 0.15s; 49 | 50 | @include breakpoint($x-large) { 51 | max-width: $max-width; 52 | } 53 | 54 | } 55 | 56 | &__form { 57 | background-color: transparent; 58 | } 59 | 60 | .search-input { 61 | display: block; 62 | margin-bottom: 0; 63 | padding: 0; 64 | border: none; 65 | outline: none; 66 | box-shadow: none; 67 | background-color: transparent; 68 | font-size: $type-size-3; 69 | 70 | @include breakpoint($large) { 71 | font-size: $type-size-2; 72 | } 73 | 74 | @include breakpoint($x-large) { 75 | font-size: $type-size-1; 76 | } 77 | } 78 | 79 | &.is--visible { 80 | display: block; 81 | visibility: visible; 82 | 83 | &::after { 84 | content: ""; 85 | display: block; 86 | } 87 | } 88 | 89 | .results__found { 90 | margin-top: 0.5em; 91 | font-size: $type-size-6; 92 | } 93 | 94 | .archive__item { 95 | margin-bottom: 2em; 96 | 97 | @include breakpoint($large) { 98 | width: 75%; 99 | } 100 | 101 | @include breakpoint($x-large) { 102 | width: 50%; 103 | } 104 | } 105 | 106 | .archive__item-title { 107 | margin-top: 0; 108 | } 109 | 110 | .archive__item-excerpt { 111 | margin-bottom: 0; 112 | } 113 | } 114 | 115 | /* Algolia search */ 116 | 117 | .ais-search-box { 118 | max-width: 100% !important; 119 | margin-bottom: 2em; 120 | } 121 | 122 | .archive__item-title .ais-Highlight { 123 | color: $primary-color; 124 | font-style: normal; 125 | text-decoration: underline; 126 | } 127 | 128 | .archive__item-excerpt .ais-Highlight { 129 | color: $primary-color; 130 | font-style: normal; 131 | font-weight: bold; 132 | } 133 | -------------------------------------------------------------------------------- /examples/fpga/magic/grady18_N2_10x6/build.py: -------------------------------------------------------------------------------- 1 | from prga import * 2 | from itertools import product 3 | 4 | import sys 5 | 6 | ctx = Context() 7 | gbl_clk = ctx.create_global("clk", is_clock = True) 8 | gbl_clk.bind((0, 1), 0) 9 | ctx.create_segment('L1', 20, 1) 10 | 11 | builder = ctx.build_io_block("iob") 12 | o = builder.create_input("outpad", 1) 13 | i = builder.create_output("inpad", 1) 14 | builder.connect(builder.instances['io'].pins['inpad'], i) 15 | builder.connect(o, builder.instances['io'].pins['outpad']) 16 | iob = builder.commit() 17 | 18 | builder = ctx.build_logic_block("clb") 19 | clk = builder.create_global(gbl_clk, Orientation.south) 20 | in_ = builder.create_input("in", 16, Orientation.west) 21 | out = builder.create_output("out", 8, Orientation.east) 22 | cin = builder.create_input("cin", 1, Orientation.south) 23 | for i, inst in enumerate(builder.instantiate(ctx.primitives["grady18:v0"], "i_grady18", 2)): 24 | builder.connect(clk, inst.pins['clk']) 25 | builder.connect(in_[8 * i: 8 * (i + 1)], inst.pins['in']) 26 | builder.connect(inst.pins["cout_fabric"], out[4 * i + 2: 4 * i + 4]) 27 | builder.connect(inst.pins['out'], out[4 * i: 4 * i + 2]) 28 | builder.connect(cin, inst.pins["cin"], vpr_pack_patterns = ["carrychain"]) 29 | cin = inst.pins["cout"] 30 | builder.connect(cin, builder.create_output("cout", 1, Orientation.north), vpr_pack_patterns = ["carrychain"]) 31 | clb = builder.commit() 32 | 33 | ctx.create_tunnel("carrychain", clb.ports["cout"], clb.ports["cin"], (0, -1)) 34 | clbtile = ctx.build_tile(clb).fill( (0.4, 0.25) ).auto_connect().commit() 35 | 36 | iotiles = {} 37 | for ori in Orientation: 38 | builder = ctx.build_tile(iob, 4, name = "t_io_{}".format(ori.name[0]), 39 | edge = OrientationTuple(False, **{ori.name: True})) 40 | iotiles[ori] = builder.fill( (1., 1.) ).auto_connect().commit() 41 | 42 | builder = ctx.build_array('top', 10, 6, set_as_top = True) 43 | for x, y in product(range(builder.width), range(builder.height)): 44 | if x in (0, builder.width - 1) and y in (0, builder.height - 1): 45 | pass 46 | elif x == 0: 47 | builder.instantiate(iotiles[Orientation.west], (x, y)) 48 | elif x == builder.width - 1: 49 | builder.instantiate(iotiles[Orientation.east], (x, y)) 50 | elif y == 0: 51 | builder.instantiate(iotiles[Orientation.south], (x, y)) 52 | elif y == builder.height - 1: 53 | builder.instantiate(iotiles[Orientation.north], (x, y)) 54 | else: 55 | builder.instantiate(clbtile, (x, y)) 56 | top = builder.fill( SwitchBoxPattern.cycle_free ).auto_connect().commit() 57 | 58 | Flow( 59 | VPRArchGeneration('vpr/arch.xml'), 60 | VPR_RRG_Generation('vpr/rrg.xml'), 61 | YosysScriptsCollection('syn'), 62 | Materialization('magic'), 63 | Translation(), 64 | SwitchPathAnnotation(), 65 | ProgCircuitryInsertion(), 66 | VerilogCollection('rtl'), 67 | ).run(ctx) 68 | 69 | ctx.pickle("ctx.pkl" if len(sys.argv) < 2 else sys.argv[1]) 70 | -------------------------------------------------------------------------------- /examples/fpga/scanchain/grady18_N2_10x6/build.py: -------------------------------------------------------------------------------- 1 | from prga import * 2 | from itertools import product 3 | 4 | import sys 5 | 6 | ctx = Context() 7 | gbl_clk = ctx.create_global("clk", is_clock = True) 8 | gbl_clk.bind((0, 1), 0) 9 | ctx.create_segment('L1', 20, 1) 10 | 11 | builder = ctx.build_io_block("iob") 12 | o = builder.create_input("outpad", 1) 13 | i = builder.create_output("inpad", 1) 14 | builder.connect(builder.instances['io'].pins['inpad'], i) 15 | builder.connect(o, builder.instances['io'].pins['outpad']) 16 | iob = builder.commit() 17 | 18 | builder = ctx.build_logic_block("clb") 19 | clk = builder.create_global(gbl_clk, Orientation.south) 20 | in_ = builder.create_input("in", 16, Orientation.west) 21 | out = builder.create_output("out", 8, Orientation.east) 22 | cin = builder.create_input("cin", 1, Orientation.south) 23 | for i, inst in enumerate(builder.instantiate(ctx.primitives["grady18:v0"], "i_grady18", 2)): 24 | builder.connect(clk, inst.pins['clk']) 25 | builder.connect(in_[8 * i: 8 * (i + 1)], inst.pins['in']) 26 | builder.connect(inst.pins["cout_fabric"], out[4 * i + 2: 4 * i + 4]) 27 | builder.connect(inst.pins['out'], out[4 * i: 4 * i + 2]) 28 | builder.connect(cin, inst.pins["cin"], vpr_pack_patterns = ["carrychain"]) 29 | cin = inst.pins["cout"] 30 | builder.connect(cin, builder.create_output("cout", 1, Orientation.north), vpr_pack_patterns = ["carrychain"]) 31 | clb = builder.commit() 32 | 33 | ctx.create_tunnel("carrychain", clb.ports["cout"], clb.ports["cin"], (0, -1)) 34 | clbtile = ctx.build_tile(clb).fill( (0.4, 0.25) ).auto_connect().commit() 35 | 36 | iotiles = {} 37 | for ori in Orientation: 38 | builder = ctx.build_tile(iob, 4, name = "t_io_{}".format(ori.name[0]), 39 | edge = OrientationTuple(False, **{ori.name: True})) 40 | iotiles[ori] = builder.fill( (1., 1.) ).auto_connect().commit() 41 | 42 | builder = ctx.build_array('top', 10, 6, set_as_top = True) 43 | for x, y in product(range(builder.width), range(builder.height)): 44 | if x in (0, builder.width - 1) and y in (0, builder.height - 1): 45 | pass 46 | elif x == 0: 47 | builder.instantiate(iotiles[Orientation.west], (x, y)) 48 | elif x == builder.width - 1: 49 | builder.instantiate(iotiles[Orientation.east], (x, y)) 50 | elif y == 0: 51 | builder.instantiate(iotiles[Orientation.south], (x, y)) 52 | elif y == builder.height - 1: 53 | builder.instantiate(iotiles[Orientation.north], (x, y)) 54 | else: 55 | builder.instantiate(clbtile, (x, y)) 56 | top = builder.fill( SwitchBoxPattern.cycle_free ).auto_connect().commit() 57 | 58 | Flow( 59 | VPRArchGeneration('vpr/arch.xml'), 60 | VPR_RRG_Generation('vpr/rrg.xml'), 61 | YosysScriptsCollection('syn'), 62 | Materialization('scanchain', chain_width = 2), 63 | Translation(), 64 | SwitchPathAnnotation(), 65 | ProgCircuitryInsertion(), 66 | VerilogCollection('rtl'), 67 | ).run(ctx) 68 | 69 | ctx.pickle("ctx.pkl" if len(sys.argv) < 2 else sys.argv[1]) 70 | -------------------------------------------------------------------------------- /examples/fpga/magic/k4_N2_8x8/build.py: -------------------------------------------------------------------------------- 1 | from prga import * 2 | from itertools import product 3 | 4 | import sys 5 | 6 | ctx = Context() 7 | gbl_clk = ctx.create_global("clk", is_clock = True) 8 | gbl_clk.bind((0, 1), 0) 9 | ctx.create_segment('L1', 20, 1) 10 | 11 | builder = ctx.build_slice("slice") 12 | clk = builder.create_clock("clk") 13 | i = builder.create_input("i", 4) 14 | o = builder.create_output("o", 1) 15 | lut = builder.instantiate(ctx.primitives["lut4"], "lut") 16 | ff = builder.instantiate(ctx.primitives["flipflop"], "ff") 17 | builder.connect(clk, ff.pins['clk']) 18 | builder.connect(i, lut.pins['in']) 19 | builder.connect(lut.pins['out'], o) 20 | builder.connect(lut.pins['out'], ff.pins['D'], vpr_pack_patterns = ('lut_dff', )) 21 | builder.connect(ff.pins['Q'], o) 22 | cluster = builder.commit() 23 | 24 | builder = ctx.build_io_block("iob") 25 | o = builder.create_input("outpad", 1) 26 | i = builder.create_output("inpad", 1) 27 | builder.connect(builder.instances['io'].pins['inpad'], i) 28 | builder.connect(o, builder.instances['io'].pins['outpad']) 29 | iob = builder.commit() 30 | 31 | builder = ctx.build_logic_block("clb") 32 | clk = builder.create_global(gbl_clk, Orientation.south) 33 | for i, inst in enumerate(builder.instantiate(cluster, "cluster", 2)): 34 | builder.connect(clk, inst.pins['clk']) 35 | builder.connect(builder.create_input("i{}".format(i), 4, Orientation.west), inst.pins['i']) 36 | builder.connect(inst.pins['o'], builder.create_output("o{}".format(i), 1, Orientation.east)) 37 | clb = builder.commit() 38 | 39 | clbtile = ctx.build_tile(clb).fill( (0.4, 0.25) ).auto_connect().commit() 40 | 41 | iotiles = {} 42 | for ori in Orientation: 43 | builder = ctx.build_tile(iob, 4, name = "t_io_{}".format(ori.name[0]), 44 | edge = OrientationTuple(False, **{ori.name: True})) 45 | iotiles[ori] = builder.fill( (1., 1.) ).auto_connect().commit() 46 | 47 | builder = ctx.build_array('top', 8, 8, set_as_top = True) 48 | for x, y in product(range(builder.width), range(builder.height)): 49 | if x in (0, builder.width - 1) and y in (0, builder.height - 1): 50 | pass 51 | elif x == 0: 52 | builder.instantiate(iotiles[Orientation.west], (x, y)) 53 | elif x == builder.width - 1: 54 | builder.instantiate(iotiles[Orientation.east], (x, y)) 55 | elif y == 0: 56 | builder.instantiate(iotiles[Orientation.south], (x, y)) 57 | elif y == builder.height - 1: 58 | builder.instantiate(iotiles[Orientation.north], (x, y)) 59 | else: 60 | builder.instantiate(clbtile, (x, y)) 61 | top = builder.fill( SwitchBoxPattern.cycle_free ).auto_connect().commit() 62 | 63 | Flow( 64 | VPRArchGeneration('vpr/arch.xml'), 65 | VPR_RRG_Generation('vpr/rrg.xml'), 66 | YosysScriptsCollection('syn'), 67 | Materialization('magic'), 68 | Translation(), 69 | SwitchPathAnnotation(), 70 | ProgCircuitryInsertion(), 71 | VerilogCollection('rtl'), 72 | ).run(ctx) 73 | 74 | ctx.pickle("ctx.pkl" if len(sys.argv) < 2 else sys.argv[1]) 75 | -------------------------------------------------------------------------------- /examples/fpga/scanchain/k4_N2_8x8/build.py: -------------------------------------------------------------------------------- 1 | from prga import * 2 | from itertools import product 3 | 4 | import sys 5 | 6 | ctx = Context() 7 | gbl_clk = ctx.create_global("clk", is_clock = True) 8 | gbl_clk.bind((0, 1), 0) 9 | ctx.create_segment('L1', 20, 1) 10 | 11 | builder = ctx.build_slice("slice") 12 | clk = builder.create_clock("clk") 13 | i = builder.create_input("i", 4) 14 | o = builder.create_output("o", 1) 15 | lut = builder.instantiate(ctx.primitives["lut4"], "lut") 16 | ff = builder.instantiate(ctx.primitives["flipflop"], "ff") 17 | builder.connect(clk, ff.pins['clk']) 18 | builder.connect(i, lut.pins['in']) 19 | builder.connect(lut.pins['out'], o) 20 | builder.connect(lut.pins['out'], ff.pins['D'], vpr_pack_patterns = ('lut_dff', )) 21 | builder.connect(ff.pins['Q'], o) 22 | cluster = builder.commit() 23 | 24 | builder = ctx.build_io_block("iob") 25 | o = builder.create_input("outpad", 1) 26 | i = builder.create_output("inpad", 1) 27 | builder.connect(builder.instances['io'].pins['inpad'], i) 28 | builder.connect(o, builder.instances['io'].pins['outpad']) 29 | iob = builder.commit() 30 | 31 | builder = ctx.build_logic_block("clb") 32 | clk = builder.create_global(gbl_clk, Orientation.south) 33 | for i, inst in enumerate(builder.instantiate(cluster, "cluster", 2)): 34 | builder.connect(clk, inst.pins['clk']) 35 | builder.connect(builder.create_input("i{}".format(i), 4, Orientation.west), inst.pins['i']) 36 | builder.connect(inst.pins['o'], builder.create_output("o{}".format(i), 1, Orientation.east)) 37 | clb = builder.commit() 38 | 39 | clbtile = ctx.build_tile(clb).fill( (0.4, 0.25) ).auto_connect().commit() 40 | 41 | iotiles = {} 42 | for ori in Orientation: 43 | builder = ctx.build_tile(iob, 4, name = "t_io_{}".format(ori.name[0]), 44 | edge = OrientationTuple(False, **{ori.name: True})) 45 | iotiles[ori] = builder.fill( (1., 1.) ).auto_connect().commit() 46 | 47 | builder = ctx.build_array('top', 8, 8, set_as_top = True) 48 | for x, y in product(range(builder.width), range(builder.height)): 49 | if x in (0, builder.width - 1) and y in (0, builder.height - 1): 50 | pass 51 | elif x == 0: 52 | builder.instantiate(iotiles[Orientation.west], (x, y)) 53 | elif x == builder.width - 1: 54 | builder.instantiate(iotiles[Orientation.east], (x, y)) 55 | elif y == 0: 56 | builder.instantiate(iotiles[Orientation.south], (x, y)) 57 | elif y == builder.height - 1: 58 | builder.instantiate(iotiles[Orientation.north], (x, y)) 59 | else: 60 | builder.instantiate(clbtile, (x, y)) 61 | top = builder.fill( SwitchBoxPattern.cycle_free ).auto_connect().commit() 62 | 63 | Flow( 64 | VPRArchGeneration('vpr/arch.xml'), 65 | VPR_RRG_Generation('vpr/rrg.xml'), 66 | YosysScriptsCollection('syn'), 67 | Materialization('scanchain'), 68 | Translation(), 69 | SwitchPathAnnotation(), 70 | ProgCircuitryInsertion(), 71 | VerilogCollection('rtl'), 72 | ).run(ctx) 73 | 74 | ctx.pickle("ctx.pkl" if len(sys.argv) < 2 else sys.argv[1]) 75 | -------------------------------------------------------------------------------- /examples/fpga/pktchain/defaultchain_k4_N2_8x8/build.py: -------------------------------------------------------------------------------- 1 | from prga import * 2 | from itertools import product 3 | 4 | import sys 5 | 6 | import logging 7 | logging.getLogger("prga").setLevel(logging.DEBUG) 8 | 9 | ctx = Context() 10 | gbl_clk = ctx.create_global("clk", is_clock = True) 11 | gbl_clk.bind((0, 1), 0) 12 | ctx.create_segment('L1', 20, 1) 13 | 14 | builder = ctx.build_slice("slice") 15 | clk = builder.create_clock("clk") 16 | i = builder.create_input("i", 4) 17 | o = builder.create_output("o", 1) 18 | lut = builder.instantiate(ctx.primitives["lut4"], "lut") 19 | ff = builder.instantiate(ctx.primitives["flipflop"], "ff") 20 | builder.connect(clk, ff.pins['clk']) 21 | builder.connect(i, lut.pins['in']) 22 | builder.connect(lut.pins['out'], o) 23 | builder.connect(lut.pins['out'], ff.pins['D'], vpr_pack_patterns = ('lut_dff', )) 24 | builder.connect(ff.pins['Q'], o) 25 | cluster = builder.commit() 26 | 27 | builder = ctx.build_io_block("iob") 28 | o = builder.create_input("outpad", 1) 29 | i = builder.create_output("inpad", 1) 30 | builder.connect(builder.instances['io'].pins['inpad'], i) 31 | builder.connect(o, builder.instances['io'].pins['outpad']) 32 | iob = builder.commit() 33 | 34 | builder = ctx.build_logic_block("clb") 35 | clk = builder.create_global(gbl_clk, Orientation.south) 36 | for i, inst in enumerate(builder.instantiate(cluster, "cluster", 2)): 37 | builder.connect(clk, inst.pins['clk']) 38 | builder.connect(builder.create_input("i{}".format(i), 4, Orientation.west), inst.pins['i']) 39 | builder.connect(inst.pins['o'], builder.create_output("o{}".format(i), 1, Orientation.east)) 40 | clb = builder.commit() 41 | 42 | clbtile = ctx.build_tile(clb).fill( (0.4, 0.25) ).auto_connect().commit() 43 | 44 | iotiles = {} 45 | for ori in Orientation: 46 | builder = ctx.build_tile(iob, 4, name = "t_io_{}".format(ori.name[0]), 47 | edge = OrientationTuple(False, **{ori.name: True})) 48 | iotiles[ori] = builder.fill( (1., 1.) ).auto_connect().commit() 49 | 50 | builder = ctx.build_array('top', 8, 8, set_as_top = True) 51 | for x, y in product(range(builder.width), range(builder.height)): 52 | if x in (0, builder.width - 1) and y in (0, builder.height - 1): 53 | pass 54 | elif x == 0: 55 | builder.instantiate(iotiles[Orientation.west], (x, y)) 56 | elif x == builder.width - 1: 57 | builder.instantiate(iotiles[Orientation.east], (x, y)) 58 | elif y == 0: 59 | builder.instantiate(iotiles[Orientation.south], (x, y)) 60 | elif y == builder.height - 1: 61 | builder.instantiate(iotiles[Orientation.north], (x, y)) 62 | else: 63 | builder.instantiate(clbtile, (x, y)) 64 | top = builder.fill( SwitchBoxPattern.cycle_free ).auto_connect().commit() 65 | 66 | Flow( 67 | VPRArchGeneration('vpr/arch.xml'), 68 | VPR_RRG_Generation('vpr/rrg.xml'), 69 | YosysScriptsCollection('syn'), 70 | Materialization('pktchain', chain_width = 1, phit_width = 4), 71 | Translation(), 72 | SwitchPathAnnotation(), 73 | ProgCircuitryInsertion(), 74 | VerilogCollection('rtl'), 75 | ).run(ctx) 76 | 77 | ctx.pickle("ctx.pkl" if len(sys.argv) < 2 else sys.argv[1]) 78 | -------------------------------------------------------------------------------- /examples/app/picosoc/src/hx8kdemo.v: -------------------------------------------------------------------------------- 1 | /* 2 | * PicoSoC - A simple example SoC using PicoRV32 3 | * 4 | * Copyright (C) 2017 Clifford Wolf 5 | * 6 | * Permission to use, copy, modify, and/or distribute this software for any 7 | * purpose with or without fee is hereby granted, provided that the above 8 | * copyright notice and this permission notice appear in all copies. 9 | * 10 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 | * 18 | */ 19 | 20 | module hx8kdemo ( 21 | input clk, 22 | input tb_rst, 23 | output resetn, 24 | 25 | // output ser_tx, 26 | // input ser_rx, 27 | 28 | output [7:0] leds, 29 | 30 | // output flash_csb, 31 | // output flash_clk, 32 | inout flash_io0, 33 | inout flash_io1, 34 | inout flash_io2, 35 | inout flash_io3, 36 | 37 | input iomem_valid, 38 | output reg iomem_ready, 39 | input [ 3:0] iomem_wstrb, 40 | input [31:0] iomem_addr, 41 | input [31:0] iomem_wdata, 42 | output reg [31:0] iomem_rdata, 43 | 44 | input flash_io0_oe, 45 | input flash_io1_oe, 46 | input flash_io2_oe, 47 | input flash_io3_oe, 48 | 49 | input flash_io0_do, 50 | input flash_io1_do, 51 | input flash_io2_do, 52 | input flash_io3_do, 53 | 54 | output flash_io0_di, 55 | output flash_io1_di, 56 | output flash_io2_di, 57 | output flash_io3_di 58 | ); 59 | reg [5:0] reset_cnt; 60 | assign resetn = &reset_cnt; 61 | 62 | initial begin 63 | reset_cnt = 0; 64 | end 65 | 66 | always @(posedge clk) begin 67 | if (~tb_rst) begin 68 | reset_cnt <= reset_cnt + !resetn; 69 | end 70 | end 71 | 72 | SB_IO #( 73 | .PIN_TYPE(6'b 1010_01), 74 | .PULLUP(1'b 0) 75 | ) flash_io_buf [3:0] ( 76 | .PACKAGE_PIN({flash_io3, flash_io2, flash_io1, flash_io0}), 77 | .OUTPUT_ENABLE({flash_io3_oe, flash_io2_oe, flash_io1_oe, flash_io0_oe}), 78 | .D_OUT_0({flash_io3_do, flash_io2_do, flash_io1_do, flash_io0_do}), 79 | .D_IN_0({flash_io3_di, flash_io2_di, flash_io1_di, flash_io0_di}) 80 | ); 81 | 82 | reg iomem_ready; 83 | reg [31:0] iomem_rdata; 84 | 85 | reg [31:0] gpio; 86 | assign leds = gpio; 87 | 88 | always @(posedge clk) begin 89 | if (!resetn) begin 90 | iomem_ready <= 0; 91 | gpio <= 0; 92 | end else begin 93 | iomem_ready <= 0; 94 | if (iomem_valid && !iomem_ready && iomem_addr[31:24] == 8'h 03) begin 95 | iomem_ready <= 1; 96 | iomem_rdata <= gpio; 97 | if (iomem_wstrb[0]) gpio[ 7: 0] <= iomem_wdata[ 7: 0]; 98 | if (iomem_wstrb[1]) gpio[15: 8] <= iomem_wdata[15: 8]; 99 | if (iomem_wstrb[2]) gpio[23:16] <= iomem_wdata[23:16]; 100 | if (iomem_wstrb[3]) gpio[31:24] <= iomem_wdata[31:24]; 101 | end 102 | end 103 | end 104 | 105 | endmodule 106 | -------------------------------------------------------------------------------- /website/_includes/page__hero.html: -------------------------------------------------------------------------------- 1 | {% capture overlay_img_path %}{{ page.header.overlay_image | relative_url }}{% endcapture %} 2 | 3 | {% if page.header.overlay_filter contains "gradient" %} 4 | {% capture overlay_filter %}{{ page.header.overlay_filter }}{% endcapture %} 5 | {% elsif page.header.overlay_filter contains "rgba" %} 6 | {% capture overlay_filter %}{{ page.header.overlay_filter }}{% endcapture %} 7 | {% capture overlay_filter %}linear-gradient({{ overlay_filter }}, {{ overlay_filter }}){% endcapture %} 8 | {% elsif page.header.overlay_filter %} 9 | {% capture overlay_filter %}rgba(0, 0, 0, {{ page.header.overlay_filter }}){% endcapture %} 10 | {% capture overlay_filter %}linear-gradient({{ overlay_filter }}, {{ overlay_filter }}){% endcapture %} 11 | {% endif %} 12 | 13 | {% if page.header.image_description %} 14 | {% assign image_description = page.header.image_description %} 15 | {% else %} 16 | {% assign image_description = page.title %} 17 | {% endif %} 18 | 19 | {% assign image_description = image_description | markdownify | strip_html | strip_newlines | escape_once %} 20 | 21 |
24 | {% if page.header.overlay_color or page.header.overlay_image %} 25 |
26 |

27 | {% if paginator and site.paginate_show_page_num %} 28 | {{ site.title }}{% unless paginator.page == 1 %} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %} 29 | {% else %} 30 | {{ page.title | default: site.title | markdownify | remove: "

" | remove: "

" }} 31 | {% endif %} 32 |

33 | {% if page.tagline %} 34 |

{{ page.tagline | markdownify | remove: "

" | remove: "

" }}

35 | {% elsif page.header.show_overlay_excerpt != false and page.excerpt %} 36 |

{{ page.excerpt | markdownify | remove: "

" | remove: "

" }}

37 | {% endif %} 38 | {% include page__meta.html %} 39 | {% if page.header.cta_url %} 40 |

{{ page.header.cta_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}

41 | {% endif %} 42 | {% if page.header.actions %} 43 |

44 | {% for action in page.header.actions %} 45 | {{ action.label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }} 46 | {% endfor %} 47 | {% endif %} 48 |

49 | {% else %} 50 | {{ image_description }} 51 | {% endif %} 52 | {% if page.header.caption %} 53 | {{ page.header.caption | markdownify | remove: "

" | remove: "

" }}
54 | {% endif %} 55 |
56 | -------------------------------------------------------------------------------- /docs/source/conf.py: -------------------------------------------------------------------------------- 1 | # Configuration file for the Sphinx documentation builder. 2 | # 3 | # This file only contains a selection of the most common options. For a full 4 | # list see the documentation: 5 | # http://www.sphinx-doc.org/en/master/config 6 | 7 | # -- Path setup -------------------------------------------------------------- 8 | 9 | # If extensions (or modules to document with autodoc) are in another directory, 10 | # add these directories to sys.path here. If the directory is relative to the 11 | # documentation root, use os.path.abspath to make it absolute, like shown here. 12 | 13 | # import os 14 | # import sys 15 | # sys.path.insert(0, os.path.abspath('../../prga.py')) 16 | 17 | # -- Project information ----------------------------------------------------- 18 | 19 | project = 'Princeton Reconfigurable Gate Array' 20 | copyright = '2019, Ang Li' 21 | author = 'Ang Li' 22 | 23 | # The full version, including alpha/beta/rc tags 24 | release = 'Alpha 0.3.3' 25 | 26 | # -- General configuration --------------------------------------------------- 27 | 28 | # Add any Sphinx extension module names here, as strings. They can be 29 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom 30 | # ones. 31 | extensions = [ 32 | 'sphinx.ext.napoleon', 33 | 'sphinx.ext.autodoc', 34 | 'sphinx.ext.githubpages', 35 | 'sphinx.ext.autosectionlabel', 36 | ] 37 | 38 | # Add any paths that contain templates here, relative to this directory. 39 | templates_path = ['_templates'] 40 | 41 | # List of patterns, relative to source directory, that match files and 42 | # directories to ignore when looking for source files. 43 | # This pattern also affects html_static_path and html_extra_path. 44 | exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] 45 | 46 | # Master document containing the root toctree 47 | master_doc = "index" 48 | 49 | # -- Options for HTML output ------------------------------------------------- 50 | 51 | # The theme to use for HTML and HTML Help pages. See the documentation for 52 | # a list of builtin themes. 53 | # 54 | html_theme = 'sphinx_materialdesign_theme' 55 | html_logo = '_static/images/logo.png' 56 | html_theme_options = { 57 | 'header_links' : [ 58 | ('Home', 'http://parallel.princeton.edu/prga/', True, 'home'), 59 | ('Github', "https://github.com/PrincetonUniversity/prga", True, 'link'), 60 | ('Documentation', "index", False, 'description'), 61 | ], 62 | 'fixed_drawer': True, 63 | 'fixed_header': True, 64 | 'header_waterfall': True, 65 | 'header_scroll': False, 66 | 'show_header_title': False, 67 | 'show_drawer_title': True, 68 | 'show_footer': True, 69 | } 70 | 71 | # Add any paths that contain custom static files (such as style sheets) here, 72 | # relative to this directory. They are copied after the builtin static files, 73 | # so a file named "default.css" will overwrite the builtin "default.css". 74 | html_static_path = ['_static'] 75 | 76 | # -- Extension configuration ------------------------------------------------- 77 | default_role = 'any' 78 | 79 | autodoc_default_options = { 80 | 'member-order': 'bysource', 81 | 'private-members': None, 82 | 'ignore-module-all': None, 83 | 'exclude-members': '_abc_cache,_abc_negative_cache,_abc_negative_cache_version,_abc_registry,_abc_impl', 84 | } 85 | 86 | # Napoleon settings 87 | napoleon_google_docstring = True 88 | 89 | # autosectionlabel settings 90 | autosectionlabel_prefix_document = True 91 | --------------------------------------------------------------------------------