Intel 或 Xilinx 的 FPGA 芯片,使用的是基于 SRAM 结构的查找表,而 SRAM的一大特性就是掉电数据会丢失。
当使用 JTAG 将 SRAM 配置文件(.sof)配置到 FPGA 芯片中后,这些数据是直接存储在 SRAM 结构的查找表中的,因此,一旦芯片掉电,则 SRAM 中的数据将丢失,再次上电后, SRAM 中将不再有有效的数据,这就是在使用 JTAG 下载 SOF 固件到 FPGA 中后,板子重新上电,则之前下载的固件又不在了的原因。
普通的 MCU 内部集成了片上程序存储器 ROM,都是FLASH存储器,FLASH存储器能够掉电保持数据,所以即使掉电后也能保存程序。
当系统设计完成并验证结束后, 准备量产时,希望 FPGA 能够永久保持电路固件,即让 FPGA 上电后其查找表中就被写入有效的数据。但是又不能总是每次系统上电后就用 JTAG 去下载一次程序固件。因此, FPGA 支持另外一种配置方式:
主动串行配置(AS)。
所谓主动串行配置,就是在 FPGA 芯片外部放置一片能够掉电数据不丢失的存储器,例如最常见的 EPCS、 QFLASH、并口 FLASH,来存储设计好的电路固件。
而 FPGA 芯片内部,则设计了一个专用的硬件电路,在芯片刚上电时就主动去读取存储器中的固件,并配置到 FPGA 芯片的每一个 SRAM 中去。
通过这样一种方式,可在不改变 FPGA 芯片 SRAM 工艺的查找表结构前提下, 使得芯片每次上电后,都能获得有效的配置数据。外部存储电路配置信息的芯片称之为配置芯片。
早前, 原 Altera 公司规定只能使用其自己发售的 EPCS 芯片作为外部配置器件,该 EPCS 芯片实质就是一个 SPI 接口的串行 FLASH 芯片, 只不过是经过了Altera 的严格测试,性能优异。而近些年,随着芯片生产工艺的不断发展,很多其他厂家生产的 SPI 接口的 FLASH 芯片也能够达到 EPCS 的技术标准,因此Altera 就放开了该限制,并指出可以使用其他芯片厂家生产的 SPI 接口的 FLASH芯片代替 EPCS。在芯路恒的 AC620 上就使用了一片华邦公司生产的 16Mbit 的串行 FLASH 芯片 W25Q16 来作为配置芯片。该芯片性能优异,性价比较高,完全能够达到 EPCS 的性能标准。
Cyclone 系列FPGA 固件烧写方案
当需要将设计好的配置固件固化到该器件中时,有两种方式。
第一种方式,也就是传统的方式,是使用专用 AS 接口(与 JTAG 10 针接口独立)来直接烧写该配置芯片,该种方式需要在电路板上设置一个独立的 AS 接口,占用 PCB 板面积较大,使用起来不方便。
第二种方式,也是现在流行的方式则是通过 JTAG 接口,经 FPGA 芯片间接烧写配置芯片。附第二种配置方式
附
JIC文件烧录步骤:
1.打开需要固化的FPGA设计工程;
2.点击File->convert programming Files…
3. 在弹出的窗口中, Programming file type 选择 JTAG Indirect Configuration File(.jic), Mode 选择 Active Serial, Configuration device 选择 EPCS16, File name 默认是 output_file.jic, 这里,需要养成良好的习惯,将其改成工程名字与顶层文件一样的名称。
4. 在 input files to convert 一栏中, 点击 Flash Loader 一项,在右侧点击 Add Device选项。
5. 点击 Add Device 选项后在弹出的选项卡中,选择正确的, 然后点击 OK, 如下图所示:
6. 点击 OK 后会回到先前的配置页面,此时再次鼠标点击 SOF Data, 再点击右侧的 Add File,
7. 在弹出的窗口中, 在 output files 文件夹下找到“.sof” 文件,点击 open,即可添加进来,
8. 点击 open 后,回到配置页面,点击 Generate 按钮, 如下图所示
9. 点击 Generate 按钮后, 则软件开始转换文件,转换成功后弹出成功提示窗口,
10. 点击 OK 即可, 然后 close 窗口。
11.打开 Quartus中的下载工具 programmer,将原有的 sof 文件移出,重新添加.jic 文件进来,勾选 programming/configuration, 如下图所示:
12.设置完成后,点击 Start( 前提是下载器与开发板已经正确连接), 则软件开始烧录固件, 整个烧录时间大约花费 20 秒钟左右。 烧录完成后, 此时固件已经保存在了配置芯片中,但是此刻 FPGA 还不能运行该固件, 因为当前的固件是存在配置芯片中的,并没有被配置到FPGA 中,因此需要让 FPGA 执行一次从配置芯片中主动配置固件的过程, 方法很简单,给板件断电后重新上电即可。断电再上电,固件依旧保持, 整个设计固化工作完成。