Giter Site home page Giter Site logo

xilinx / pynq_composable_pipeline Goto Github PK

View Code? Open in Web Editor NEW
63.0 7.0 22.0 5.49 MB

PYNQ Composabe Overlays

Home Page: https://pynq-composable.readthedocs.io/

License: BSD 3-Clause "New" or "Revised" License

Makefile 0.36% Tcl 45.26% Verilog 2.10% Jupyter Notebook 40.56% Python 9.72% C++ 2.00%
pynq composable xilinx fpga

pynq_composable_pipeline's Introduction

license python docs

Composable Pipeline

The Composable pipeline is an overlay with a novel and clever architecture that allow us to adapt how the data flows between a series of IP cores.

The key characteristic of a composable overlay is an AXI4-Stream Switch, which plays the same role as an old telephone switchboard. The AXI4-Stream Switch provides the runtime routing of how data flow from one IP core to another.

On top of that, the composable overlay includes Dynamic Function eXchange DFX regions that brings new functionality to the design at runtime.

The combination of these two technologies plus a pythonic API, built on top of pynq, provide an unprecedented flexibility.

The composable overlay architecture of a composable video overlay for the PYNQ-Z2 is shown in the image below

Supported Boards

Note: PYNQ-Z1 is supported with the same composable overlay as PYNQ-Z2

To rebuild the composable pipeline you need Vitis and Vivado 2020.2. Navigate to one of the supported boards folder and run make, only steps for Linux are provided.

Clone this repository

git clone https://github.com/Xilinx/PYNQ_Composable_Pipeline.git --recursive

Note that this project depends on the Vitis Accelerated Libraries and PYNQ

Install composable pipeline on your board

git clone https://github.com/Xilinx/PYNQ_Composable_Pipeline
python3 -m pip install PYNQ_Composable_Pipeline/ --no-build-isolation
pynq-get-notebooks pynq_composable -p $PYNQ_JUPYTER_NOTEBOOKS

The notebooks will be delivered into the folder /home/xilinx/jupyter_notebooks

Documentation

Find out more documentation on Read The Docs.

Contributing

We welcome contributions, please review the contributing guidelines to contribute.

Licenses

Copyright (C) 2021-2022 Xilinx, Inc

SPDX-License-Identifier: BSD-3-Clause

Third-party license

Binary Files License

Pre-compiled binary files are not provided under an OSI-approved open source license, because Xilinx is incapable of providing 100% corresponding sources.

Binary files are provided under the following license


Copyright© 2021-2022 Xilinx

pynq_composable_pipeline's People

Contributors

mariodruiz avatar priyanka-xlnx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

pynq_composable_pipeline's Issues

Support for pure stream IP

When trying to use a pure streaming IP, the get attribute returns this error

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq_composable/composable.py in __getattr__(self, name)
    727             try:
--> 728                 attr = super().__getattr__(name)
    729             except AttributeError:

/usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq/overlay.py in __getattr__(self, key)
    902         else:
--> 903             raise AttributeError(
    904                 "Could not find IP or hierarchy {} in overlay".format(key))

AttributeError: Could not find IP or hierarchy fir_highpass in overlay

During handling of the above exception, another exception occurred:

AttributeError                            Traceback (most recent call last)
<ipython-input-9-a9ca1aa8b199> in <module>
----> 1 cfilter.fir_highpass

/usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq_composable/composable.py in __getattr__(self, name)
    728                 attr = super().__getattr__(name)
    729             except AttributeError:
--> 730                 attr = getattr(self._ol, name)
    731             return attr
    732 

/usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq/overlay.py in __getattr__(self, key)
    364         """
    365         if self.is_loaded():
--> 366             return getattr(self._ip_map, key)
    367         else:
    368             raise RuntimeError("Overlay not currently loaded")

/usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq/overlay.py in __getattr__(self, key)
    901             return mem
    902         else:
--> 903             raise AttributeError(
    904                 "Could not find IP or hierarchy {} in overlay".format(key))
    905 

AttributeError: Could not find IP or hierarchy fir_highpass in overlay

Update overlay links

Upload composable overlays for version 1.0.0 and upload link in the setup.py file

Clean up notebooks

Some notebooks are duplicated.
Find a better way to maintain notebooks

Simplify the internal logic for compose

The internal logic to compose is convoluted and can't scale very well.

The idea is to have a logic to create as many lists as branches the pipeline has, hence the logic to compose only deals with linear pipeline.

Move to three DFX regions

Duplicate is used quite extensively in all the apps, therefore it makes sense to have it on the static portion.

Use BDC for DFX regions

Use block design containers for the DFX regions. This should simplify the build process and get us more aligned with abstract shell.

This depends on having support for BDC on PYNQ

ModuleNotFoundError: No module named `pynq_composable.overlay`

When the pynq_composable package is installed in a board that is not supported by the composable video overlay, the pynq_composable.overlay is register as a module, however the /usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq_composable/overlay folder is not created as there's no overlay to deliver. This leads to the following error:

KeyError                                  Traceback (most recent call last)
/usr/local/share/pynq-venv/lib/python3.8/site-packages/pkg_resources/__init__.py in get_provider(moduleOrReq)
    358     try:
--> 359         module = sys.modules[moduleOrReq]
    360     except KeyError:

KeyError: 'pynq_composable.overlay'

During handling of the above exception, another exception occurred:

ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-2-1c5b09ab7d60> in <module>
      1 from pynq   import Overlay
----> 2 overlay = Overlay("base.bit")

/usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq/overlay.py in __init__(self, bitfile_name, dtbo, download, ignore_version, device)
    334 
    335         """
--> 336         super().__init__(bitfile_name, dtbo, partial=False, device=device)
    337 
    338         self._register_drivers()

/usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq/bitstream.py in __init__(self, bitfile_name, dtbo, partial, device)
    120             overlays_ext_man = _ExtensionsManager(OVERLAYS_GROUP)
    121             paths = [overlays_ext_man.extension_path(OVERLAYS_GROUP)]
--> 122             paths += overlays_ext_man.paths
    123             for path in paths:
    124                 for p in [os.path.join(path,

/usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq/utils.py in paths(self)
    106         """Return a list of paths from the discovered extensions.
    107         """
--> 108         return [self.extension_path(e.module_name) for e in self.list]
    109 
    110 

/usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq/utils.py in <listcomp>(.0)
    106         """Return a list of paths from the discovered extensions.
    107         """
--> 108         return [self.extension_path(e.module_name) for e in self.list]
    109 
    110 

/usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq/utils.py in extension_path(extension_name)
     89         init_backup = pkg_resources.NullProvider.__init__
     90         pkg_resources.NullProvider.__init__ = init
---> 91         src_path = pkg_resources.resource_filename(extension_name, "")
     92         # Restore original `pkg_resources.NullProvider.__init__`
     93         pkg_resources.NullProvider.__init__ = init_backup

/usr/local/share/pynq-venv/lib/python3.8/site-packages/pkg_resources/__init__.py in resource_filename(self, package_or_requirement, resource_name)
   1142     def resource_filename(self, package_or_requirement, resource_name):
   1143         """Return a true filesystem path for specified resource"""
-> 1144         return get_provider(package_or_requirement).get_resource_filename(
   1145             self, resource_name
   1146         )

/usr/local/share/pynq-venv/lib/python3.8/site-packages/pkg_resources/__init__.py in get_provider(moduleOrReq)
    359         module = sys.modules[moduleOrReq]
    360     except KeyError:
--> 361         __import__(moduleOrReq)
    362         module = sys.modules[moduleOrReq]
    363     loader = getattr(module, '__loader__', None)

ModuleNotFoundError: No module named 'pynq_composable.overlay'

Support DFX grayboxes

Sometimes grayboxes are provides only with .bit. Investigate if hwh is generated for grayboxes.

Investigate how to support only .bit without hwh.

Handle partial bitfiles without metadata

For instance grayboxes may not contain hwh files. Currently the parser is returning this error

---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-2-bb3c55676491> in <module>
      1 ol = pynq.Overlay('Ver_2/composable.bit')
----> 2 cpipe = ol.composable

/usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq/overlay.py in __getattr__(self, key)
    364         """
    365         if self.is_loaded():
--> 366             return getattr(self._ip_map, key)
    367         else:
    368             raise RuntimeError("Overlay not currently loaded")

/usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq/overlay.py in __getattr__(self, key)
    869         if key in self._description['hierarchies']:
    870             hierdescription = self._description['hierarchies'][key]
--> 871             hierarchy = hierdescription['driver'](hierdescription)
    872             setattr(self, key, hierarchy)
    873             return hierarchy

/usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq_composable/composable.py in __init__(self, description)
    185             self._dfx_control = None
    186 
--> 187         parser = HWHComposable(self._hwh_name, self.axis_switch._fullpath)
    188         self._c_dict = parser.c_dict
    189         self._dfx_dict = parser.dfx_dict

/usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq_composable/parser.py in __init__(self, hwh_file, switch_name, cache)
    254             self._dfx_regions_discovery()
    255             self._partial_bitstreams_discovery()
--> 256             self._insert_dfx_ip()
    257             with open(pklfile, "wb") as file:
    258                 pkl.dump([hwhdigest, self.c_dict, self.dfx_dict], file)

/usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq_composable/parser.py in _insert_dfx_ip(self)
    425                 hwh_name = self._dir_name + '/' + \
    426                     os.path.splitext(b)[0] + '.hwh'
--> 427                 dfx_dict = _dfx_ip_discovery(r, hwh_name)
    428                 self.dfx_dict[r]['rm'][b] = dfx_dict
    429                 self._update_ip_dict_with_dfx(r, dfx_dict)

/usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq_composable/parser.py in _dfx_ip_discovery(partial_region, partial_hwh)
    114     """
    115 
--> 116     tree = ElementTree.parse(partial_hwh)
    117     ext_if = dict()
    118 

/usr/lib/python3.8/xml/etree/ElementTree.py in parse(source, parser)
   1200     """
   1201     tree = ElementTree()
-> 1202     tree.parse(source, parser)
   1203     return tree
   1204 

/usr/lib/python3.8/xml/etree/ElementTree.py in parse(self, source, parser)
    582         close_source = False
    583         if not hasattr(source, "read"):
--> 584             source = open(source, "rb")
    585             close_source = True
    586         try:

FileNotFoundError: [Errno 2] No such file or directory: '/home/root/jupyter_notebooks/rw_composable/Ver_2/composable_pr_0_greybox_partial.hwh'

Add self test

As part of the new methodology add self test. The aim is to test the composable overlay without having to open JupyterLab

Install error in PynqZ2

Hi,
I'm trying to install the PYNQ_Composable_Pipeline in my Pynq-Z2 board and got below error message in step 2:
python3 -m pip install PYNQ_Composable_Pipeline/ --no-build-isolation
Defaulting to user installation because normal site-packages is not writeable
Processing ./PYNQ_Composable_Pipeline
Preparing metadata (setup.py) ... done
Collecting graphviz>=0.17
Using cached graphviz-0.19.1-py3-none-any.whl (46 kB)
Collecting pynq>=2.7.0
Using cached pynq-2.7.0.tar.gz (64.2 MB)
Preparing metadata (setup.py) ... done
ERROR: Package 'pynq-composable' requires a different Python: 3.6.5 not in '>=3.8.0'

Maybe due to the kernel version is too old can't install Python 3.8 directly, I also try to download the source code, rebuild, and install the Python 3.8, but the still got different error:
Processing ./PYNQ_Composable_Pipeline
ERROR: Command errored out with exit status 1:
command: /usr/local/bin/python3.8 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-req-build-hvd6m0wd/setup.py'"'"'; file='"'"'/tmp/pip-req-build-hvd6m0wd/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' egg_info --egg-base pip-egg-info
cwd: /tmp/pip-req-build-hvd6m0wd/
Complete output (5 lines):
Traceback (most recent call last):
File "", line 1, in
File "/tmp/pip-req-build-hvd6m0wd/setup.py", line 18, in
from pynq.utils import build_py
ModuleNotFoundError: No module named 'pynq'
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
WARNING: You are using pip version 19.2.3, however version 22.0.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

Does anyone can help me to fix this error?

PYNQ-Z2 Compiler with Vivado GUI

Sorry to one question.
Built the vivado project for PYNQ-Z2 board by below command successfully:

cd PYNQ_Composable_Pipeline/boards/Pynq-Z2
make project
When I trying change the static ip : ex: colorthresholding_accel to other ip I created, and compiler the project by the Vivado GUI (Generation Bitstream).
I got below error message about the PREQ_HZ doesn't match between xxx and yyy:
image

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/dfx_decouplers/dfx_decoupler_pr_0/rp_axi_lite0(142857132) and /axi_interconnect_0/m22_couplers/auto_cc/M_AXI(1.42857e+08)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/dfx_decouplers/dfx_decoupler_pr_0/rp_axi_lite1(142857132) and /axi_interconnect_0/m23_couplers/auto_cc/M_AXI(1.42857e+08)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/dfx_decouplers/dfx_decoupler_pr_1/rp_axi_lite0(142857132) and /axi_interconnect_0/m24_couplers/auto_cc/M_AXI(1.42857e+08)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/dfx_decouplers/dfx_decoupler_pr_1/rp_axi_lite1(142857132) and /axi_interconnect_0/m25_couplers/auto_cc/M_AXI(1.42857e+08)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/dfx_decouplers/dfx_decoupler_pr_fork/rp_axi_lite(142857132) and /axi_interconnect_0/m26_couplers/auto_cc/M_AXI(1.42857e+08)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/dfx_decouplers/dfx_decoupler_pr_join/rp_axi_lite(142857132) and /axi_interconnect_0/m27_couplers/auto_cc/M_AXI(1.42857e+08)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/dfx_decouplers/pr_0_out0/S_AXIS(1.42857e+08) and /composable/pr_0/stream_out0(142857132)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/dfx_decouplers/pr_0_out1/S_AXIS(1.42857e+08) and /composable/pr_0/stream_out1(142857132)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/dfx_decouplers/pr_1_out0/S_AXIS(1.42857e+08) and /composable/pr_1/stream_out0(142857132)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/dfx_decouplers/pr_1_out1/S_AXIS(1.42857e+08) and /composable/pr_1/stream_out1(142857132)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/dfx_decouplers/pr_join_out0/S_AXIS(1.42857e+08) and /composable/pr_join/stream_out(142857132)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/dfx_decouplers/pr_fork_out0/S_AXIS(1.42857e+08) and /composable/pr_fork/stream_out0(142857132)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/dfx_decouplers/pr_fork_out1/S_AXIS(1.42857e+08) and /composable/pr_fork/stream_out1(142857132)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/pr_0/stream_in0(142857132) and /composable/dfx_decouplers/pr_0_in0/M_AXIS(1.42857e+08)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/pr_0/stream_in1(142857132) and /composable/dfx_decouplers/pr_0_in1/M_AXIS(1.42857e+08)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/pr_1/stream_in0(142857132) and /composable/dfx_decouplers/pr_1_in0/M_AXIS(1.42857e+08)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/pr_1/stream_in1(142857132) and /composable/dfx_decouplers/pr_1_in1/M_AXIS(1.42857e+08)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/pr_fork/stream_in0(142857132) and /composable/dfx_decouplers/pr_fork_in0/M_AXIS(1.42857e+08)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/pr_join/stream_in0(142857132) and /composable/dfx_decouplers/pr_join_in0/M_AXIS(1.42857e+08)

[BD 41-237] Bus Interface property FREQ_HZ does not match between /composable/pr_join/stream_in1(142857132) and /composable/dfx_decouplers/pr_join_in1/M_AXIS(1.42857e+08)

[BD 41-238] Port/Pin property FREQ_HZ does not match between /composable/pr_0/clk_142M(142857132) and /ps7_0/FCLK_CLK1(1.42857e+08)

[BD 41-238] Port/Pin property FREQ_HZ does not match between /composable/pr_1/clk_142M(142857132) and /ps7_0/FCLK_CLK1(1.42857e+08)

[BD 41-238] Port/Pin property FREQ_HZ does not match between /composable/pr_join/clk_142M(142857132) and /ps7_0/FCLK_CLK1(1.42857e+08)

[BD 41-238] Port/Pin property FREQ_HZ does not match between /composable/pr_fork/clk_142M(142857132) and /ps7_0/FCLK_CLK1(1.42857e+08)

[BD 41-1031] Hdl Generation failed for the IP Integrator design /home/willychiang/Desktop/PYNQ_Composable_Pipeline/boards/Pynq-Z2/cv_dfx_4_pr/cv_dfx_4_pr.srcs/sources_1/bd/video_cp/video_cp.bd

[Vivado 12-4756] Launch of runs aborted due to earlier errors while preparing sub-designs for run execution.

I'm pretty sure my IP each pins are connected correctly.
Does the composable pipeline vivado project can't be built by the GUI interface, and must use the tcl command?

Check resolution when OpenCV mode is used

Make sure that the input OpenCV video source is compatible with the output video mode. For instance, if a video file is used, the resolution should match the HDMI Out/Display port resolution

Install error Pynq 2.7

Trying to install Pynq-Composable_Pipeline on Pynq-Z1 with version 2.7
The command
sudo pip3 install PYNQ_Composable_Pipeline/ --verbose
returns the following. I checked Cython version, I have the 0.29.28 version but it says that the 0.29.14 is installed

Using pip 22.0.3 from /usr/local/share/pynq-venv/lib/python3.8/site-packages/pip (python 3.8)
Processing /PYNQ_Composable_Pipeline
  Running command pip subprocess to install build dependencies
  Collecting setuptools
    Using cached setuptools-60.9.3-py3-none-any.whl (1.1 MB)
  Collecting wheel
    Using cached wheel-0.37.1-py2.py3-none-any.whl (35 kB)
  Collecting pynq>=2.6.0
    Using cached pynq-2.7.0-cp38-cp38-linux_armv7l.whl
  Collecting graphviz>=0.16
    Using cached graphviz-0.19.1-py3-none-any.whl (46 kB)
  Collecting cffi
    Using cached cffi-1.15.0-cp38-cp38-linux_armv7l.whl
  Collecting numpy
    Using cached numpy-1.22.2.zip (11.4 MB)
    Installing build dependencies: started
    Installing build dependencies: finished with status 'done'
    Getting requirements to build wheel: started
    Getting requirements to build wheel: finished with status 'done'
    Preparing metadata (pyproject.toml): started
    Preparing metadata (pyproject.toml): finished with status 'done'
  Collecting pandas
    Using cached pandas-1.4.1.tar.gz (4.9 MB)
    Installing build dependencies: started
    Installing build dependencies: still running...
    Installing build dependencies: finished with status 'done'
    Getting requirements to build wheel: started
    Getting requirements to build wheel: finished with status 'error'
    error: subprocess-exited-with-error

    × Getting requirements to build wheel did not run successfully.
    │ exit code: 1
    ╰─> [20 lines of output]
        Traceback (most recent call last):
          File "/tmp/tmpy1gn_yn6", line 363, in <module>
            main()
          File "/tmp/tmpy1gn_yn6", line 345, in main
            json_out['return_val'] = hook(**hook_input['kwargs'])
          File "/tmp/tmpy1gn_yn6", line 130, in get_requires_for_build_wheel
            return hook(config_settings)
          File "/usr/lib/python3/dist-packages/setuptools/build_meta.py", line 147, in get_requires_for_build_wheel
            return self._get_build_requires(
          File "/usr/lib/python3/dist-packages/setuptools/build_meta.py", line 128, in _get_build_requires
            self.run_setup()
          File "/usr/lib/python3/dist-packages/setuptools/build_meta.py", line 249, in run_setup
            super(_BuildMetaLegacyBackend,
          File "/usr/lib/python3/dist-packages/setuptools/build_meta.py", line 143, in run_setup
            exec(compile(code, __file__, 'exec'), locals())
          File "setup.py", line 651, in <module>
            ext_modules=maybe_cythonize(extensions, compiler_directives=directives),
          File "setup.py", line 411, in maybe_cythonize
            raise RuntimeError(
        RuntimeError: Cannot cythonize with old Cython version (0.29.14 installed, needs 0.29.24)
        [end of output]

    note: This error originates from a subprocess, and is likely not a problem with pip.
  error: subprocess-exited-with-error

  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> See above for output.

  note: This error originates from a subprocess, and is likely not a problem with pip.
  error: subprocess-exited-with-error

  × pip subprocess to install build dependencies did not run successfully.
  │ exit code: 1
  ╰─> See above for output.

  note: This error originates from a subprocess, and is likely not a problem with pip.
  full command: /usr/local/share/pynq-venv/bin/python3 /tmp/pip-standalone-pip-qdl2sgw8/__env_pip__.zip/pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-9z3z4h5y/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- setuptools wheel 'pynq>=2.6.0' 'graphviz>=0.16'
  cwd: [inherit]
  Installing build dependencies ... error
error: subprocess-exited-with-error

× pip subprocess to install build dependencies did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.`

User experience improvement suggestions: Bring supported boards to the README.md, use appropriate tags for positioning

This is a great piece of work @mariodruiz, congrats.

As a suggestion for improvement, I'd propose we drop a short section in the README indicating which boards are supported. It's awesome you have KV260, this should be brought straight to the README.

For clarity, this is well documented at https://pynq-composable.readthedocs.io/en/latest/getting_started.html#supported-boards but it takes a few minutes to navigate around until you find that, loosing potential user's interest. Most users will assume that the supported boards are defined in the README (currently only listing pointers for two of the supported ones).

There are currently no tags in this repo, I'd encourage to use a few that make sense and help index/position it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.