随着社会经济的发展和物质生活水平的提高,人们对于精神世界的追求也越来越高。在传统意义上,人们往往用冲印出来的相片记录生活中的美好瞬间;然而伴随电子行业的发展,数码相机、高像素智能手机等大量电子产品大行其道,足以用数码形式将其取代。据统计,世界上 70% 以上的照片都是数码照片,年轻一族更喜欢以数码形式记录生活并分享在网络上。数码相框还可以将静态图片提升为动态相册,携带方便、储存时间长,既能满足人们的需求,也是一种节约、环保低碳的方案。
一、FPGA 工作原理
一个典型的 FPGA 由几个部分构成。首先是逻辑块(Logic Block):Altera 公司将其称为逻辑阵列块(LAB),Xilinx 公司将其称为可配置逻辑块(CLB);LAB 由称为 LE(Logic Element)的基本单元构成,CLB 由称为 LC(Logic Cell)的基本单元构成。这些就是 FPGA 的逻辑资源。

图 1 典型的 FPGA 内部结构
另外还有散落在各个逻辑块之间的内部连线,它们好比 PCB 板上的导线,将 FPGA 内部的各个逻辑相连接,起点和终点都是 IOB(I/O Block)。IOB 是 FPGA 的外部物理接口,类似 IC 的各引脚,但这里是根据用户需要可以任意定义的。如今的 FPGA 的 IOB 已经很强大,从基本的 LVTTL/LVCMOS 接口到 PCI/LVDS/RSDS 甚至各种各样的差分接口;FPGA 内部的 I/O 实际上是分组的,但每一组都可以灵活配置,包括改变上拉下拉电阻、调节驱动电流大小、兼容 5 V、3.3 V、2.5 V、1.8 V 甚至 1.5 V,可以满足不同的电气特性、不同的 I/O 接口物理特性以及外部硬件电路对输入输出信号的各种匹配要求。目前 I/O 可以达到的频率也越来越高,通过特定技术,数据读取速率甚至可以达到 2 Gbps——越来越多工程师喜欢 FPGA,强大的 I/O 特性也是原因之一。
I/O 兼容恐怕是大势所趋。还有一部分是 FPGA 内部的功能模块,是制造商根据实际需要放置在 FPGA 内部的:比如数字时钟管理模块即 DCM(Xilinx 公司的 FPGA 全都具有这种功能);比如锁相环(PLL),它需要一个外部时钟输入(晶振),经过内部处理(包括分频和倍频)可以提供在频率和相位上都比较稳定的一定范围内的时钟;还有不得不提的内部不占用逻辑资源的块 RAM。RAM 块可用作单口 RAM、双口 RAM、内容地址存储器以及 FIFO(first in first out)等常用存储器甚至 ROM、移位寄存器,这对于小量数据缓存很有用,强化了 FPGA 的应用性。在选择 FPGA 时,芯片内部块 RAM 的资源多少也是衡量的一个重要因素:单独块 RAM 的容量为 18 kbit、宽度为 18 bit、深度为 1024,可以根据实际需要改变其位宽和深度,但有两点限制——修改后块 RAM 的容量(位宽×深度)不能大于单片块 RAM 容量,而且位宽最大不能超过 36 bit;可以将多片块 RAM 连接起来形成容量更大的 RAM,此时只受限于芯片内块 RAM 的数量,而不再受上述两条原则约束,用 Quartus 操作起来很方便。还有底层内嵌功能单元,包括内嵌专用硬核如乘法器等,对数字信号的运算处理提供极大的便利。
二、SPI 接口控制电路

图 2 SPI 模式连接
该工程模块的 SPI 接口四条信号线分别定义为 spi_cs_n、spi_clk、spi_miso 和 spi_mosi。其中 spi_cs_n 是数据控制使能信号,当要对芯片进行操作时此信号低电平有效,也就是说在同一条主线上可以连接多个 SPI 器件;spi_clk 是 SPI 同步时钟信号,数据信号在该时钟的控制下进行逐位传输;spi_miso 和 spi_mosi 是主从机进行通信的数据信号,spi_miso 即主机的输入(或从机的输出),spi_mosi 即主机的输出(或从机的输入)。