跳转到主要内容

从外部RAM运行图形

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

示例中使用的配置图示

目标

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

步骤1:显示屏规格

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

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

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

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

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

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

像素高度 × 像素宽度 = 600 px × 1024 px = 614400 px

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

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

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

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

(总像素数 × 刷新率 × (消隐区占比% / 100 + 1))/ 1000000

(614400 px × 60 Hz × (10 / 100 + 1)) / 1000000 = 40.55 MHz像素时钟

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吞吐量公式为:

接口位宽 × 接口频率 = Mbit/s

32 bit × 100 MHz = 3200 Mbps = 400 MB/s

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

3200 Mbps × 0.8 = 2560 Mbps = 320 Mbyte/s

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

前文可知显示屏需要589.82 Mbps带宽,而外部RAM吞吐量为2560 Mbps。 现在让我们计算可用于屏幕渲染/动画的剩余带宽。

2560 Mbps - 589.82 Mbps = 1970.18 Mbps = 246.27 MByte/s

总体而言,示例系统在维持显示更新的同时,还可为额外动画和UI图层提供约1970 Mbps剩余带宽。

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

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

让我们计算每帧缓存片的性能,即每帧(每16 ms)可渲染的数据量。 首先取剩余帧缓存带宽1970 Mbps除以60FPS。

1970 Mbps / 60FPS = 每帧32.8 Mbps(60FPS约16 ms)。

计算结果表明,系统需在每16 ms周期内完成32.8 Mbps的数据吞吐,以满足UI的实时渲染和更新需求。

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

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

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

32.8 Mbps/帧/ 16 bpp = 205万像素

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

205万像素/ 614000像素 = 3.34次

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

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

3.34 × 2 = 6.68次

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

STM32H7S78-DK开发板采用800×480分辨率的RGB TFT显示屏,其16位帧缓存存储于外部16位串行PSRAM中,工作于200MHz双倍传输速率 (DTR) 模式,理论传输带宽可达800 MB/s(工作效率100%时)。 相较于SDRAM,该串行PSRAM在初始化阶段需要更多时钟周期,导致内存初始化效率较低(有关串行RAM性能的详细信息,请参见AN6062)。 上述示例和计算表明,在此分辨率下,系统完全能够支持复杂UI的实时渲染,并稳定保持60FPS的刷新率性能。

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

注意

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

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

词汇表

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