Video and Vision Processing Suite Intel® FPGA IP User Guide

ID 683329
Date 9/30/2022
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents
1. About the Video and Vision Processing Suite 2. Getting Started with the Video and Vision Processing IPs 3. Video and Vision Processing IPs Functional Description 4. Video and Vision Processing IP Interfaces 5. Video and Vision Processing IP Registers 6. Video and Vision Processing IPs Software Programming Model 7. Protocol Converter Intel® FPGA IP 8. 3D LUT Intel® FPGA IP 9. AXI-Stream Broadcaster Intel® FPGA IP 10. Chroma Key Intel® FPGA IP 11. Chroma Resampler Intel® FPGA IP 12. Clipper Intel® FPGA IP 13. Clocked Video Input Intel® FPGA IP 14. Clocked Video to Full-Raster Converter Intel® FPGA IP 15. Clocked Video Output Intel® FPGA IP 16. Color Space Converter Intel® FPGA IP 17. Deinterlacer Intel® FPGA IP 18. FIR Filter Intel® FPGA IP 19. Frame Cleaner Intel® FPGA IP 20. Full-Raster to Clocked Video Converter Intel® FPGA IP 21. Full-Raster to Streaming Converter Intel® FPGA IP 22. Generic Crosspoint Intel® FPGA IP 23. Genlock Signal Router Intel® FPGA IP 24. Guard Bands Intel® FPGA IP 25. Interlacer Intel® FPGA IP 26. Mixer Intel® FPGA IP 27. Pixels in Parallel Converter Intel® FPGA IP 28. Scaler Intel® FPGA IP 29. Stream Cleaner Intel® FPGA IP 30. Switch Intel® FPGA IP 31. Tone Mapping Operator Intel® FPGA IP 32. Test Pattern Generator Intel® FPGA IP 33. Video Frame Buffer Intel® FPGA IP 34. Video Streaming FIFO Intel® FPGA IP 35. Video Timing Generator Intel® FPGA IP 36. Warp Intel® FPGA IP 37. Design Security 38. Document Revision History for Video and Vision Processing Suite User Guide

36.4. Warp IP Registers

As the software API allows you to program and control the warp IP, it only has a limited set of registers.
Table 673.  Warp IP RegistersThese registers are all read-only and allow interrogation of the Warp IP’s parameter settings. All the registers are 32-bit wide.
Register Name Offset Address Access Type Description
vid_pid 0x000 RO Warp IP product and vendor ID
version_number 0x004 RO The version for this release of the Warp IP
Reserved 0x008 -
Reserved 0x00C -
pip 0x010 RO Indicates the value of pixels in parallel parameter
color_planes 0x014 RO Indicates the value of number of color planes parameter
cps 0x018 RO Indicates the value of bits per color sample parameter
num_engines 0x01C RO Indicates the value of number of engines parameter
max_input_width 0x020 RO Indicates the value of maximum input video width parameter
max_output_width 0x024 RO Indicates the value of maximum output video width parameter
memory_buffer_size 0x028 RO Indicates the value of memory frame buffer size parameter
easy_warp 0x02C RO Indicates the value of Use easy warp parameter
single_memory_bounce 0x030 RO Indicates the value of Use single memory bounce parameter
cache_blocks 0x034 RO Indicates the value of Cache blocks per engine parameter
Reserved 0x030-0x16C RO -
int_control 0x170 RW Turns on the interrupt
int_status 0x174 RW1C Read interrupt status and clear interrupt
Table 674.   vid_pid Register
Bits Name Description
31:16 VID Vendor ID that returns a value of 0x6AF7
15:0 PID Warp product ID that returns a value of 0x016F
Table 675.   version_number Register
Bits Name Description
31:0 Version Number The version number of the Warp IP
Table 676.   pip Register
Bits Name Description
31:0 Pixels in Parallel The pixel in parallel parameter. Returns a value of 1 or 2.
Table 677.   color_planes Register
Bits Name Description
31:0 Number of Color Planes The number of color planes parameter. Returns a value of 3.
Table 678.   bps Register
Bits Name Description
31:0 Bits per Color Sample The bits per color sample parameter. Returns a value of 10.
Table 679.   num_engines Register
Bits Name Description
31:0 Number of Engines The number of engines parameter. Returns a value of 1 or 2.
Table 680.   max_input_width Register
Bits Name Description
31:0 Maximum input video width The maximum input video width parameter. Returns a value of 2048 or 3840.
Table 681.   max_output_width Register
Bits Name Description
31:0 Maximum output video width The maximum output video width parameter. Returns a value of 2048 or 3840.
Table 682.   memory_buffer_size Register
Bits Name Description
31:0 Memory frame buffer size

The memory frame buffer size parameter. Returns a value of 0, 1 or 2.

0 = SD, 1=HD and 2=UHD

Table 683.   easy_warp Register
Bits Name Description
31:0 Use easy warp The Use easy warp parameter. Returns a value of 0 or 1.
Table 684.   single memory bounce Register
Bits Name Description
31:0 Single memory Bounce The Use single memory bounce parameter. Returns a value of 0 or 1.
Table 685.   cache blocks per engine Register
Bits Name Description
31:0 Cache blocks The Cache blocks per engine parameter. Returns a value of 256, 512 or 1024.
Table 686.   int_control Register
Bits Name Description
0 Interrupt Enable Setting this bit to 1 enables the interrupt. Setting to 0 disables the interrupt.
Table 687.   int_status Register
Bits Name Description
0 Interrupt Status

Reading from this bit returns the status of the interrupt.

Writing a 1 to this bit clears the interrupt. Once triggered, the interrupt remains set until it is cleared by writing a 1 to this bit.

Debug and Measurement Registers

When you turn on Enable Debug Registers in the configuration settings of the Warp IP, a set of read only registers are available that provide various debug and measurement readings. The registers provide information useful during system bring up and debug and are accessed using the software API.

The available measurements are:

  • Input section:
    • INPUT_FRAME_COUNT
    • INPUT_FRAME_PERIOD
  • Output section
    • OUTPUT_FRAME_COUNT
    • OUTPUT_FRAME_PERIOD
  • Engine section
    • ENGINE_FRAME_COUNT
    • ENGINE_FRAME_PERIOD
    • ENGINE_BUSY_CYCLES
    • ENGINE_FRAME_DELAY
    • ENGINE_FAILED_TO_COMPLETE_FRAME
    • ENGINE_RUN_STATUS
    • ENGINE_CACHE_LOADS
  • General section
    • MEM_WR_QUEUES0
    • MEM_WR_QUEUES1
    • MEM_RD_QUEUES0
    • MEM_RD_QUEUES1
Table 688.  Registers
Name Description
Input Section

The IP reads the debug registers relating to the input section of the Warp IP using the intel_vvp_warp_get_input_debug_register () API call.

INPUT_FRAME_COUNT

A count of the number of frames that have started at the input of the Warp IP. The last frame counted may be incomplete.

This counter can indicate the video activity at the input of the Warp IP. Sampling this count periodically indicates frame rate. A static count indicates that the upstream pipeline to the Warp IP is not producing video data.

INPUT_FRAME_PERIOD

The number of axi4s_vid_in_0_clock cycles seen between the last two start of frames seen at the input.

Use this counter to indicate the frame rate by comparing its value with the input clock frequency. If the value from this register varies greatly, it indicates an unstable processing pipeline upstream of the Warp IP.

Output Section

The debug registers relating to the output section of the Warp IP are read using the intel_vvp_warp_get_output_debug_register () API call.

OUTPUT_FRAME_COUNT

A count of the number of frames that have started at the output. The last frame counted may be incomplete.

This counter can indicate the video activity at the output of the Warp IP. Sampling this count periodically gives an indication of frame rate and a static count indicates that the downstream pipeline from the Warp IP is blocked and not accepting video data.

OUTPUT_FRAME_PERIOD

The number of axi4s_vid_out_0_clock cycles seen between the last two start of frames seen at the output.

This counter can indicate the frame rate by comparing its value with the output clock frequency. If the value from this register varies wildly, it indicates an unstable processing pipeline downstream of the Warp IP.

Engine Section

The debug registers relating to the engine section of the Warp IP are read using the intel_vvp_warp_get_engine_debug_register () API call.

ENGINE_FRAME_COUNT

A count of the number of frames that have started to be processed by the engine being referenced. The processing of the last frame counted may be in progress.

This counter is useful for indicating the video activity within the Warp IP. It gives an indication that the Warp IP is set up and that the engine is configured to process correctly.

ENGINE_FRAME_PERIOD

The number of core_clock cycles seen between the last two start of frames seen at the engine.

This counter is useful for confirming that the core_clock is set correctly given the expected frame rate. It is also useful for comparing against the ENGINE_BUSY _CYCLES value as an indication of how busy the engine is.

ENGINE_BUSY CYCLES

The number of core_clock cycles for which the engine actively processes video data during the last frame. The counter starts when the processing of a frame begins and continues until either the IP completes the frame or encounters the start of the next frame. For the latter the engine fails to complete the processing of the frame in time, refer to the ENGINE_FAILED_TO_COMPLETE_FRAME status indicator.

When compared to the ENGINE_FRAME_PERIOD, the value of ENGINE_BUSY_CYCLES gives an indication of how busy an engine is during the processing of a frame.

ENGINE_FRAME_DELAY

The number of core_clock cycles between the start of the last input frame and the start of the engine’s processing phase.

Use this counter for low latency behavior to determine if you have enough delay when programming the low latency settings. It also indicates the input and output frame synchronization that is a requirement for correct low latency behavior. This delay must be stable for low latency IPs to work correctly. If the IP does not see a stable value, the delay is changing over time, which indicates the input to output frame synchronization may not be operating correctly.

ENGINE_FAILED_TO_COMPLETE_FRAME

A sticky flag that indicates that the engine has failed to complete the processing of a frame in the required frame period. The flag is cleared each time it is interrogated.

The IP sets this to indicate that the engine has not had sufficient time to process the video frame as required and image corruption occurs. The most likely reason is insufficient memory bandwidth available to the engine. Insufficient memory bandwidth gives processing stalls either while waiting for read data to return or stalls while blocked waiting for write data is sent out.

ENGINE_RUN_STATUS

This value is only relevant when Use single memory bounce is on.

The lower 16 bits of the value indicate the lowest buffering level the IP reaches during the processing of the previous frame. The buffering level is the difference between the write position and the read position of the current cache accesses. If this value is 0, it indicates that the engine stalls during the processing of the frame. This stall can give unstable output video when Use single memory bounce is on.

The upper 16 bits of the value is the output line at which the IP reaches the lowest buffering level. They indicate at which point in the transform this output line occurs.

ENGINE_CACHE_LOADS The number of cache loads the IP produces while the IP processes the previous frame. Each cache load reads a 16x8 pixel block (128 pixels in total). The total number of cache reads indicates the memory bandwidth load that the current warp transform is placing on the memory.

General Section

The debug registers relating to the general section of the Warp IP are read using the intel_vvp_warp_get debug_register () API call.

MEM_WR_QUEUES0

Indicates the number of internal requests that queue at any one time for each of the write accesses through the Warp IP’s memory controller. The IP stores each queue depth value as a byte in the 32-bit data word returned by the read to this register. The IP has a number of queues depending on the configuration (Separate Queue Values (Write Accesses)).

MEM_RD_QUEUES0 and MEM_RD_QUEUES1

Indicates the number of internal requests that queue at any one time for each of the read accesses through the Warp IP’s memory controller. The IP has two 32 bit registers for access to the read queue depths. Each individual queue depth value is stored as a nibble in the 32 bit data word returned by a read to one of these registers. The IP has a number of queues depending on the configuration (Separate Queue Values (Read Accesses))

Table 689.  Separate Queue Values (Write Accesses)

The table shows the separate queue values for each configuration. The maximum depth value for each write queue is 48. If periodically sampling of the queue depth values finds them to be close to or at this maximum value, it indicates a limitation on write bandwidth from the IP to the external memory because the queues are filling up and blocking throughput.

Queue Use Easy Warp or Use Single Memory Bounce are On Single Engine Dual Engine
Video Input MEM_WR_QUEUES0[7:0] MEM_WR_QUEUES0[7:0] MEM_WR_QUEUES0[7:0]
Engine 0 Write N/A MEM_WR_QUEUES0[15:8] MEM_WR_QUEUES0[15:8]
Engine 1 Write N/A N/A MEM_WR_QUEUES0[23:16]
Table 690.  Separate Queue Values (Read Accesses)The table shows the separate queue values for each configuration.

The maximum value for each read queue depth is 12. If periodically sampling of queue depth values finds them close to or at this maximum value, it indicates a limitation on read bandwidth from the IP to the external memory because the queues are filling up and blocking throughput.

Queue Easy Warp Single Engine Dual Engine
Video Output MEM_RD_QUEUES0[3:0] MEM_RD_QUEUES0[3:0] MEM_RD_QUEUES0[3:0]
Engine 0 Video N/A MEM_RD_QUEUES0[7:4] MEM_RD_QUEUES0[7:4]
Engine 0 Coeff0 N/A MEM_RD_QUEUES0[11:8] MEM_RD_QUEUES0[11:8]
Engine 0 Coeff1 N/A MEM_RD_QUEUES0[15:12] MEM_RD_QUEUES0[15:12]
Engine 0 Coeff2 N/A MEM_RD_QUEUES0[19:16] MEM_RD_QUEUES0[19:16]
Engine 1 Video N/A N/A MEM_RD_QUEUES0[23:20]
Engine 1 Coeff0 N/A N/A MEM_RD_QUEUES0[27:24]
Engine 1 Coeff1 N/A N/A MEM_RD_QUEUES0[31:28]
Engine 1 Coeff2 N/A N/A MEM_RD_QUEUES1[3:0]