# Dora **Repository Path**: amarisex/Dora ## Basic Information - **Project Name**: Dora - **Description**: Dora, a low-latency FPGA partial reconfiguration controller, is proposed in this letter to address the latency challenge faced by traditional solutions in highly real-time reconfigurable systems. - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-10-31 - **Last Updated**: 2025-10-20 ## Categories & Tags **Categories**: hardware **Tags**: FPGA ## README

Dora

a low-latency partial reconfiguration controller

# Introduction - Dora, a low-latency FPGA partial reconfiguration controller, is proposed in this letter to address the latency challenge faced by traditional solutions in highly real-time reconfigurable systems. - Based on the producer-consumer model, a SG-streaming-based hybrid reconfiguration mechanism and an adaptive ICAP overclocking clock training method are proposed and integrated into Dora, aiming to achieve efficient production and consumption of configuration bitstreams. - Published papers 1. [Dora: A Low-Latency Partial Reconfiguration Controller for Reconfigurable System](https://ieeexplore.ieee.org/document/10695778) 2. [A Co-Optimization of Software and Hardware for PCIe-Based Small Packet DMA Transfer](https://ieeexplore.ieee.org/document/10601169) # Structure ```txt . ├── README.md ├── example │ └── vc709 │ ├── dora.zip │ ├── prc.zip │ ├── system_top.bit │ ├── u_led_led_0_partial.bit │ └── u_led_led_1_partial.bit ├── hw │ ├── rtl │ │ ├── async_fifo.v │ │ ├── axil_bridge.v │ │ ├── axis_async_fifo.v │ │ ├── clk_gen.v │ │ ├── common.vh │ │ ├── config_buffer.v │ │ ├── counter.v │ │ ├── edge_dect.v │ │ ├── gray_code_sync.v │ │ ├── icap_ctrl.v │ │ ├── mmcm_drp.v │ │ ├── perf_mon.v │ │ ├── prc_reg.v │ │ ├── prc_top.v │ │ ├── reg_mux.v │ │ ├── simple_dual_port_ram.v │ │ ├── two_stage_sync.v │ │ └── width_convert.v │ └── xdc │ └── prc_timing.xdc └── sw ├── sdma │ ├── Makefile │ ├── sdma.h │ ├── sdma_drv.c │ ├── sdma_hw.c │ └── tests └── xdma └── linux-kernel ``` # Performance Experiments show that Dora reduces FPGA resource utilization by over 60%, achieves a high reconfiguration rate, and slashes latency to 11.1 ms—merely 2.6% of the standard Xilinx solution. This remarkable performance positions Dora as a superior choice for a wide range of scenarios and domains. # How to use ## For secondary development All the modules in Dora are self-developed, and it is only necessary to integrate the verilog implementation [hw/rtl](hw/rtl) and timing constraint [hw/xdc](hw/xdc) into the project source code. ## Just for a test We provide an example [example/vc709](example/vc709) on VC709 Board where users can test our Dora by switching between different lighting applications. 1. Clone the repository ``` git clone git@github.com:AmarisEx/Dora.git ``` 2. Configure the [demo.bit](example/vc709/demo.bit) ```shell set bit_filepath example/demo.bit write_cfgmem -force -format MCS -size 128 -interface BPIx16 -loadbit "up 0x00000000 $bit_filepath" demo.mcs ``` 3. Install the sdma driver ``` source sw/sdma/tests/load_driver.sh ``` 1. Transfer [rm0.bin](example/vc709/rm0.bin) or [rm1.bin](example/vc709/rm1.bin) using driver (Look at the switching results of the led lights) ```shell gcc sw/sdma/tests/main.c -o main sudo ./main /dev/sdma_dev0 2 example/vc709/rm0.bin sudo ./main /dev/sdma_dev1 2 example/vc709/rm1.bin ``` Tips: In steps 3 and 4 above, you can also use the [XDMA driver](https://github.com/Xilinx/dma_ip_drivers/tree/master/XDMA/linux-kernel) provided by Xilinx or [patched XDMA driver](sw/xdma) provided by us instead of the simple replacement we provided, which is SDMA.