1.前言
研究生课程要求设计一个电子相框,使用FPGA驱动VGA显示器并能使用无线传输的方式完成图像的传输并将图像缓存后显示到VGA显示器上,我根据该基础需求上,通过更换LATTICE的FPGA以及增加了一些独特的定制化功能,在降低成本的同时获得了更多有意思的小功能,包括能够根据不同状态显示不同提示图像,显示当前环境温湿度,显示接收图像时的进度条,最重要的是将经典红白机NES的6502CPU移植上去,能够运行所有红白机游戏了,最终得到了一个兼具娱乐和生活使用方式的小作品,我给他取名叫Nano_Viewer,下面就是关于Nano_Viewer的设计步骤和最终成品介绍。
2.开发平台
本次所设计的作品Nano Viewer是基于现场可编程门阵列(FPGA)完成,至于什么是FPGA以及其工作原理在此不过多介绍,在芯片型号的选择上,使用lattice公司的ECP3系列,型号为LFE3-35EA,具有35K逻辑资源和1.7Mbit的BRAM,对于本次设计完全够用。至于为什么不选择Intel家的Cyclone IV系列或者Xilinx加的Artix-7系列,主要还是由于芯片价格差距实在过大,同资源情况下,如今lattice型号价格只有I或X家的1/3,可以说是性价比很高了。
开发所使用的EDA工具为lattice家的lattice Diamond软件,界面相对于Vivado和Quartus看起来有些复古,如图1所示,不过功能都大差不差,按照正常的开发流程走即可。
3.硬件设计
本次Nano Viewer作品的硬件框图如图2所示,由于想要实现的是一个便携的显示终端,所以就加入了电池和相应的充放电管理电路,电源管理电路,Lattice ECP3 FPGA芯片,还有温湿度检测传感DHT11,蓝牙收发模块以及用于缓存的SRAM芯片以及VGA接口。
使用Altium软件按照设计要求设计电路原理图以及PCB板,设计结果如图3和所示。
看看3D显示,效果还不错。
之后就是打板回来进行焊接与调试。
最终得到的硬件成品实物如下图所示。
4.程序设计
使用Verilog语言和VHDL语言设计本次的Nano Viewer,其中VHDL语言为6502红白机CPU实现,剩余部分使用Verilog完成。Nano Viewer的整体系统结构如下图所示。
其主要工作方式就是由蓝牙模块接收图像数据和控制数据并根据不同控制命令跳转到不同的状态,同时各外部接口负责相应的协议实现。具体系统的实现细节可以参考源码,因为确实内容比较多不太好介绍。
使用lattice diamond软件对设计内容进行综合和实现,得到的RTL视图如下图所示。将生成的bit流文件烧录到FPGA当中,完成设计。
5.功能测试
使用安卓手机端调试APP对Nano Viewer进行调试。
将Nano Viewer连接好电池,同时按下开机按键,此时显示当前设备电量
将Nano Viewer连接至VGA接口线缆,显示器点亮进入初始界面,此时提示无图像可供显示,可上传显示图像或进入游戏模式。同时显示当前温湿度信息。
使用APP上传图像,显示为图像正在上传状态,并显示接收进度条如下图所示。
接收完成后显示图像,同时也会显示温湿度信息。
在显示状态下还可以重新发送图像以更换显示图片。
同时在准备界面或者图像显示界面,可发送指令进入游戏模式,默认内部存放的游戏为90坦克大战,在游戏模式内可以使用蓝牙界面控制游戏角色。
6.总结
基本功能都已经实现,后续可以考虑做一个更加精美的安卓端APP来实现更多功能。
就像下面这种