FPGA开发中sof和elf文件的合并与格式转换

0. 本文目的

    有关sof和elf文件的合并方法非常多,但真正好用而且经得起推敲的寥寥无几。通过相关资料的学习以及工程实践,现将个人的操作方法及收获进行总结,希望能给正在学习FPGA的伙伴们提供一点点帮助!

    Nios工程开发包括两个环节,前期的内核硬件开发和后期的内核软件开发。前期开发环境为Quartus II 10.0和 SOPC builder,对应的下载文件为*.sof和*.pof。后期开发环境为Nios IDE10.0,对应下载文件为*.elf。项目调试时,先通过Quartus II 10.0将*.sof下载至FPGA的RAM中,完成FPGA 内核的硬件化,接着通过Nios IDE10.0 flash programmer将*.sof和*.elf一同烧写至flash中,最后将开发板重新上电,便完成了FPGA的程序固化。为了方便FPGA产品调试,可将*.sof和*.elf文件分步下载。但是为了提高生产效率,必须将它们合并成单个*.jic文件,再通过下载平台一次完成程序固化。

    本文首先使用Nios II 10.0sp1 Command Shell [gcc3]软件和sh脚本程序,实现了sof和elf的合并与转换,得到了一个hex的临时文件。接着,使用Quartus II 软件将hex文件转换成jic文件。最后,通过下载平台将jic文件下载至flash芯片中,进行功能验证。

1. 开发平台简介

开发软件:Quartus II 10.0,Nios II 10.0

电脑主机:win7_64

FPGA开发板:YJ-DZ(易津-USB驱动开发板)

下载器:USB Blaster

 

2. 具体操作方法

2.1 编写sh脚本程序

在win7下新建空记事本中,文件另存为yj.sh,在里面输入以下代码:

sof="EP4.sof"
elf="YJ_NiosTest.elf"
echo "sof>flash ..."; sof2flash --epcs --input=$sof --output=sof.flash --quiet
echo "elf>flash ..."; elf2flash --epcs --after=sof.flash --input=$elf --output=elf.flash
echo "cat flash ..."; cat  elf.flash >> sof.flash
echo "flash>hex ..."; nios2-elf-objcopy --input-target srec --output-target ihex sof.flash sof.hex
echo "del flash ..."; rm -f *.flash

代码注释:

代码第一行和第二行分别定义了两个变量sof和elf。

第三行和第四行分别完成了sof到flash文件、elf到flash文件的转换,--after=sof.flash应该表示等待sof.flash的生成。

第五行使用了cat命令,表示将elf.flash接在sof.flash后面,并覆盖原sof.flash文件,cat的具体用法详见参考(2)

第六行实现了flash到hex文件的转化,最后一行执行清除所有*.flash文件的命令。

2.2 使用Nios II 10.0sp1 Command Shell [gcc3]执行sh脚本文件

脚本文件存放于D盘的JIC目录下,打开Nios II 10.0sp1 Command Shell [gcc3],依次输入:

cd /cygdrive/d/JIC

./yj.sh

具体操作如下:

通过ls命令可以发现JIC文件下多了一个sof.hex文件,下一步将会将它转换为jic文件。

2.3 hex到jic文件的转换

打开Quartus II软件,单击File->Convert Programming File,具体设置如下:

(1)Programming amming file type:JTAG Indirect Configuration File(.jic)

(2)Configuration device:EPCS16

(3)JIC文件存放路径: D:/JIC/out1014.jic

(4)Flash Loader->Add Device,选择Cyclone Ⅳ EP4CE10,SOF Data一栏->Remove,添加hex文件。

具体操作如下:

点击Add Hex file,地址选择绝对地址,Hex file路径:D:/JIC/sof.hex

最后点击Generate,提示成功生成out1014.jic文件。

2.4 烧写jic文件

打开quartus II下载平台,单击Add File选择D:/JIC/out1014.jic,烧录选项Program/Configure、Verify 、Blank-Check均打上勾,最后点击Start!

 

3. 参考

(1)Altera FPGA带NiosII内核程序的JTAG下载方法总结_百度文库
https://wenku.baidu.com/view/5fd49863f18583d048645950.html

(2)linux cat 使用方法详解_aq1sw2_新浪博客
http://blog.sina.com.cn/s/blog_52f6ead0010127xm.html

(3)(2)Altera FPGA带NiosII内核程序的JTAG下载方法总结_百度文库
https://wenku.baidu.com/view/5fd49863f18583d048645950.html