June 5th, 2020 Progress Report

    Today concludes the first week of Summer of Code 2020, and my first progress report.  This has been a very useful week in terms of research and understanding the proper place to start with writing code next week.

Progress
    The biggest question I have been trying to answer this week is where in the SymbiFlow tool chain to implement offline partial reconfiguration regions.  I created a use cases document to consider potential uses for this work and think about the what different users of partial reconfiguration would require.  A few consistent and interrelated requirements of user for offline partial reconfiguration are small rr_graphs, fast compilation, and high levels of isolation between regions. For these reasons, I will proceed with implementing partial reconfiguration in symbiflow-arch-defs rather than VtR, as having physically separate (and therefore smaller) architecture files and rr_graphs will best reach these common user requirements for offline partial reconfiguration.

    Another reason for this decision came form the VtR meeting this week, that a student at Toronto is working on placement constraint in VPR this summer.  In this plan for placement constraints is not just constraints to a specific x,y position, but also a rectangular region.  This work should get close to what's needed for supporting partial reconfiguration on the VtR side and finishing off PR on this side could be future work after the placement constraints are working.  I believe these two methods of partial reconfiguration are complementary and fulfill different use cases.

    I also spent part of this week developing a simple Vivado and SDK test for the Pynq Z1.  Having the ability to run designs using both the PS and PL regions will make testing partial reconfiguration much easier later on and is more representative of how the work would actually be used.  The test case currently has the PS and PL regions working separately, but the axi communication between them needs some fixes.

Next Week
    Next week I will be diving into implementing partial reconfiguration in arch-defs.  I think my timeline will probably be adjusted a bit as a result of my decision to implement in arch-defs instead of VtR.  Current thought is to implement partial reconfiguration for a single region first (including synthetic IOs) and then define some file format for where PR regions should be placed and add support for multiple regions.

Comments