Low Light Enhancement with Zynq-Based Hardware
This example shows how to target a low light enhancement algorithm to the Zynq® hardware using the SoC Blockset™ Support Package for AMD FPGA and SoC Devices.
Introduction
This example follows the algorithm development workflow that is detailed in the Developing Vision Algorithms for Zynq-Based Hardware example. If you have not already done so, please work through that example to gain a better understanding of the required workflow.
This algorithm is based on the Vision HDL Toolbox™ example, Low Light Enhancement (Vision HDL Toolbox). With the SoC Blockset Support Package for AMD FPGA and SoC Devices, you get a hardware reference design that allows for easy integration of your targeted algorithm in the context of a vision system.
Pixel-Stream Model
This model provides a pixel-stream implementation of the algorithm for targeting HDL. Instead of working on full images, the HDL-ready algorithm works on a pixel-streaming interface.
open_system('vzLowLightEnhancement_PixelStream')
Video Source The source video for this example comes from either the From Multimedia File block, that reads video data from a multimedia file, or from the Video Capture HDMI block, that captures live video frames from an HDMI source connected to the Zynq-based hardware. To configure the source, right-click on the variant selection icon in the lower-left corner of the Image Source block, choose Label mode active choice, and select either File or HW.
For this algorithm, the model is configured as listed:
A pixel format of RGB. This algorithm is written to work on a RGB pixel format, and both the From Multimedia File and Video Capture HDMI blocks are configured to deliver video frames in this format. Other supported pixel formats are YCbCr 4:2:2, and Y only.
Algorithm Configuration The algorithm, in addition to processing the image for Low Light Enhancement, has some control as well.
HazeFactor
is a configuration option to adjust the Haze factor. It represents the amount of haze to remove and can vary between 0 and 1.
During the first frame of simulation output, the Video Viewer scope displays a black image. This condition indicates that no image data is available. This behavior is because the output of the pixel-streaming algorithm must be buffered to form a full-frame before being displayed.
You can optionally run this simulation without hardware. To modify the frame size for simulation performance, change the Frame size value in the Image Frame To Pixels, and Image Pixels To Frame blocks. The lower the frame size, the faster the simulation will run. The minimum frame size is 240p.
close_system('vzLowLightEnhancement_PixelStream', 0)
Target the Algorithm
After you are satisfied with the pixel streaming algorithm simulation, you can target the pixel algorithm to the FPGA on the Zynq board.
Start the targeting workflow by right clicking the Low Light Enhancement Algorithm
subsystem and selecting HDL Code > HDL Workflow Advisor
.
In Step 1.1, select
IP Core Generation
workflow and select your target platform from the list.
In Step 1.2, select
RGB
reference design to match the pixel format of the Low Light Enhancement Algorithm subsystem. Map the other ports of the HW user logic to the available hardware interface.
Step 2 prepares the design for generation by doing some design checks.
Step 3 generates HDL code for the IP core.
Step 4 integrates the newly generated IP core into the larger Vision Zynq reference design.
Execute each step in sequence to experience the full workflow, or, if you are already familiar with preparation and HDL code generation phases, right-click Step 4.1 in the table of contents on the left hand side and select Run to selected task
.
In Step 4.2, the workflow generates a targeted hardware interface model and, if the Embedded Coder® Support Package for AMD SoC Devices has been installed, a Zynq software interface model. Click
Run this task
button with the default settings.
Steps 4.3 and 4.4
The rest of the workflow generates a bitstream for the FPGA, downloads it to the target, and reboots the board.
Because this process can take 20-40 minutes, you can choose to bypass this step by using a pre-generated bitstream for this example that ships with product and was placed on the SDCard during setup.
To use this pre-generated bitstream execute the following:
>> vz = visionzynq();
>> changeFPGAImage(vz, 'visionzynq-zcu102-hdmicam-low_light_enhancement.bit');
To use a bitstream for another platform, replace 'zcu102' with the platform name.
Alternatively, you can continue with Steps 4.3 and 4.4.
Using the Generated Models from the HDL Workflow Advisor
Step 4.2 generated two, or four, models depending on whether Embedded Coder® is installed: A 'targeted hardware interface' model and associated library model, and a 'software interface' model and associated library model. The 'targeted hardware interface' model can be used to control the reference design from the Simulink model without Embedded Coder. The 'software interface' model supports full software targeting to the Zynq when Embedded Coder and the Embedded Coder Support Package for AMD SoC Devices are installed, enabling External mode simulation, Processor-in-the-loop, and full deployment.
The library models are created so that any changes to the hardware generation model are propagated to any custom targeted hardware simulation or software interface models that exist.
Targeted Hardware Interface Model: In this model, you can adjust the configuration of the reference design and read or drive control ports of the hardware user logic. These configuration changes affect the design while it is running on the target. You can also display captured video from the target device.
Software Interface Model: In this model, you can run in External mode to control the configuration of the reference design, and read or drive any control ports of the hardware user logic that you connected to AXI-Lite registers. These configuration changes affect the design while it is running on the target. You can use this model to fully deploy a software design. (This model is generated only if Embedded Coder and the Embedded Coder Support Package for AMD SoC Devices support package are installed.)