Integrate Vision HDL Blocks Into Camera Link System
This example shows how to design a Vision HDL Toolbox algorithm for integration into an existing system that uses the Camera Link® signal protocol.
Vision HDL Toolbox™ blocks use a custom streaming video format. If you integrate Vision HDL Toolbox algorithms into existing design and verification code that operates in a different streaming video format, you must convert the control signals at the boundaries. The example uses custom System objects to convert the control signals between the Camera Link format and the Vision HDL Toolbox pixelcontrol format. The model imports the System objects to Simulink® by using the MATLAB System block.
Structure of the Model
This model imports pixel data and control signals in the Camera Link format from the MATLAB® workspace. The CameraLink_InvertImage subsystem is designed for integration into existing systems that use Camera Link protocol. The CameraLink_InvertImage subsystem converts the control signals from the Camera Link format to the pixelcontrol format, modifies the pixel data using the Lookup Table block, and then converts the control signals back to the Camera Link format. The model exports the resulting data and control signals to workspace variables.
Structure of the Subsystem
The CameraLink2VHT and VHT2CameraLink blocks are MATLAB System blocks that point to custom System objects. The objects convert between Camera Link signals and the pixelcontrol format used by Vision HDL Toolbox blocks and objects.
You can put any combination of Vision HDL Toolbox blocks into the middle of the subsystem. This example uses an inversion Lookup Table.
You can generate HDL from this subsystem.
Import Data in Camera Link Format
Camera Link consists of three control signals: F indicates the valid frame, L indicates each valid line, and D indicates each valid pixel. For this example, the input data and control signals are defined in the InitFcn callback. The vectors describe this 2-by-3, 8-bit grayscale frame. In the figure, the active image area is in the dashed rectangle, and the inactive pixels surround it. The pixels are labeled with their grayscale values.
FIn = logical([0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0]); LIn = logical([0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0]); DIn = logical([0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0]); pixIn = uint8([0,0,0,0,0,0,0,30,60,90,0,0,0,120,150,180,0,0,0,0,0,0,0,0]);
Convert Camera Link Control Signals to pixelcontrol Format
Write a custom System object to convert Camera Link signals to the Vision HDL Toolbox format. This example uses the object designed in the docid:visionhdl_ug.bu1x7y0 example.
The object converts the control signals, and then creates a structure that contains the new control signals. When the object is included in a MATLAB System block, the block translates this structure into the bus format expected by Vision HDL Toolbox blocks. For the complete code for the System object, see CAMERALINKtoVHT_Adapter.m.
Create a MATLAB System block and point it to the System object.
Design Vision HDL Toolbox Algorithm
Select Vision HDL Toolbox blocks to process the video stream. These blocks accept and return a scalar pixel value and a pixelcontrol bus that contains the associated control signals. This standard interface makes it easy to connect blocks from the Vision HDL Toolbox libraries together.
This example uses the Lookup Table block to invert each pixel in the test image. Set the table data to the reverse of the uint8 grayscale color space.
Convert pixelcontrol to Camera Link
Write a custom System object to convert Vision HDL Toolbox signals back to the Camera Link format. This example uses the object designed in the docid:visionhdl_ug.bu1x7y0 example.
The object accepts a structure of control signals. When you include the object in a MATLAB System block, the block translates the input pixelcontrol bus into this structure. Then it computes the equivalent Camera Link signals. For the complete code for the System object, see VHTtoCAMERALINKAdapter.m.
Create a second MATLAB System block and point it to the System object.
Run the simulation. The resulting vectors represent this inverted 2-by-3, 8-bit grayscale frame. In the figure, the active image area is in the dashed rectangle, and the inactive pixels surround it. The pixels are labeled with their grayscale values.
If you have a DSP System Toolbox™ license, you can view the signals over time using the Logic Analyzer. Select all the signals in the CameraLink_InvertImage subsystem for streaming, and open the Logic Analyzer. This waveform shows the input and output Camera Link control signals and pixel values at the top, and the input and output of the Lookup Table block in pixelcontrol format at the bottom. The pixelcontrol busses are expanded to observe the boolean control signals.
For more info on observing waveforms in Simulink, see docid:dsp_ug.bvcitij.
Generate HDL Code for Subsystem
To generate HDL code you must have an HDL Coder™ license.
To generate the HDL code, use the following command.
You can now simulate and synthesize these HDL files along with your existing Camera Link system.