打印
[活动]

如何利用FPGA进行GPU的设计

[复制链接]
4581|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yinxiangxv|  楼主 | 2023-10-25 11:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yinxiangxv 于 2023-10-31 16:30 编辑

#申请原创# 图形处理单元 (GPU) 的发展是一个渐进的过程,跨越了几十年。 以下是 GPU 从最初状态到目前技术水平的演变的总结:
- 3D 消费类图形的早期阶段:第一个真正的 3D 图形始于早期的显示控制器,称为视频移位器和视频地址生成器。 它们充当主处理器和显示器之间的通道。 早期的图形系统具有固定功能管道 (FFP) 和遵循非常严格的处理路径的架构,利用几乎与 3D 芯片制造商一样多的图形 API。
- PC 上 3D 的兴起:在 20 世纪 90 年代,桌面 3D 工作站变得更加便宜,单板、多芯片图形子系统变得更加普遍。 PC 上 3D 的兴起导致科学界采用 GPU。
- Nvidia 和 AMD:Nvidia 和 AMD 多年来一直是 GPU 市场的主要参与者。 Nvidia 在五月份推出了他们的第一款图形芯片 NV1,并成为第一款商用 GPU。 AMD还凭借其Radeon系列显卡为GPU市场做出了重大贡献。
- 高性能计算(HPC)特性:凭借HPC特性、高性能和高效率,GPU迅速成为大型科学计算机的首选技术。 GPU 的一个重要里程碑是 Nvidia 在 2007 年推出了 CUDA(统一计算设备架构),它允许开发人员使用 GPU 进行通用计算。
- 通用计算:GPU 的快速发展可以追溯到 20 世纪 90 年代末的一个关键时刻,当时研究人员开始探索通过使用并行计算机架构来提高计算机图形速度的方法。 这种并行计算机架构是 GPU。 将并行 GPU 作为行业标准将焦点从娱乐转移到并行处理。
- 当前状态:当今的 GPU 构建在单个芯片上,该芯片上挤满了数百(甚至数千)个 GPU。 这些 GPU 设计用于同时执行许多编程指令,并且可以通过编程来快速执行各种计算机图形和通用任务。 用于了解有关 GPU 发展的更多信息的开源资源包括 IEEE 计算机协会,它提供了有关 GPU 发展及其在 HPC 中的使用的信息,以及 TechSpot 网站 ,它提供了对历史的广泛了解 GPU 的。 此外,Nvidia 网站提供了有关通用计算 GPU 发展的信息。

总而言之,GPU的发展是一个渐进的过程,跨越了几十年。 GPU已经从早期的显示控制器发展成为用于通用计算的高性能计算设备。 有多个开源资源可用于了解有关 GPU 发展的更多信息,包括 IEEE 计算机协会和 TechSpot 网站。
那么我们在设计GPU的时候要考虑什么问题呢?有没有什么好的参考方案呢?这个还真有,我们首先从一篇文章开始:
这篇文章主要介绍如何用FPGA进行GPU相关的设计的。
图形处理单元(GPU)旨在并行地对多个图形输入数据执行高度数学计算。输入数据是图形基元,例如浮点单元类型的多边形结构。GPU的处理**要是对输入的图形基元顶点进行三角剖分。
GPU内部涉及的计算是高度并行和复杂的。运动图像的实时图形处理需要高精度、高精度的算法来实现运动图像的平滑过渡。
GPU主要负责进行光栅化过程、几何引擎、纹理、碎片化等相关的处理

除了光栅化过程渲染像素外,它还执行对象的照明、阴影和颜色,这需要被指示绘制的对象的附加属性。纹理是在给定对象的顶部用2D图案或色调包裹3D对象的过程。
片段是生成必要像素的过程,这些像素值得将基元绘制到帧缓冲区中。图形流水线在不同的时间对不同的数据执行相同的指令。
GPU框架设计的基本组成部分是光栅化、内存控制器、DDR3中的三显示缓冲区、视频图形控制器设计。主应用程序通过生成指令来驱动FPGA上的GPU块。
FPGA内部实现的GPU基本设计构建块如图2所示:

光栅化作用于指令包结构上可用的基元顶点。渲染/光栅化逻辑用于计算DDR3的内存地址。反过来,存储器地址被映射到投影屏幕位置。
在提供的坐标超出投影屏幕分辨率的情况下,设计逻辑确保所有这些区域都被剪裁。屏幕坐标与X和Y方向上的绝对屏幕位置之间的映射如图4所示

用于根据设计分辨率的给定屏幕坐标计算绝对屏幕位置的公式


存储器控制器核心[11]用于访问DDR3存储器,用于读取和写入操作,以及配置端口上的仲裁逻辑。
整个屏幕分辨率像素被映射到DDR3内存位置,用于视频缓冲。整个XGA分辨率被映射到3072KB的DDR3存储区域(1024*748*4字节),其中每个像素数据为4字节。
像素颜色存储在DDR3中用于像素照明。DDR3内存映射如图5所示

光栅化设计会更新每个像素的内存位置。每个像素包括三种基色(RGB)。用于内存控制器的接口命令包括要读/写的字数、读/写指令和读/写操作的内存地址。
执行读写操作的流程图分别如图6和图8所示。


读取和写入操作之间的区别在于数据和命令的顺序,如图6和图8所示。在读取时,设计逻辑在数据之前先发送读取命令。
但在写入时,设计逻辑在写入数据后发送写入命令。反过来,内存控制器负责通过指定的端口进行写/读过程。
在读取和写入之前,将分别检查控制器数据FIFO的满状态和空状态。
缓冲区只是DDR3中的内存区域(大小3072KB)。在屏幕上显示之前,已使用三重缓冲机制将全帧内容缓冲在3个显示缓冲区中。
光栅化逻辑根据来自主机应用程序的指令直接绘制到操作缓冲区中。
构建这种缓冲方案所需的总内存缓冲区大小是DDR3内存中的12MBytes,DDR3内存包括一个操作缓冲区和三个显示缓冲区。

视频图形控制器设计为XGA分辨率生成水平、垂直同步和数据启用控制信号以及RGB颜色数据。像素时钟频率主要取决于显示系统的刷新率及其分辨率。
在这种设计中,显示器的刷新率为60Hz。根据VESA标准生成控制脉冲的标准脉冲计数如表所示

以下将各种大小的点视为本文中的样本,以显示存储器地址计算,然后在屏幕上显示实验设置和结果,屏幕的不同位置显示不同大小的各种点,如图14所示。
案例1和案例2分别提供了用于渲染不同大小的2和5的点基元的计算。
这些数值的计算是通过简单替换方程(1)至(5)中给定的点尺寸和屏幕坐标(0,0)得出的。


最后我们就可以通过设计的GPU核来驱动屏幕了

参考文献:[color=rgba(0, 0, 0, 0.850980392156863)]http://ieeexplore.ieee.org/document/7807847

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

296

帖子

0

粉丝