跳转到主要内容

从外部RAM运行图形

本节介绍如何计算下图所示典型配置的图形性能。示例采用1024x600像素的高分辨率24位RGB-TFT显示屏,帧缓存为16bpp格式并存储于外部32位SDRAM中。图形资源存储在外部OSPI NOR Flash中。

示例中使用的配置图示

目标

  1. 为开发人员提供分步指导,帮助其更好地理解和评估图形用户界面应用的系统性能。
  2. 验证所选显示屏及其需求是否能在指定系统配置下持续运行。
  3. 明确在定义的子系统范围内可开发何种复杂程度的GUI。

The last section discusses the hybrid double buffer strategy which can help reduce the load on the external memory bandwidth in some cases.

步骤1:显示屏规格​

STM32H7S78探索套件采用的显示屏型号为MB1860。探索套件的BOM链接见此处。探索套件显示屏的分辨率为800×480像素,低于本例中的配置。本例的显示屏规格如下:

  • 显示高度:600 px
  • 显示宽度:1024 px
  • 显示器刷新率:60 Hz
  • 显示消隐区占比*:通常约10%

*显示消隐区包含所有非活跃像素。主要由LTDC的 porch区域构成。

步骤2:显示屏需求与像素时钟计算​

本步骤需计算显示需求,以确认所选MCU和存储器能否满足显示规格要求。

根据上述分辨率,总像素数为:

pixel height x pixel width = 600px x 1024px = 614,400px

显示屏刷新率为60Hz (1000ms/60 = 16 ms),因此LTDC需要每16ms从帧缓存读取数据并发送至显示屏。不考虑消隐区时,维持60 Hz刷新所需的系统 (RAM) 带宽可通过以下公式计算:

总像素数 × 刷新率 × 帧缓存色深 (RGB565)

614,400px x 60Hz x 16bpp = 589,824,000bit/s = 589.82Mbit/s

60Hz 刷新率所需的像素时钟频率计算如下:

(total number of pixels x refresh rate x (blanking% / 100 + 1)) / 1,000,000.

(614,400px x 60Hz x (10 / 100 + 1)) / 1,000,000 = 40.55 MHz pixel clock

Caution

像素时钟不得超过LTDC支持的最大值。有关不同配置下最大像素时钟的概述,请查阅[LTDC应用笔记AN4861] (https://www.st.com/resource/zh/application_note/an4861-lcdtft-display-controller-ltdc-on-stm32-mcus-stmicroelectronics.pdf)。 STM32H7R/S的最大像素时钟详情请参见表13。

STM32H7R/S支持的最大像素时钟详见下方插入的LTDC应用笔记表13。

STM32H7R3/7S3和STM32H7R7/7S7支持的最大像素时钟

步骤3:帧缓存和存储器策略​

本例采用32位宽FMC接口连接外部32位SDRAM,运行频率为100 MHz,并采用双帧缓存策略。此外,开发人员还可选用16位SDRAM或200MHz DTR模式的4/8/16位串行RAM(如Hyper RAM和串行PSRAM)。

所有外部存储器均需额外周期启动操作,本例假设SDRAM效率约为80%。

步骤4:帧缓存性能​

当前后缓存位于不同RAM库时,理论RAM吞吐量公式为:

interface width x interface frequency = Mbit/s

32bit x 100MHz = 3,200Mbit/s = 400MB/s

然而,此吞吐量是基于RAM以100%的效率运作的假设。若考虑步骤3中的估计效率,实际吞吐量为:

3,200Mbit/s x 0.8 = 2,560Mbit/s = 320MB/s

步骤5:计算显示更新后的剩余带宽​

Earlier we saw that the display required 589.82Mbit/s, and that our external RAM has a throughput of 2,560Mbit/s. 现在让我们计算可用于屏幕渲染/动画的剩余带宽。

2,560Mbit/s – 589.82Mbit/s = 1,970.18Mbit/s = 246.27MB/s

Overall, the example system can keep the display updated and on top of this there is also ~1,970Mbit/s remaining bandwidth for extra animations and more UI layers.

步骤6:UI渲染性能(GUI 帧率)​

在此UI用例中,我们的目标是实现60FPS的GUI渲染。这意味着系统必须在16 ms内渲染并传输新帧。此外,对于某些高级UI动画可接受帧率降至30FPS,以确保整体流畅的用户体验。

让我们计算每帧缓存片的性能,即每帧(每16 ms)可渲染的数据量。 First, we use the remaining framebuffer bandwidth (1,970Mbit/s) and divide by 60FPS.

1,970Mbit/s / 60FPS = 32.8Mbit/frame (approximately every 16ms at 60FPS).

This means that the RAM throughput is 32.8Mbit per 16ms to render and update the UI.

初始配置图示的步骤2展示了用于修改/更新UI的额外渲染流程。由于帧缓存采用16 bpp格式,所有帧缓存操作均以16 bpp执行。因此在帧缓存中写入单个像素将占用16位SDRAM带宽。若需混合像素,NeoChrom GPU将首先从帧缓存读取该像素。完成像素混合(修改)后再写回帧缓存。这意味着系统执行读取-修改-写入操作需传输两次16位数据,共占用32位SDRAM带宽(16位读取 + 16位写入),如下图所示。

帧缓存读取-修改-写入操作示意图

基于此,可计算单帧周期内可处理的像素数量:

32.8Mbit/frame / 16bpp = 2.05Mpixels

为提供直观参考,进一步计算单帧周期内可完成的全屏操作次数:

2.05Mpixels / 614,000px = 3.34 times

这意味着系统可以先绘制全屏色块,再与第二个色块混合(16 bpp写入+ 16 bpp读取+ 16 bpp写入)。然后进一步与覆盖17%屏幕的第三色块混合(34%带宽/2)。

如步骤6开头所述,部分高级UI动画可接受帧率降至30FPS。这意味着相比60FPS,可用带宽翻倍,单帧全屏操作次数可提升至:

3.34 x 2 = 6.68 times

单帧可执行的全屏操作次数无法一概而论,这很大程度上取决于UI的复杂程度。此外需考虑外部RAM是否需用于帧缓存之外的其他用途。但对多数应用而言,合理的基准应保持3次以上全屏操作能力。

To compare with a concrete example, the STM32H7S78-DK runs an 800x480 RGB TFT display, with 16bit framebuffers in external 16bit serial PSRAM at 200MHz DTR (800MB/s theoretically if 100% efficient). 相较于SDRAM,该串行PSRAM在初始化阶段需要更多时钟周期,导致内存初始化效率较低(有关串行RAM性能的详细信息,请参见AN6062)。上述示例和计算表明,在此分辨率下,系统完全能够支持复杂UI的实时渲染,并稳定保持60FPS的刷新率性能。

TouchGFX Demo提供了另一个典型参考案例,其复杂UI支持RAM和Flash存储器的双频工作模式配置。

注意​

需注意,上述计算仅基于RAM带宽分析,未考虑实际可用计算能力。同时,相关计算结果建立在RAM效率假设基础上。尽管这些假设有依据,但仍属于理论范畴。

尽管存在局限性,本示例中的分析方法仍可为性能评估提供有效参考。

Hybrid Double Buffer Strategy​

It is possible to reduce the load on the external memory interface by changing the framebuffer strategy to the hybrid double buffer strategy.
With this strategy all rendering is performed in small buffers in internal RAM. The completed rendering is then copied to the external RAM using a DMA operation.

This limits the accesses to external RAM to a single (burst) write operation. The drawback of the strategy is that it requires large (defaults to 64KB) buffers in internal RAM.

Read more about framebuffer strategies here.

Quality of Service​

Some MCUs have Quality of Service (QoS) settings to control priorities on the internal bus matrix. When this feature is available, and when framebuffers are stored in external RAM, it is recommended to prioritize the LTDC to avoid LTDC underruns. An example for STM32H7R/S can be found here.

词汇表​

  • 读取-修改-写入:读取内存数据、修改、写回的操作过程。
  • 像素时钟:像素传输到显示器的频率,决定屏幕的刷新率和分辨率。即显示控制器向面板发送像素数据的速度。
  • 帧缓存:存储显示位图的RAM区域。显示控制器从中读取像素值。所有渲染操作均作用于该区域。
  • 消隐区:显示无效像素的总和。主要由LTDC的 porch区域构成。
  • FMC:可变存储控制器。管理CPU与各类存储器(如SRAM、NOR、NAND和SDRAM)之间接口的硬件组件。本例中用于控制外部SDRAM。
  • XSPI:扩展SPI接口。 SPI的高级版本,支持更高的数据传输速率及增强外设通信功能。本例中用于连接外部NOR Flash。详见wiki说明。
  • 存储器协议开销:管理内存与处理器之间的通信和数据传输所需的额外时间和资源,包括错误校验、握手协议和寻址等任务。这种开销会影响系统的整体性能。
  • DTR:双倍传输速率。数据在时钟上升沿和下降沿传输。从而实现带宽倍增。