前几天我看了这段视频,这让我开始思考如何设计和设计类似GPU的视频。你将从哪里开始?我更感兴趣的是阅读它们的工作原理,而不是不使用TTL(无论如何)。
我知道这听起来像是一个“如何编写编程语言”的问题,但是任何起点都是很好的,因为我不知道从哪里开始。
前几天我看了这段视频,这让我开始思考如何设计和设计类似GPU的视频。你将从哪里开始?我更感兴趣的是阅读它们的工作原理,而不是不使用TTL(无论如何)。
我知道这听起来像是一个“如何编写编程语言”的问题,但是任何起点都是很好的,因为我不知道从哪里开始。
Answers:
这有点像参加科学课程的拼贴画期末考试,并以此作为您的问题:描述宇宙。简短但简洁。无法以任何实际的方式回答该问题-因此,我将回答另一个问题。
在尝试设计GPU之前,我需要了解什么?
按照时间顺序,它们是:
我也敢说您不会用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开发板。
如果您只想在屏幕上放一些东西,并认为您可能真的喜欢接线,那么您可以针对早于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的文本显示。
您需要从一些计算机体系结构基础入手,与此同时,要开始使用VHDL或其他描述语言进行基本ASIC设计。
一旦您了解了计算机体系结构的基础知识,我建议您尝试使用计算机图形学,也许从一些简单的OpenGL项目开始。这里的主要收获是对图形管道渲染架构有一个了解。
下一步将考虑使用专用硬件而不是软件来完成此渲染管道的方法。
就实际构建GPU并将其连接到计算机而言,我认为这样做并不适合发烧友的预算,但也许可以使用嵌入式ARM-linux平台尝试一些非常基本的方法(该方法公开一个系统总线)和一个FPGA(在这种情况下,FPGA是用VHDL编写的GPU)输出到一个低分辨率的VGA显示器,作为一个紧密结合的项目。这也需要编写驱动程序。如果您能做到,那将是简历上的杀手kill。
查看AMD和NVidia的GPU的高级框图。您可能会从opengraphics人员那里获得大量信息,他们正在使用开源驱动程序设计开源的图形硬件。
然后,您需要查看所需的内容。
如果您还没有使用GPU功能进行任何编程,那可能也是一件好事。
我认为莱昂对此也有帮助。如果这样做,我会使用Verilog。
如果您只想要Compsite视频,如发布的视频中所示。有很多例子。哎呀,看看沃兹对Apple II的实现。:)
听起来您似乎并不想像视频生成器那样使GPU(就3d而言,并为其全部着色)。许多FPGA评估板上都有一个连接器,用于VGA或其他类型的显示器,以及制造商或其他用户的示例项目,用于在该显示器上显示内容。也有一些带有内置LCD的板,但它们的价格往往在300美元以上,而可以驱动标准显示器的基本板的价格在60-120美元之间。
大多数FGPA没有足够的内部存储器来完成比一个小型显示器更多的功能,但随后,许多主板都具有具有更大容量的外部存储器。他们中的许多人以数字方式驱动模拟VGA监视器,即RG和B处于全开或全关状态,尽管其中一些给您提供了两个级别,并且您可能会找到一个带有视频DAC或数字监视器接口的连接器。