2.2.2 ATmega64 存储空间的扩展
ATmega64 的寻址空间为 64 KB,利用 ATmega64 自身的寻址系统,只能访问 0x0000~0xFFFF 的地址空间。显然,这对于存储和加载大容量 FPGA 的配置数据是远远不够的。以 Xilinx 公司的 Spartan3 系列 FPGA 为例,其配置数据所需的存储空间如表 2 所列。
表 2 Spartan3 系列 FPGA 配置文件大小
以 XC3S4000 型 FPGA 为例,它的配置文件所需的存储空间约为 1.35 MB,已远远超出了 ATmega64 单片机的寻址空间。因此,为了能够利用 ATmega64 单片机来实现对 FPGA 配置数据的读写,必须对其寻址空间进行扩展。扩展的硬件连接框图如图 2 中的单片机与 Flash 的连接部分所示。
本设计中是使用通用 I/O 来扩展 ATmega64 单片机的寻址空间的。ATmega64 单片机的总寻址空间为 64 KB,但片内 4 KB 的 SRAM 及各种寄存器占用了前面的部分寻址空间,故其片外存储器寻址空间是 0x1100~0xFFFF。因此将 Flash 的低 15 位地址直接接到 ATmega64 单片机的低 15 位地址总线上,其余 6 位高位地址用单片机的通用 I/O 进行选择。寻址时单片机的专用地址口只输出 0x8000~0xFFFF 的地址数据,与通用 I/O 输出的地址组合后给出 Flash 的读写地址。
通过以上对 ATmega64 单片机寻址空间的扩展方法,可以实现 ATmega64 单片机对合适的 Flash 存储器的寻址操作,从而解决了大容量 FPGA 配置数据的存储和读取问题。
2.2.3 用 ATmega64 实现 FPGA 的 SELECTMAP 加载
Xilinx 公司的 Spartan3 系列 FPGA 加载方式分为 5 种: Master Serial、Slave Serial、Master Parallel、Slave Parallel、JTAG。
按照 FPGA 是否控制加载过程,加载方式可分为 Master 方式和 Slave 方式;按照加载数据时的数据位宽,可分为 Serial 方式和 Parallel 方式。用于加载的引脚主要有: PROG_B,CCLK,RDWR_B,DONE,INIT_B,CS_B,BUSY,D[0~7],M[0~2],HSWAP 和 JTAG 接口(TDI、 TMS、TCK、TDO)。加载过程大体分为 3 个步骤:配置的建立、配置数据的加载和加载完成。
SELECTMAP 即 Slave Parallel 方式,是由外部控制器控制 FPGA 的加载过程,并以 8 位数据的形式向 FPGA 写入加载数据的加载方法。图 2 中 FPGA 与 ATmega64 的连接部分为 ATmega64 单片机采用 SELECTMAP 方式对 FPGA 进行加载的硬件连接框图,具体实现过程如下:
ATmega64 通过将 FPGA 的 PROG_B、CS_B 和 RDWR_B 引脚置低来开启加载过程,FPGA 在 PROG_B 置低后开始清除内部配置 RAM,并将 INIT_B 脚置低。PROG_B 重新置 1 后,在 INIT_B 由低变高的上升沿,FPGA 采样 M[0~2]引脚获取配置方式信息。 ATmega64 监视 FPGA 的 INIT_B 脚,当 INIT_B 脚由低变高时,说明 FPGA 已经完成了内部配置 RAM 的清除工作,并准备好接收配置数据。在 ATmega64 给出的 CCLK 配置时钟的上升沿,配置数据 D[0~7]写入配置 RAM。当 FPGA 接收完所有的配置数据后,DONE 引脚被 FPGA 置为高电平。ATmega64 可以通过监视 DONE 引脚来判断 FPGA 是否加载完成。对于 Spartan3 系列的 FPGA,如果配置 FPGA 的 CCLK 的频率高于 50 MHz,则外部控制器还需要监视 FPGA 的 BUSY 引脚。当 BUSY 脚为高时,说明 FPGA 还未完成上一个配置数据的处理,此时外部控制器需要继续保持上一个配置数据在 D[0~7]引脚,直至 BUSY 引脚回到低电平。对于本设计的应用,ATmega64 给出的配置时钟频率远低于 50 MHz,不必考虑 BUSY 引脚的控制作用。