fred-framework / dart Goto Github PK
View Code? Open in Web Editor NEWFPGA design automation for real-time, dynamic partially reconfigurable application
License: GNU General Public License v3.0
FPGA design automation for real-time, dynamic partially reconfigurable application
License: GNU General Public License v3.0
Currently DART uses standard Xilinx busses to interconnect the reconfigurable regions. bus manager should be supported by DART, providing a more complete system composability and better control of system timing requirements.
Zynq-7000 devices are 32 bits, therefore, C_M_AXI_MEM_BUS_ADDR_WIDTH = 32.
However, for Ultrascale devices, C_M_AXI_MEM_BUS_ADDR_WIDTH could be 64 bits
if the IPs are synthesized with config_interface -m_axi_addr64
At this moment, even for Ultrascale devices, DART uses C_M_AXI_MEM_BUS_ADDR_WIDTH is fixed to 32 bits. Thus, when using a dart-generated design, make sure that FRED server is compiled without the define HW_TASKS_A64
, to make it compatible with 32 bits.
This part of the code could easily be executed in parallel, reducing DART runtime when using several IPs.
This is a configuration matrix for the test/minimal
:
configuration | compilation | DART exec | board exec |
---|---|---|---|
ON,pynq | OK | OK | N.I. |
OFF,pynq | OK | OK | N.I. |
OFF,zcu_102 | OK | OK | N.I. |
OFF,us_96 | OK | OK | N.I. |
N.I.: not implemented.
Tests on the board are still not implemented.
DART exists in error when running with partitioning mode in both ON or OFF, and targeting Zynq:
source /home/aamory/repos/dart/dart/tests/minimal/build_ON_zynq/static.tcl -notrace
WARNING: [Project 1-153] The current project device 'xc7z010clg400-1' does not match with the device on the 'WWW.DIGILENTINC.COM:PYNQ-Z1:PART0:1.0' board part. A device change to match the device on 'WWW.DIGILENTINC.COM:PYNQ-Z1:PART0:1.0' board part is being done. Please upgrade the IP in the project via the upgrade_ip command or by selecting Reports => Reports IP Status.
INFO: [Project 1-152] Project part set to zynq (xc7z020clg400-1)
INFO: [IP_Flow 19-234] Refreshing IP repositories
INFO: [IP_Flow 19-1700] Loaded user IP repository '/home/aamory/repos/dart/dart/tests/minimal/build_ON_zynq/Sources/ip_repo'.
INFO: [IP_Flow 19-2313] Loaded Vivado IP repository '/storage/Xilinx/Vivado/2020.2/data/ip'.
Wrote : </home/aamory/repos/dart/dart/tests/minimal/build_ON_zynq/static_hw/dart_project.srcs/sources_1/bd/dart/dart.bd>
CRITICAL WARNING: [filemgmt 20-730] Could not find a top module in the fileset sources_1.
Resolution: With the gui up, review the source files in the Sources window. Use Add Sources to add any needed sources. If the files are disabled, enable them. You can also select the file and choose Set Used In from the pop-up menu. Review if they are being used at the proper points of the flow.
ERROR: [BD 41-758] The following clock pins are not connected to a valid clock source:
/processing_system7_0/M_AXI_GP0_ACLK
/acc_0/ap_clk
/pr_decoupler_0/aclk
/axi_interconnect_0/ACLK
/axi_interconnect_0/S00_ACLK
/axi_interconnect_0/M00_ACLK
/axi_interconnect_0/M01_ACLK
/axi_interconnect_1/ACLK
/axi_interconnect_1/S00_ACLK
/axi_interconnect_1/M00_ACLK
Seems to be some inconsistency in the IP interface with the static part.
Currently DART uses a hard-coded devicetree generation. Here are some references about a better approach to generate the devicetree for dart designs:
For example, when using an input file like this, with 2 RRs and one IP per RR,
dart:
partitions:
- hw_ips:
- ip_name: "sum_vec"
top_name: "sum_vec_top"
timeout: 1000
buffers: [32768, 32768, 32768]
- hw_ips:
- ip_name: "sub_vec"
top_name: "sub_vec_top"
timeout: 1000
buffers: [32768, 32768, 32769]
It generates an error at the physical synthesis because one of the RR has BRAMs at the right hand side border, which is not allowed.
This error happens with any configuration with more than 1 RR.
When the YAML file has the debug key word, it adds ILA in the reconfigurable region. But it works only for the Pynq board.
Add ILA support for the other boards.
Most errors when using dart is related to interfaces mismatches from the IPs. This produces valid vivado designs that actually dont work when running in the board. This leads to long debugging sections. The idea is to implement some IP interface checking before the IP synthesis phase of dart, to catch the error ASAP.
FRED runtime supports multiple slots per partitions. However, DART doesnt.
Multiple slots per partition would give to a certain IP multiple reconfigurable regions to be used in runtime.
It means that the FRED scheduler could choose where (i.e. which reconfigurable region) to deploy a certain IP.
Note that, in pr_tool::generate_fred_files
, in the part that writes the arch.csv
file, the slot information is fixed to 1 since dart only supports 1 slot per partition..
ILA are inserted only in the partitioning OFF mode.
DART currently has 2 modes and support 4 boards. For each cross-configuration, it would be required to run multiple tests.
The idea is to provide some minimal automated testing environment, like a CI.
DART has 4 main steps: ip synthesis, static part synthesis, floorplan optimization, implementation. It would be beneficial to support a user defined static part, since this part typically depends on the interfaces used in a design. For instance, a video processing application would have a camera interface to receive the input frames. Currently DART only implements a basic static part, setting up only the reconfigurable regions. The idea would be the user to define a static part DCP file. In this case DART would skipping its 2nd step and continue executing its remaining steps.
The compile-time configurations:
are not implemented yet.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.