Memory Requirements - 2023.1 English

H.264/H.265 Video Codec Unit v1.2 Solutions LogiCORE IP Product Guide (PG252)

Document ID
Release Date
2023.1 English

The VCU software reads the total available encoder buffer size from LogiCORE registers (the values can be in the GUI, after the settings) along with the value of maximum number of cores based on the settings you select (resolution and fps). The memory allocated by the software is calculated using the total encoder buffer size divided by the maximum number of cores. If this value is inadequate, no channel is created.

Note: The value of 4kp30 encoder buffer is not half of 4kp60.

The 4kp30 encoder buffer requires lesser space than the 4kp60 because it uses two cores and four cores, respectively. Two tiles are encoded in parallel for 4kp30 whereas for 4kp60, four tiles are encoded in parallel. To allocate encoder buffer, the most demanding use case is entered in the Vivado IDE, which computes and provides the maximum number of cores used in that use case (4 for 4K60) to the driver. For each core, the firmware allocates a static encoder buffer size equal to the total size divided by the maximum number of cores. When a channel is started, the firmware computes the required number of cores (for example, two cores for 4K30) and tries to use the available encoder buffer size for these cores.

The following example uses these values: HEVC, 4:2:0 8-bit, B-frames, Low MV range, and single stream. The requirement of encoder buffer is 696 KB for 4kp60 and 504 KB for 4kp30.

  • Set the GUI settings to: 4:2:0 8-bit, B-frames, Low MV range, and 4Kp60. The VCU software gets the available encoder buffer size = 696 KB, max-number-of-cores = 4.
    • Running the 4kp30 use case with same design might not work. A channel creation error might occur because 4kp30 requires two encoder cores and therefore, the available encoder buffer size is calculated as 696/2=348 Kb but 348 Kb is not enough to run the 4kp30 use case.
  • The same use case works if you override the setting number-cores=4, in the software or the application, because the encoder buffer attached to each core is used in that case.

Based on the use case, the two options to configure are:

  • Two 4Kp30 streams are defined in the GUI as the case with highest usage.
  • Number of cores for each 4Kp30 must be forced to four (this forces time sharing for the four cores and change the scheduling of the two channels while reducing the total amount of encoder buffer).

The first option is preferred to avoid exposing core management and to avoid additional encoding constraints. The second option may be preferred if the PL memory optimization is an important requirement. The following table shows the possible combinations:

Table 1. HEVC 4:2:0, 8-bit Depth, with B-Frames enabled, Low MV Range
Use Case Codec L2 Cache (KB) Comments
1080p60 AVC/HEVC 228 1 enc core
1080p60 - 4 streams AVC/HEVC 912 1 enc core per stream
4kp30 - 1 stream AVC 453 2 enc cores
4kp30 - 1 stream HEVC 504 2 enc cores
4kp30 - 2 streams AVC 906 2 enc cores per stream
4kp30 - 2 streams HEVC 1008 2 enc cores per stream
4kp60 - 1 stream AVC 582 4 enc cores
4kp60 - 1 stream HEVC 696 4 enc cores
  • The automatic computation of the required size becomes cumbersome if you want to support multiple use cases that do not have the same max-number-of-cores, but in basic cases (for example, 4x1080p60 or 2x4k30 or 1x4k60), the worst case encoder buffer size and the worst case max-number-of-cores must be provided. Choose multi-stream use case in GUI to avoid such failures.
    Note: You cannot set the value of num-cores to maximum in the sub-frame latency mode. It is recommended that you leave num-cores calculation as Auto to VCU firmware and adjust GUI settings to support multiple use cases.