Video and Vision Processing Suite Intel® FPGA IP User Guide

ID 683329
Date 8/08/2022
Public

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

Document Table of Contents

32.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 585.  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
Reserved 0x030-0x16C RO -
int_control 0x170 RW Turns on the interrupt
int_status 0x174 RW1C Read interrupt status and clear interrupt
Table 586.   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 587.   version_number Register
Bits Name Description
31:0 Version Number The version number of the Warp IP
Table 588.   pip Register
Bits Name Description
31:0 Pixels in Parallel The pixel in parallel parameter. Returns a value of 1 or 2.
Table 589.   color_planes Register
Bits Name Description
31:0 Number of Color Planes The number of color planes parameter. Returns a value of 3.
Table 590.   bps Register
Bits Name Description
31:0 Bits per Color Sample The bits per color sample parameter. Returns a value of 10.
Table 591.   num_enginesRegister
Bits Name Description
31:0 Number of Engines The number of engines parameter. Returns a value of 1 or 2.
Table 592.   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 593.   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 594.   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 595.   easy_warp Register
Bits Name Description
31:0 Use easy warp The Use easy warp parameter. Returns a value of 0 or 1.
Table 596.   int_control Register
Bits Name Description
0 Interrupt Enable Setting this bit to 1 enables the interrupt. Setting to 0 disables the interrupt.
Table 597.   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
  • General section
    • MEM_WR_QUEUES0
    • MEM_WR_QUEUES1
    • MEM_RD_QUEUES0
    • MEM_RD_QUEUES1
Table 598.  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.

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 599.  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 Easy Warp 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 600.  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]