Altera FPGA程序固化

转载自CSDN博客:
https://blog.csdn.net/yuan_hust/article/details/75269111

Altera FPGA程序固化

对MCU进行烧写程序,程序固件被写入MCU的片上存储器ROM中,现代大部分MCU的片上存储器ROM为FLASH存储器,可以实现掉电保持数据,所以可以掉电程序不丢失。
而对于Altera和Xilinx两家的FPGA芯片而言,FPGA芯片是基于SRAM的查找表(LUT),所以当将.sof下载到FPGA芯片中后,这些数据直接存储在SRAM的查找表中,一旦掉电即会丢失数据。解决方案是在FPGA芯片外部放置一片能够掉电不丢失数据的存储器,如常见的EPCS、QFLASH等,在FPGA内部设计一个专用的硬件电路,在芯片刚上电时就主动去读取该存储器中的固件,并配置到FPGA芯片中。
实验环境
Altera DE0-Nano开发板, FPGA型号:EP4CE22F17C6N
不同实验环境只需要更改对应芯片型号即可。

1. 纯硬件(Verilog)固化

(1)打开要固化的工程,编译得到.sof文件。

(2)在Quartus软件中点击File->Convert Programming Files。

(3)在弹出的窗口中,进行下列设置:
1458798-79187bada4f5c453.png
1458798-01af4651480ca24f.png
(注:此选项取决于开发板上的Flash类型,阿群测试发现手上的开发板可选EPCS16或4,而不能选64)
  • Programming file type选择JTAG Indirect Configuration File(.jic);
  • Mode选择Active Serial;
  • Configuration device选择EPCS16(或EPCS4经测试也能用。对于DE0-Nano开发板,则应选EPCS64),File name改为工程的名字或者保持默认output_files/output_file.jic

(4)在Input files to convert一栏中,点击Flash Loader一项,在右侧点击Add Device选项。选择Cyclone IV EEP4CE22
(注:这里我选的是EP4CE10系列FPGA如图

1458798-ba71a7abcddc2206.png
),点击OK。

(5)点击SOF Data一项,在右侧点击Add File,找到本工程目录下编译生成的.sof文件,点击Open。

扫描二维码关注公众号,回复: 5199224 查看本文章

(6)选中添加的.sof文件,点击Properties,选中Compression,点击OK。
1458798-93cfa2edb92c666c.png

1458798-666703cc25388e85.png
打上对勾,对FPGA程序文件启用压缩存储

(7)点击Generate,
1458798-e2912e0bce32e488.png

转换成功后会弹出下图所示窗口:


1458798-696ce0b56dc36eb3.png
转换成功

(8)在下载之前先到Tools->options下勾选Iniate Confinguration after programming

否则下载完需要掉电才能应用新配置。
1458798-cdfb15d6b3c68459

(9)打开Programmer,下载刚生成的.jic文件。
(注:

1458798-718a90a8039c196a.png
此步骤从Programmer烧写工具窗口的 File菜单选择 New File,新建一个选项

2.硬件(Verilog)+软件(Nios II软核)固化

(1)打开要固化的工程,编译的到.sof文件,打开相应的Nios II软件工程,编译生成.elf文件。为操作方便,将.sof文件复制到Nios II工程目录下。
(2)在Eclipse中,右键点击Nios II工程,选中Nios II->Nios II Commend Shell进入命令系统。当前命令所在文件夹为Nios II工程文件夹下。
(3)将编译得到的.sof文件转换为.flash文件,用到的命令为:
sof2flash --input=<hwimage>.sof --output=hwimage.flash --epcs --verbose
用编译得到的.sof文件名代替<hwinage>.sof
输出.flash文件的文件名即为hwimage.flash
成功转换显示如下图所示:


1458798-68d86ba0e7476f79.png

(4)将编译得到的.elf文件转换为.flash文件,用到的命令为:
elf2flash --input=<elf file>.elf --output=swimage.flash --epcs --after=hwimage.flash --verbose
用编译得到的.elf文件名代替<elf file>.elf
输出.flash文件的文件名即为swimage.flash
成功转换显示如下图所示:


1458798-dc6bc294f5f60232.png

(5) 将两个.flash文件分别转换为.hex文件,用到的命令为:
nios2-elf-objcopy -I srec -O ihex hwimage.flash hwimage.hex
nios2-elf-objcopy -I srec -O ihex swimage.flash swimage.hex
输出.hex文件名分别为:hwimage.hex、swimage.hex。
(6)在Quartus软件中点击File->Convert Programming Files。
(7)在弹出的窗口中,进行下列设置:Programming file type选择JTAG Indirect Configuration File(.jic),Mode选择Active Serial,Configuration device选择EPCS64,File name改为工程的名字或者保持默认。
(8)在Input files to convert一栏中,点击Flash Loader一项,在右侧点击Add Device。依次选择Cyclone IV E EP4CE22,点击OK。
(9)点击SOF Data一项,在右侧点击Remove。
(10)在右侧点击Add Hex Data,选择Relative addressing,依次添加hwimage.hex和swimage.hex。
(11)点击Generate,转换成功后会弹出下图所示窗口:


1458798-aac1cd1c2a4ef6c1.png

(12)检查生成的 .map 文件有hwimage.hex在起始地址0x0,swimage.hex文件在hwimage.hex结束地址后的起始地址+1
(13)打开Programmer,下载刚生成的.jic文件。


本文转载自CSDN,此处经过修改添加一些截图
原作者:yuan_hust
原文网址:
https://blog.csdn.net/yuan_hust/article/details/75269111


参考2: https://blog.csdn.net/GOGOmusic/article/details/53914312

猜你喜欢

转载自blog.csdn.net/weixin_34352005/article/details/87292910