上次来崇明岛是两年前了,趁着假期过来转转,专挑没人来的田野,景色还是很好看滴。(今年考虑再去2024.4.16注)
扬州行
Tang Nano 9k实现NES(一)
有一天发现一篇文章,就是如何用fpga实现NES的,正好那一阵子沉迷Turing Complete这款游戏,顿时来了兴趣,结果一看,X打头品牌的FPGA几百大洋,于是搜啊搜,终于发现个国产FPGA厂商高云(Gowin),一个现成的开发版就100块钱,巨便宜,于是想着能不能用FPGA实现一个NES游戏机,找回童年的快乐。说实话,NES游戏机淘宝上一大串一大串,也不贵,不到一百块钱就能买到,带HDMI,但是作为正宗理工男,最大的乐趣不在能买到,而在于能自己做到。Tang Nano 9k提供了9千个左右的逻辑单元,两个锁相环,最关键是提供了一个hdmi接口,可以直接连显示器或者电视机,音频也可以走HDMI,不需要再外挂DAC,功放这些设备了,提供了32Mbit的PSRAM,资料也很齐全(链接),于是在2月份折腾了一个月的FPGA,简单实现了NES模拟器。在学习了各种NES在FPGA各种实现后,从刚开始屏幕上什么都没有到点亮了屏幕。目前还有以下问题:
- FPGA片上内存太小,目前支持16K游戏,且嵌在代码烧录进FPGA,后面考虑从SD卡读入或者COM口烧录
- 声音输出有点问题,在研究APU的原理
- 没有连接手柄,后面需要画接手柄的板子
- 现在的FPGA默认100MHz工作频率,对一百钱的FPGA太高,降到50MHz运行,但是不知道运行起来有没有问题
总体来说,国产FPGA还是很给力的,等到后面再完善完善把代码还有外围电路发出来。有了这个便宜的FPGA,目测还能实现FM发射、接收、示波器等等应用。
参考代码如下:
1、Brian Bennett做到NES在FPGA上的实现,这一版好处占用资源少,按照nes标准实现,后期也加入了对HDMI的支持,主要参考这个版本来实现(https://github.com/brianbennett/fpga_nes)
2、国人在Tang 20k实现的NES模拟器,但是需要DDR3内存支持,标准NES游戏卡是0x8000起内存地址,但是这个版本被调到0x0000,可以支持更大容量的游戏,功能更全,但是调试起来很麻烦,一个NES用DDR3内存感觉有点怪(https://github.com/nand2mario/nestang)
3、VGA转HDMI模块,这是目前能找到的比较好的支持声音输出的VGA转HDMI的RTL(https://github.com/hdl-util/hdmi)
4、仿真时将视频流转成bmp文件的rtl,这样就能确定能否模块正常工作(https://gitee.com/whik/vga_modelsim_bmp/)