├── 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 |
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 |
2 | {{ site.data.ui-text[site.locale].skip_links | default: 'Skip links' }}
3 |
8 |
9 |
--------------------------------------------------------------------------------
/website/_includes/page__date.html:
--------------------------------------------------------------------------------
1 | {% if page.last_modified_at %}
2 | {{ site.data.ui-text[site.locale].date_label | default: "Updated:" }} {{ page.last_modified_at | date: "%B %-d, %Y" }}
3 | {% elsif page.date %}
4 | {{ site.data.ui-text[site.locale].date_label | default: "Updated:" }} {{ page.date | date: "%B %-d, %Y" }}
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 | {{ tag_word }} {% 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 | Please enable JavaScript to view the comments powered by Disqus.
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 | {{ category_word }} {% 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 | Please enable JavaScript to view the comments powered by Discourse.
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 |
13 |
14 | {% endif %}
15 |
16 |
17 | {% if section.title %}
18 |
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 |
4 | {% if page.sidebar.title %}{{ page.sidebar.title }} {% endif %}
5 |
6 | {{ site.data.ui-text[site.locale].menu_label | default: "Toggle Menu" }}
7 |
8 | {% for nav in navigation %}
9 |
10 | {% if nav.url %}
11 | {{ nav.title }}
12 | {% else %}
13 | {{ nav.title }}
14 | {% endif %}
15 |
16 | {% if nav.children != null %}
17 |
22 | {% endif %}
23 |
24 | {% endfor %}
25 |
26 |
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 |
20 | {% for img in gallery %}
21 | {% if img.url %}
22 |
24 |
26 |
27 | {% else %}
28 |
30 | {% endif %}
31 | {% endfor %}
32 | {% if include.caption %}
33 | {{ include.caption | markdownify | remove: "" | remove: "
" }}
34 | {% endif %}
35 |
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 |
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 |
11 |
12 | {%- when "google" -%}
13 |
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 |
2 | {% if site.data.ui-text[site.locale].share_on_label %}
3 | {{ site.data.ui-text[site.locale].share_on_label | default: "Share on" }}
4 | {% endif %}
5 |
6 |
7 |
8 | Facebook
9 |
10 | LinkedIn
11 |
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 |
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 | {{ date | date: "%B %-d, %Y" }}
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 | [](https://parallel.princeton.edu/prga)
2 |
3 | # **P**rinceton **R**econfigurable **G**ate **A**rray
4 |
5 | [](https://opensource.org/licenses/BSD-3-Clause)
6 | [](https://prga.readthedocs.io/en/latest/?badge=latest)
7 | [](https://github.com/PrincetonUniversity/prga/actions/workflows/checkinstall.yml)
8 | [](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 |
16 |
17 | {% assign crumbs = page.url | split: '/' %}
18 | {% assign i = 1 %}
19 | {% for crumb in crumbs offset: 1 %}
20 | {% if forloop.first %}
21 |
22 | {{ site.data.ui-text[site.locale].breadcrumb_home_label | default: "Home" }}
23 |
24 |
25 | {{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}
26 | {% endif %}
27 | {% if forloop.last %}
28 | {{ page.title }}
29 | {% else %}
30 | {% assign i = i | plus: 1 %}
31 |
32 | {{ crumb | replace: '-', ' ' | replace: '%20', ' ' | capitalize }}
33 |
34 |
35 | {{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}
36 | {% endif %}
37 | {% endfor %}
38 |
39 |
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 |
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 | [ ](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 | [ ](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 |
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 |
--------------------------------------------------------------------------------