考虑制作GPU时从何处开始?


8

前几天我看了这段视频,这让我开始思考如何设计和设计类似GPU的视频。你将从哪里开始?我更感兴趣的是阅读它们的工作原理,而不是不使用TTL(无论如何)。

我知道这听起来像是一个“如何编写编程语言”的问题,但是任何起点都是很好的,因为我不知道从哪里开始。


3
您是否对“高速3D图形”或“如何驱动CRT / LCD”感兴趣
Toby Jaffey

@Joby atm仅在显示器上显示内容。颜色的平方会很好。
院长

3
有人可以向我解释为什么我要投反对票吗?所以我可以解决任何问题。
院长

1
我在这个问题上遇到的困难是,在仅生成单色80x25字符显示,曾经被称为视频显示生成器以及“ GPU”的含义之间存在很多基础。提示您可能要使TTL变“一个”,使您更接近旧的80x25显示生成器。
JustJeff 2011年

@JustJeff,好吧,我不知道他们又叫什么,为什么他们做同样的工作如此不同呢?
院长

Answers:


16

这有点像参加科学课程的拼贴画期末考试,并以此作为您的问题:描述宇宙。简短但简洁。无法以任何实际的方式回答该问题-因此,我将回答另一个问题。

在尝试设计GPU之前,我需要了解什么?

按照时间顺序,它们是:

  1. VHDL或Verilog。
  2. FPGA(用于编写数字逻辑的有用区域)。
  3. 基本数据路径内容,例如FIFO。
  4. 总线接口,例如PCIe和DDR2 / 3接口
  5. 数学函数的二进制实现,包括浮点数等。
  6. CPU设计。
  7. 视频接口标准。
  8. 高速模拟资料(高速数字的模拟端)
  9. PLL和其他半高级时钟资料。
  10. 高速电路的PCB设计。
  11. 低电压,大电流DC / DC转换器设计。
  12. 很多软件的东西。
  13. 最后,是ASIC或其他定制芯片类型设计。

我也敢说您不会用TTL逻辑芯片来制作这种东西。我怀疑您是否可以使用正常的TTL芯片获得合理的DDR2 / 3内存接口。使用大型FPGA会容易得多(但不容易)。

进行第6步可能会“足以消除您的智力渴求”。这也可以在合理的时间内(大约一年)内完成,以设定为短期目标。

编辑: 如果您只想吐出一个视频信号,那么这相对容易。从本质上讲,它是一块内存,以60-ish Hz的频率移出显示器。细节在于魔鬼,但这是如何做到这一点的粗略概述:

从一些双端口RAM开始。它不一定是真正的双端口ram,只需CPU可以读取/写入的一些RAM,以及视频电路可以读取的RAM。该RAM的大小和速度将取决于您所驱动的显示器类型。我个人将使用连接到Xilinx Spartan-6 FPGA的存储器接口的DDR2 SDRAM。他们的“内存接口生成器”内核(MIG)使将其转换为双端口RAM变得很容易。

接下来,设计一个电路,该电路将控制如何读取此RAM并通过简单的总线将数据吐出。通常,您只是顺序读取RAM。“简单的总线”确实就是这样。它上面有一些像素值,仅此而已。该电路还需要做两件事:必须在每个视频帧都回到RAM的开头,并且必须在水平/垂直回扫期间“暂停”输出。

第三:建立一个电路,将输出视频控制信号(HSync,Vsync等),并告知前一个电路何时暂停和重新启动。这些电路实际上相当容易实现。恕我直言,找到合适的视频标准比较困难。

最后:将控制信号和视频像素数据总线连接到“某物”。那可能是彩色的LCD。可能是用于输出VGA兼容信号的视频DAC。有NTSC / PAL编码器可以接收这些信号。等等。

如果分辨率真的很小,您可能会放弃使用FPGA的内部RAM而不是外部DDR2 SDRAM。我应该警告您,如果使用DDR2 SDRAM,那么您可能需要FIFO和其他一些东西-但这也不是那么困难。但是,使用DDR2 SDRAM,您可以支持相当高分辨率的显示器。您还可以找到带有集成VGA DAC和其他形式的视频输出的FPGA开发板。


哇,这不是一个短时间的任务。我了解没有简明的答案。但是您给了我一个很好的起点,我将不得不在非常有限的业余时间里做到这一点。但是应该是一个有趣的经历。
院长

@Dean Hmmm ...这里有三样不同的东西:CPU,GPU和一些要输出视频信号的东西。制作一些东西来吐出视频信号很容易。GPU更像是CPU,旨在执行与视频/图形相关的处理:3-D图形,2-D图形加速等。如果您只想吐出视频信号,则可以进行设置。如果您需要3-D图形甚至是半高级2-D,则需要查看我的列表。

1
吐出视频信号有多容易?我认为这将是更好的第一步。
院长

@Dean我编辑了答案,以包含有关如何吐出视频信号的内容。

1
我曾经写过一本关于计算机图形学的书(ISBN 0-471-13040-0),但是它非常入门。早在1990年代,ATI仅拥有MACH64芯片并想进入3D时代,他们聘请我担任顾问,教给他们一些概念,使它们发展起来,并为体系结构提供帮助。结果是第一批RAGE芯片。那时我是一名图形专家。如果您不相信我,请查看美国专利5097427。但是,我认为二次插值专利(US 5109481)更重要,但不那么浮华。您可能还会在其中找到其他名称;-)
Olin Lathrop

8

竞速详细介绍了Atari VCS的设计和操作。它对电视接口适配器进行了彻底的处理

TIA是关于最简单,实用的GPU的。

了解一个很小但完整的工作系统可能是学习新学科的好方法。

提供完整的原理图,以及技术手册


Atari 2600规则!大多数游戏系统都使用硬件来生成显示,但是2600完全是靠魔术来完成的。将类似Combat甚至Asteroids的东西与Toyshop Trouble之类的东西进行比较(Asteroids和Toyshop Trouble均为8K)。“战斗”显示两个具有2行分辨率的单色对象。Toyshop Trouble可显示16个具有单行分辨率和每行着色(且无闪烁)的对象。Toybank Trouble无需额外的硬件即可通过银行切换器获得8k的代码。只是一些聪明的编码和一些魔术。
supercat

顺便说一句,2600编程可能是晦涩难懂的,但是我为客户所做的一个基于PSOC的视频叠加设计却让人感到2600 ish。配置片上硬件以生成一些时序,并使用代码将数据馈送到SPI从设备,以便可以将其作为像素移出。
supercat

令人难以置信的是,所有游戏代码都必须在光束回溯时间内执行
JustJeff

5

如果您只想在屏幕上放一些东西,并认为您可能真的喜欢接线,那么您可以针对早于1980年代的字符图形系统。如果您可以按时达到RS-170A的时间,您甚至可以将信号推入50英寸等离子电视上的备用AV输入中,并大幅度复古。

一些早期的系统使用其8位CPU直接生成显示,例如Atari 2600中的6507和Timex Sinclair ZX-81中的Z-80。您甚至可以使用现代微控制器执行相同的操作。这样的好处是硬件很简单,但是软件通常必须安装在汇编器中,并且非常严格,其结果确实令人难以理解。可以说2600使用了额外的硬件,但是TIA没有太多的FIFO,而6502(实际上是6507,实际上)必须实时向其转储字节。在这种方法中,没有标准的视频模式。每个使用视频的应用都必须与保持像素流动的需求紧密结合。

如果您真的想用TTL构建某些内容,那么下一个复杂度将是基于字符ROM的文本显示。这样,您就可以将256个字符中的任何一个放入例如40列和25行的位置。有两种方法可以做到这一点。

一种方式-做我做的TRS80模型。一组具有各种门的74161计数器生成了视频地址;三个74157s将CPU地址的12位与视频地址多路复用,以将地址提供给2K静态RAM。RAM数据被缓冲返回给CPU,但是作为字符ROM的地址被无缓冲地送入。没有巴士仲裁;如果CPU需要视频RAM,则视频系统会启动,从而产生“雪景”效果。合并的视频地址与来自计数器部分的一些行组合在一起以舍入低位地址;字符ROM输出被转储到74166移位寄存器中。整个过程脱离了14.31818MHz晶体的划分。通过这种方法,您可以完全在硬件(例如40x25或64x16等)中完全实现一种视频模式,

另一种方法-挖出像6845这样的所谓的CRTC芯片。这些芯片结合了大多数计数器和粘合逻辑,并为处理器提供了控制寄存器接口,因此您可以对一些时序进行重新编程。这样的系统可以做得更灵活一些,例如,在寄存器控制下,您可能会从同一硬件中获得40x25和80x25。如果您对时钟频率非常了解,则可以让您的CPU在一半的时钟时间内自由访问视频RAM,而在另一半时钟期间自由访问视频地址生成器,从而避免了总线仲裁的需要。消除积雪的影响。

但是,如果您想使用真实的图形模式,则会很快发现自己滚动是有问题的。最初的Apple 2可以管理它,但是该系统中有大约110个MSI TTL芯片,甚至还需要处理一些有趣的事情,例如视频缓冲区到显示器的非线性映射以及极其有限的调色板。 ,仅举两个。沃兹通常被认为有线索。到“ 2e”问世时,苹果公司已经将视频系统放在定制芯片中。大约在同一时间,C-64将其图形功能归功于定制芯片。

所以..我想说两种方法。一种方法-淘汰旧的TTL,并追求 80x25的单色显示;另一种方式-让自己一个良好的FPGA评估板,做整个事情的VHDL,并且开始与80x25的文本显示。


1

您需要从一些计算机体系结构基础入手,与此同时,要开始使用VHDL或其他描述语言进行基本ASIC设计。

一旦您了解了计算机体系结构的基础知识,我建议您尝试使用计算机图形学,也许从一些简单的OpenGL项目开始。这里的主要收获是对图形管道渲染架构有一个了解。

下一步将考虑使用专用硬件而不是软件来完成此渲染管道的方法。

就实际构建GPU并将其连接到计算机而言,我认为这样做并不适合发烧友的预算,但也许可以使用嵌入式ARM-linux平台尝试一些非常基本的方法(该方法公开一个系统总线)和一个FPGA(在这种情况下,FPGA是用VHDL编写的GPU)输出到一个低分辨率的VGA显示器,作为一个紧密结合的项目。这也需要编写驱动程序。如果您能做到,那将是简历上的杀手kill。


1

查看AMD和NVidia的GPU的高级框图。您可能会从opengraphics人员那里获得大量信息,他们正在使用开源驱动程序设计开源的图形硬件。

然后,您需要查看所需的内容。

  • 输出,HDMI,DVI还是VGA?
  • 顶点转换?
  • 纹理化?
  • 像素阴影?
  • 三角形裁剪和栅格化?
  • 有纹理吗?
  • 栅格操作?

如果您还没有使用GPU功能进行任何编程,那可能也是一件好事。

我认为莱昂对此也有帮助。如果这样做,我会使用Verilog。

如果您只想要Compsite视频,如发布的视频中所示。有很多例子。哎呀,看看沃兹对Apple II的实现。:)


1
@Leon留下评论了吗?如果是这样,我将无法查看。
院长

我删除了它。我建议使用FPGA来实现一个简单的CPU。几年前,我用VHDL编写的一本书中的设计进行了修改,并针对硬件进行了修改。
Leon Heller

好的,那就是为什么我可以看到它。
院长

1

听起来您似乎并不想像视频生成器那样使GPU(就3d而言,并为其全部着色)。许多FPGA评估板上都有一个连接器,用于VGA或其他类型的显示器,以及制造商或其他用户的示例项目,用于在该显示器上显示内容。也有一些带有内置LCD的板,但它们的价格往往在300美元以上,而可以驱动标准显示器的基本板的价格在60-120美元之间。

大多数FGPA没有足够的内部存储器来完成比一个小型显示器更多的功能,但随后,许多主板都具有具有更大容量的外部存储器。他们中的许多人以数字方式驱动模拟VGA监视器,即RG和B处于全开或全关状态,尽管其中一些给您提供了两个级别,并且您可能会找到一个带有视频DAC或数字监视器接口的连接器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.