网易首页 > 网易号 > 正文 申请入驻

极客DIY:如何制作一个显卡?

0
分享至

这里包括了我的Kicad软件包以及 Xilinx ISE工具(基于verilog)文件。2015年10月开始的这项工作,2016年完成雏形但后来发现噪音太大,于是在2016年2月13日重新设计并进行修改。2016年3月27日正式开始设计项目,当时可以从软盘里面加载一个Bgr565(16位)的图像,而显示的分辨率在1280x720p(75mhz (像素时脉))。

2016四月,我尝试逆向分析Picasso96软件程序。

如果想要更新Xilinx项目,可以访问:点击我

Mike Field提供的sdram控制器(Verilog) 以及DVI编码器(VHDL),

正文

在2015年的时候,我拿出来了旧的电脑Amiga 2000,过去我在它上面学习计算机知识、玩游戏,我还利用它来制作音乐文件(ProTracker)以及Deluxe Paint格式文件。当然这次重走老路也是有好奇的心理,Amiga计算机为高分辨率,快速的图形响应,多媒体任务,特别是游戏方面做了专门设计,处理器是摩托罗拉的680×0系列处理器。同时也是第一代具有真彩显示的计算机之一,机型(A3000, A4000…)。该型号计算机已经过去30多年了,我上网上搜索该类型的计算机时候,发现这些计算机都已经是收藏品了,A2000价格还可以,在90年代像“Picasso”显卡还是很容易搞到手的。现在就比较困难了,像我的计算机是 640×256 (PAL)分辨率,64位色,以及蛋疼的隔行扫瞄模式。

作者表示自己的工作与控制器以及树莓派有关系 (http://interim.mntmn.com/),在2015年十月的时候,作者决定开始为这个计算机做个显卡,当时第一个想法就是“我开始为自己做显卡了,这得有多难”。

这个项目是很不容易的,但很明显工作量比我预期的要好。值得注意的是,该计算机自带Amiga操作系统。我不得不学习如何利用PCB电路板将它们做出来,如何处理SMD以及之前的Verilog 部分,当然还要在FPGA上面写程序,还必须掌握 SDRAM以及DVI/HDMI接口相关知识,我还需要解决AmigaOS(3)系统中驱动问题(closed/undocumented Picasso96)。

作者表示Amiga是一台不错的计算机,在上面可以看到很多实用的设计。

我一次尝试用的是Papilio Pro 开发板(失败了),该开发板基于Spartan-6 FPGA以及SDRAM 。在它上面还有输入/输出接口,我想利用RAM来存储图像信息(帧缓冲区),整个过程可以被看成是循环过程,并以正确的处理速度来处理图片数据信息,我在做这个之前就是用Atmel 处理器-即利用现状通过CPU来完成VGA图像的显示和控制是不可能的。SDRAM(同步动态随机存储器)要比SRAM(静态随机存取存储器)更复杂一些,如果想要了解到动态随机存储器里面的数据,那么就需要不停的刷新,同时静态功耗比较大,而现代的随机存取存储器几乎是所有访问设备中写入和读取速度最快的,取存延迟也和其他涉及机械运作的存储设备相比,也显得微不足道。

来源:http://www.alliancememory.com/pdf/dram/256m-as4c16m16s.pdf

开源的FPGA实现sdram控制器项目(Mike Field)帮助我完成了RAM相关工作。

我将Arduino与Papilio连接,这样就可以发送地址数据以及利用这一点来控制像素以及帧数。而这些都是可以实现显示器上面绘制图像的基本思路,当然还与 SDRAM有关系。下一步会将 FPGA与显示部分设备连接到 Amiga 2000。

原来的 Amiga计算机手册帮组我更好的理解其硬件信息。它的处理器可以看做是摩托罗拉68000处理器的升级版,即68k。值得一提的是,标准MC68000具有32位内部寄存器,但只能在16位数据总线上传送数据。处理器能访问16兆内存。从CPU获得二进制数据,而显存直接连接到数模转换器,然后在通过其它过程最终将信息发送到显示设备。

我开始利用KiCad打开电路图进行设计,首先要了解设备上组件加一起有100多个引脚都是做什么的,我一开始就犯下一个小错误,我不清楚为什么要处理这么多信号来做什么,最后用到的引脚也并没有那么多

地址总线(a1-a23)
数据总线(D0的- D15中)
高/低字节数选通三态电平输出端 (UDS / LDS)
电源(5V, GND)
READ、/AS、 DOE( Amiga发送数据,当然如果想要有这个想法,可以利用这一点)
Autoconf (/CFGIN, /CFGOUT)

来源:http://courses.cs.tamu.edu/cpsc462/walker/Slides/68K_Timing_Diagrams.pdf

在这里我需要更新FPGA程序( Verilog),并重新定义其设备总线命令(RAM)。在FPGA另一边,我将利用ADV7125 数模转换器(DAC),生成的信号将会通过VGA端口完成 R、G 、B过程。

来源:http://www.analog.com/media/en/technical-documentation/data-sheets/ADV7125.pdf

下一个问题:Spartan使用的是3.3V电压,而Amiga使用的是5V电压,所以需要转换电压即电平移位器,在FPGA和其设备之间。我将会利用TXS0108(8位)进行转换。

来源:http://www.ti.com/lit/ds/symlink/txs0108e.pdf

出现错误

我突然意识到Papilio,即FPGA开发板 I/O引脚无法处理其设备的信号,16+2引脚为 VGA DAC输出做准备。实际上,还有些引脚对这个项目没有用,我决定利用两个端口(16位)来处理总线通信,另外我不要同时处理数据以及地址数据。值得注意的是,在这里 FPGA的频率要比其设备频率高一些。通过获取一部分地址数据,即可获得完整的地址数据。

我在制作好几张电路图之后,开始利用 KiCad完成最终的项目,并将已设计好的文件上传至DirtyPCBs.com,等待了八周之后,发现没有回复信息,于是考虑是不是不支持其文件情况,于是开始解决,再次尝试,最后在2016年一月拿到了已经制作好的电路板。

顺便说一下,我在之前已经收到电路板上面一目了然,当然有一个简单的逻辑门电路出了点问题,我现在就利用电焊台(ERSA)吹焊我的芯片了。对于之前的错误,我确实犯了一个较大的错误在原来的电路板上面,OE 引脚与 GND连接出现了错误(3.3v),后来我对接线方式进行了修改(图中黄线部分),FPGA的引脚最高输出电平为3.3 V,但作者将载波部分弄错了,同时又曲解了多路复用器(两个或多个源(2的次方)到一单个信道)数据表、SEL引脚部分以及逻辑IC。更纠结的是74LS04芯片部分也没有测试明白。

在经历这些事情之后,作者开始做些什么来弥补这一切。作为调试该设备,需要一些工具,利用Verilog设计以及分析组合逻辑电路(该设备),以及记录640个时钟周期( FPGA),当然还需要注意嵌入式块RAM(BRAM)问题,并将它们看做是显示设备的基本支持条件。作者做了一个软件工具,大小是68k(汇编语言),专为Amiga计算机准备的-无限循环-地址$ e80000至 $dff180(背景颜色),作者利用软盘来运行程序,然后完成这个项目。请注意图片中DOE、READ、/UDS、 /AS模式以及 E7M(Amiga时钟频率7Mhz),画面显示延迟时间在6400ns或 6.4ms。下面那条线代表地址即A23-A1 ,A0 不存在,上下限( 68000)、/UDS 以及/LDS处于相反位置。

由于多路复用器和模拟开关的作用,所以看到地址信号才会这么有规律。你也许可以看到A9部分的问题,可能就是我的焊接问题(虚焊)。但至少可以反映出读写操作(6800),先不要注意A9 以及A17出现的问题,按照预期将会出现二进制地址111010000000000000000000(READ),后来也会出现地址0b110111111111000110000000(WRITE)。虽然出现了预期效果,但是噪音不断, Amiga几乎不识别我做的显卡,但是给我看到了一个希望。

后来我经历了很长时间来解决这个系统问题,但是我放弃了。于是回到之前的电路工作。

新改动

我的新策略是,找出电压转换问题,还有FPGA上面IO接口部分问题。当然我还需要一个焊台,以及练习吹焊技术。我在网上发现了Scarab Hardware的miniSpartan6+ FPGA,这个开发板的尺寸对我来说也很好,包括两个HDMI接口以及SD读卡器,甚至还有一个音频插口。但纠结的是这个开发板已经消失了,等到几个月后才搞到板子,即我将选择 Numato 实验室(Saturn)。

在新的电路图中,我没有添加更多的开关来控制信号,上面我利用了双向电平转换的3态输出的双位双电源转换收发器 (NXP 74LVC8T245),同时修正了 VGA电路。

我后来后买了Yihua 853D热风拆焊台,关于焊接技术可以参考此视频(自备梯子):点击我

当然你需要注意里面使用的温度,在里面使用了270度就解决了问题。

我设计的新版本里面的信号处理就更方便了,我利用数字输出模式将FPGA连接到显示器,这样就可以利用Verilog “锁定”设备的时钟周期了。

我利用自己的汇编程序(68k)记录鼠标X、Y轴运行信息(寄存器)同时转换显卡上面像素点信息,这样我就得到一个画图工具了。

现在主要的问题是调整设备的状态,所以需要了解RAM以及显卡像素信息-显卡的一些问题-Amiga计算机显存读写状态。作者表示并没有完成所有的工作,但给出了目前的工作原理。显示器上显示的画面是一个个的像素点构成的,而这些像素点的所有数据都是由显卡提供的,最大分辨率就是表示显卡输出给显示器,并能在显示器上描绘像素点的数量。显存SDRAM可以与CPU同步工作,无等待周期,减少数据传输延迟,作者表示用到的SDRAM内存的频率是133MHz,即DDR内存的频率是266MHz。

当然还要有VGA或DVI接口,即DVI接口中有检测脚 检测不到的时候 就会发送信号给显卡 表示DVI或者HDMI已经断开,频率60~75 MHz(1280×720 )。同时也意味着显示和读取速度还不一样。显存起的作用就是将GPU处理好的数据暂存在显存中供系统调用(因此我们可以访问目标数据),现在就需要将处理地址问题了,这就可以被看成一个队列问题,而需要做的就是将数据保存进去。

为了测试系统的稳定性,这里就需要用到一个软件工具“mon”(http://aminet.net/package/dev/moni/mon165),我可以在软盘启动,当然你可以在图片中看到被用于测试的16位图像即一座山的照片(rgb565),该图片加载到显卡(地址 $600000),如图

我在本地计算机显示的信息发现了错误(如图),同时也证明我的设计不是很完美的。其( Host read)不能放入之前的队列,所以需要立即处理数据。这个过程可以被看成是中断,如果需要从内存不同地方进行读取,然后加载,SDRAM不会继续工作,当然这个过程会很耗费时间。但目前整个过程已经出现了问题,我计划去解决这些问题,同时利用XRDY信号通过模式填充以及开关功能来解决。

这里就需要 Amiga计算机上面监控显卡的软件Picasso96 (另外一个可以参考CyberGraphX),软件内置“emulation.library”即绘图以及修复功能,同时基于传统的位平面图像,并修正像素点。当Commodore还有 Amiga计算机公司逐渐退出市场之后,其软件也不更新了。我详细了解了一下软件手册,然后我需要制作一个 .card文件,这些都是需要在 Amiga计算机系统环境下执行的文件,从过去检测的文件到其软件UAE模块,我了解到自己需要建立函数库。

FindCard() -主要目的检测显卡是否工作,检测方式 returned -1 (d0)。
InitCard()-重要函数,可初始化显卡状态,主要与显卡像素、分辨率等信息有关。详细信息:点击我
CalculateBytesPerRow()-即每隔一行去一行像素
CalculateMemory()-地址映射(A1-另外一个地址(作者没有注明)),但作者利用该函数从A1返回到D0
SetColorArray() –主要为外部设备显示的多种(例如256)彩色的共享提供了保证,以及建立8位色彩查阅表(CLUT),但作者没有用到这个函数
ResolvePixelClock() – 主要是控制像素时钟信号,对于场消隐以及行消隐必须要返回才能进行下一次的扫描( Return 0)。
GetPixelClock() -返回像素时钟信号,这里仅仅返回一个固定的值(60000000)。
SetPanning()-清屏
SetSpriteColor()-Return 0
SetDisplay() -开启/关闭显示(Return 0)
WaitVerticalSync() – 和屏幕刷新频率保持同步(return 1)
未知函数(作者没有注明(return 1/0))
SetSwitch() –推测是计算机桌面以及Picasso96软件之间的切换
setdac()
setclock()
getcompatibleformats()
getvsyncstate()
setmemorymode()
setwritemask()
setreadplane()
setclearmask()

当然这里还有一些问题,例如显卡像素填充率等问题。但目前看来一切都还好。现在开始我的驱动程序,但我不得不修改Picasso96监控程序(BoardType),而实际上我的程序(VA2000.card )并没有停止工作。我自己的Picasso96模块可能有些小问题,问题主要是编辑启用/禁用屏幕模式上面。我参照了原版的“”Board”菜单选项,进行修正,令我惊讶的是,我可以使用 800×600 分辨率(HiColor 模式),然后我在上面打开一个图片来测试一下,结果出现了花屏的现象

作者利用Picasso96软件里面的鼠标指针模拟工具,在图中可以看到清晰的红色轨迹,即鼠标跳帧时我自己的显卡应该是没有工作的。

在测试几个应用程序之后,我注意到屏幕显示仅有65535色,于是考虑到时Picasso96的问题,我用到了里面的一个“PC”模式(gggrrrrrbbbbbggg),于是就如图中所示

于是我开始在我的显卡驱动选项里面修改模式选项(RGB565)来解决这个问题,现在就可以在计算机里面使用800×600(High Color)看图片了

JPG图片效果

游戏展示

如果你对这个项目感兴趣或者想要做一个类似的显卡,作者给出了一些建议,显卡的噪音问题要及时处理,还有 XRDY信号问题,避免出现数据丢失现象。值得一提的是,分辨率以及像素填充的问题,如果时间还来得及最好做一个HDMI接口,或者显卡上面在做一个散热器。

了解更多

1.http://hamsterworks.co.nz/mediawiki/index.php/Simple_SDRAM_Controller

2.http://hamsterworks.co.nz/mediawiki/index.php/Dvid_test

3.http://amigadev.elowar.com/read/ADCD_2.1/Hardware_Manual_guide/node0000.html

4.http://kicad-pcb.org

5.https://github.com/endofexclusive/greta

*参考来源:github,饭团君投递,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
国乒夺冠后阵容或迎洗牌,3人稳坐主力,4人争抢剩余名额

国乒夺冠后阵容或迎洗牌,3人稳坐主力,4人争抢剩余名额

老曁科普
2026-05-11 11:09:13
别被孙颖莎的“大心脏”骗了!台湾解说惊呼背后,藏着3大真相

别被孙颖莎的“大心脏”骗了!台湾解说惊呼背后,藏着3大真相

格斗社
2026-04-03 20:24:03
沙特与科威特解除美军使用基地领空限制

沙特与科威特解除美军使用基地领空限制

参考消息
2026-05-10 15:11:05
黄健翔:裁判之间的对话应该无死角呈现给观众,避免浮想联翩

黄健翔:裁判之间的对话应该无死角呈现给观众,避免浮想联翩

懂球帝
2026-05-11 21:20:13
扎心!卖房400万扎根大理,开民宿一年仅赚13万

扎心!卖房400万扎根大理,开民宿一年仅赚13万

青眼财经
2026-05-11 23:21:23
广州黄埔知名楼盘陷“底商孤岛”困境!三年仅一家杂货铺

广州黄埔知名楼盘陷“底商孤岛”困境!三年仅一家杂货铺

坠入二次元的海洋
2026-05-11 16:21:55
武汉大学发声:极不认同“我妈有两个老公”广告内容,策划人系文学院校友

武汉大学发声:极不认同“我妈有两个老公”广告内容,策划人系文学院校友

超级数学建模
2026-05-10 22:51:28
瓦菲成功加入奥沙利文和特鲁姆普!伊朗一哥获得中国香港居留权!

瓦菲成功加入奥沙利文和特鲁姆普!伊朗一哥获得中国香港居留权!

世界体坛观察家
2026-05-11 17:50:32
战争主动权向乌克兰倾斜,转折点到来?

战争主动权向乌克兰倾斜,转折点到来?

山河路口
2026-05-11 22:54:24
终于,一位接地气的专家说了大实话:中国老百姓的负担太重了

终于,一位接地气的专家说了大实话:中国老百姓的负担太重了

巢客HOME
2026-04-28 05:25:03
罗马诺:曼联将从本周起正式收到那不勒斯买断霍伊伦的4400万欧;拉什福德:如果我是魔术师,我会留在巴萨

罗马诺:曼联将从本周起正式收到那不勒斯买断霍伊伦的4400万欧;拉什福德:如果我是魔术师,我会留在巴萨

MUREDS
2026-05-11 23:31:15
霸气!吴前妻子炮轰浙江:一直很Respect!少上我理解完全不上就离谱

霸气!吴前妻子炮轰浙江:一直很Respect!少上我理解完全不上就离谱

818体育
2026-05-11 22:26:13
意式颜值天花板,全新阿尔法・罗密欧Brera强势复刻 | 酷乐汽车

意式颜值天花板,全新阿尔法・罗密欧Brera强势复刻 | 酷乐汽车

CLauto酷乐汽车
2026-05-11 22:48:01
国产晶圆代工最大并购!中芯国际406亿收购中芯北方今日上会

国产晶圆代工最大并购!中芯国际406亿收购中芯北方今日上会

快科技
2026-05-11 15:20:05
马筱梅直播时儿子意外出镜,白皮肤肉嘟嘟的,筱梅满眼爱意藏不住

马筱梅直播时儿子意外出镜,白皮肤肉嘟嘟的,筱梅满眼爱意藏不住

日不西沉
2026-05-10 04:17:07
唐中宗复位后,将上官婉儿锁入密室6个时辰,后来她嘴角渗血走出

唐中宗复位后,将上官婉儿锁入密室6个时辰,后来她嘴角渗血走出

饭小妹说历史
2026-01-06 09:35:20
他信假释出狱:与前总理女儿搭车牌“4444”的车离开,“现在什么也记不起来”

他信假释出狱:与前总理女儿搭车牌“4444”的车离开,“现在什么也记不起来”

红星新闻
2026-05-11 15:09:20
OPPO母亲节活动文案引争议,武汉大学:极不认同文案价值倾向

OPPO母亲节活动文案引争议,武汉大学:极不认同文案价值倾向

界面新闻
2026-05-10 17:42:10
快观察 | 76岁他信获假释:王者归来,还是淡出舞台?

快观察 | 76岁他信获假释:王者归来,还是淡出舞台?

上观新闻
2026-05-11 19:28:13
日乒主帅不甘心!盛赞梁靖崑的同时,张本智和竟成他口中的背锅侠

日乒主帅不甘心!盛赞梁靖崑的同时,张本智和竟成他口中的背锅侠

十点街球体育
2026-05-11 11:41:37
2026-05-12 00:51:00
FreeBuf
FreeBuf
互联网安全新媒体
5548文章数 1757关注度
往期回顾 全部

头条要闻

母女二人一年用水量高达400多吨 警方发现背后隐情

头条要闻

母女二人一年用水量高达400多吨 警方发现背后隐情

体育要闻

梁靖崑:可能是最后一届了,想让大家记住这个我

娱乐要闻

“孕妇坠崖案”王暖暖称被霸凌协商解约

财经要闻

宗馥莉罢免销售负责人 部分业务将外包

科技要闻

黄仁勋:你们赶上了一代人一次的大机会

汽车要闻

吉利银河“TT”申报图曝光 电动尾翼+激光雷达

态度原创

亲子
游戏
数码
教育
公开课

亲子要闻

你们都喜欢哪些科目啊?

LOL第一支MSI战队出炉,TSW确定晋级季中赛!BLG已锁定淘汰赛名额

数码要闻

还原macOS安全性逻辑:为什么黑客越来越难攻破Mac?

教育要闻

特朗普访华对美国留学市场是利好吗?中国留美学生规模如何变化?

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版