sof文件和NIOS II的软件(elf)合并为jic文件以使用Quartus Programmer烧写
将Altera FPGA的sof文件和NIOS II的elf固件合并为一个jic文件以使用Quartus Programmer烧写
我们在学习和调试NIOS II工程的时候,一般都是先使用Quartus II软件中提供的Quartus Programmer来烧写FPGA配置文件(SOF),然后NIOS II EDS中提供的Flash Programmer工具来进行烧写NIOS II的。这对于开发者来说,并没有什么不便,反而因为这种方式的灵活,为开发带了了很大的便利。然而,当我们的产品已经设计完成并量产的时候,就需要将固件烧写到产品中。生产线上进行烧录时,总希望能够用最简单的方式实现。试想,如果生产线上在进行烧写时,还需要几个工具换来换去,等待很久,效率自然就下去了。因此这种Quartus Programmer+Flash Programmer的方式并不适合生产。
小梅哥在最近的工作中也遇到了这样的问题。我们新设计的一批开发板,在工厂生产完毕后,都要进行出厂测试。然而SMT厂家却并不熟悉我们的这种Quartus Programmer+Flash Programmer烧写方式。再说了,要使用这种方式还得安装Quartus Programmer和NIOS II EDS软件。厂家表示使用这种方式对他们来说有一定难度,而且效率也不高。所以我就根据Altera 官方网站上的一个帖子,进行了转换,将SOF文件和NIOS II的elf固件合并并生成了一个jic文件,这样,厂家就只需要使用Quartus Programmer来烧写这个jic文件就能实现同时烧写FPGA配置文件和NIOS II固件的功能了,简化步骤,节省时间。
从SOF文件和ELF文件得到JIC文件的原帖地址如下:
https://www.altera.com.cn/support/support-resources/knowledge-base/solutions/rd10132010_126.html
因为有经验不足的朋友反映在看了这个教程后还是不知道怎么操作,总是不成功,因此这里小梅哥使用我们芯航线FPGA的开发板,一步一步演示这个实现过程,将整个过程具体化。
先说明下我这个设计工程的结构:
- EPCS16:用来存储FPGA配置文件和NIOS的固件,本例中最终转换得到的JIC文件也是烧写到该器件中。
- 512K字节SRAM:作为NIOS II运存或者4.3寸TFT显存,这里作为TFT显存。(PS:使用SRAM作为运存,相较于使用SDRAM作为运存,NIOS II的性能会有较大的提升。)
- 128Mbit SDRAM:作为NIOS II运存或者4.3寸TFT显存,这里作为NIOS II运存。以运行较为复杂的程序或者GUI。
- 4.3寸TFT:用来显示文字/图片等内容。
- XPT2046触摸控制器:使用SPI接口,用来得到触摸屏信息,实现人机交互
- CH340 USB2TTL:将UART协议与USB协议进行互相转换。以实现调试的功能。
- 4bit LED:指示程序运行状态。
- 2X轻触按键:输入控制信息
介绍完了这个系统,接下来就可以介绍整个转换过程了:
1 sof2flash:
从一个.sof 文件生成一个flash文件:
sof2flash --input=<hwimage>.sof --output=hwimage.flash --epcs –verbose
首先我们打开我们的NIOS II软件工程和对应板级支持包,这里名为tft_touch和tft_touch_bsp
然后选中tft_touch,单击右键选择Nios II -> Nios II Command Shell
我们的Quartus II生产的sof文件名为" TFT_SRAM.sof",这个时候,如果我们直接输入
sof2flash --input= TFT_SRAM.sof --output=hwimage.flash --epcs –verbose
会提示找不到input file也就是找不到TFT_SRAM.sof文件。
这是因为该命令是在当前目录下寻找TFT_SRAM.sof文件,而我们的TFT_SRAM.sof文件在E:\easy_sopc\TFT_SRAM\prj\output_files目录下,因此当然无法找到该文件了。解决这个问题的方法有两种。
第一种,推荐方案。
因为很多不熟悉命令行的朋友在操作时速度慢而且容易出错,因此这里提供一种比较熟悉的方式。首先在windows中,将TFT_SRAM.sof文件从output_files文件夹中拷贝到tft_touch文件夹中:
然后回到命令行窗口再次执行
sof2flash --input= TFT_SRAM.sof --output=hwimage.flash --epcs –verbose命令
(提示:使用键盘上的向上方向键,可以快速切换到之前使用过的命令,这里在切换目录后,连按两次方向上键就应该能找到之前输入的sof2flash命令。)生成过程大约花费10秒钟。生成完成后的截图如下所示:
然后我们输入ls命令就能看到,确实生成了这样一个名为hwimage.flash的文件:
第二种方案:首先在shell中使用cd命令直接将目录切换到sof文件所在目录,也就是E:\easy_sopc\TFT_SRAM\prj\output_files。相应命令为(注意斜线方向):
cd e:/easy_sopc/TFT_SRAM/prj/output_files
然后再次执行sof2flash命令即可实现。生成完成后的截图如下所示:
然后我们输入ls命令就能看到,确实生成了这样一个名为hwimage.flash的文件:
一般推荐大家使用第一种方式,当然命令行高手除外。
2 elf2flash:
从一个,elf 生成一个flash文件:
elf2flash --input=<elf file>.elf --output=swimage.flash --epcs --after=hwimage.flash --verbose
因为推荐大家使用第一种方式操作,因此这里就按照第一种方式接着讲,相信有能力用命令行方式切换目录的朋友,也不会对其他操作存在问题。
这里我们就只需要直接输入elf2flash命令即可了,命令详细如下:
elf2flash --input=tft_touch.elf --output=swimage.flash --epcs --after=hwimage.flash –verbose
从命令中可以看到,第一步生成的hwimage.flash文件是作为了参数的一部分的,所以这里必须保证hwimage.flash在当前目录下。(第一步中使用推荐的方式,则能够自动保证这一点)。命令执行结果如下:
然后我们输入ls命令,可以看到,在当前文件夹下确实生成了一个名为swimage.flash的文件:
3 flash2hex:
转换.flash文件到.hex文件:直接输入以下命令(注意:altera官网中原帖这个地方命令有误,前后对应不上,原帖为nios2-e…… mysw.flash mysw.hex,应该讲mysw改为swimage):
nios2-elf-objcopy --input-target srec --output-target ihex swimage.flash swimage.hex
这个命令瞬间执行完成,我们ls下,就能看到当前文件夹下已经生成了一个swimage.hex的文件:
4 Convert Programming Files
在Quartus® II软件中,open File > Convert Programming Files > Set the programming file as JTAG Indirect Configuration File (.jic).
5 选择EPCS
在配置下拉菜单中选择合适大小的EPCS器件(见10步图)
6 命名jic
命名你的输出.jic 文件(见10步图)
7 Add Device
点击Flash Loader的下面,在右边选择Add Device (见10步图)
8 选择FPGA器件
从列表中选择你的FPGA器件(见10步图)
9 Add SOF
点击SOF Data,选择Add File,选择加.sof 文件(见10步图)
10 Add Hex data
点击Add Hex data,选择Relative addressing,选择上面生成的.hex 文件
11 Generate
然后点击Generate生成。生成完成后检查生成的 .map 文件(使用记事本打开)有Page_0在起始地址0x0,.hex文件在Page_0结束地址后的起始地址1
12 烧写
现在在Quartus II Programmer中,选择Add File,选择加.jic 文件。检查Program框,下一步.jic 文件,接着按Start即可。
13 女神镇楼
最后上一张测试图,女神镇楼(话说放这样一张图给客户,客户是不是会觉得特别开心呢):
如有更多问题,欢迎加入芯航线FPGA技术支持群:472607506
小梅哥
芯航线电子工作室
2016年1月30日星期六
sof文件和NIOS II的软件(elf)合并为jic文件以使用Quartus Programmer烧写的更多相关文章
- 【小梅哥SOPC学习笔记】sof与NIOS II的elf固件合并jic得到文件
sof与NIOS II的elf固件合并jic得到文件 注意,本方法已经有更加简便的方法,小梅哥提供相应的脚本文件,可以一键生成所需文件,脚本请前往芯航线FPGA技术支持群获取. 7.1 为什么需要将S ...
- 在WIN7系统下用Quartus ii 11.1 NIOS II 11.1 有时候会出现Nios II 的Run as hardware 中报错:Downloading ELF Process failed
nios工程在编译通过后RUN的过程中出现Error Running Nios II Project: ‘Downloading ELF Process failed’问题原因: 1.nios2 cp ...
- 每天进步一点点------Nios II 的Run as hardware 中报错:Downloading ELF Process failed
今天继续调试,又出现了新问题.在执行NIOS程序代码时,不能下载了:Pausing target processor: not responding. Resetting and trying aga ...
- 给NIOS II CPU增加看门狗定时器并使用
给NIOS II CPU增加看门狗定时器并使用 配置看门狗定时器: 设置计时溢出时间为1秒 计数器位宽为32位 勾选No Start/Stop control bits 勾选Fixed perio ...
- 给NIOS II CPU添加一颗澎湃的心——sysclk的使用
给NIOS II CPU添加一颗澎湃的心——系统时钟的使用 本实验介绍如何在Qsys中添加一个定时器作为NIOS II的心跳定时器,并在NIOS II中软件编程使用该定时器. 将上一个实验watchd ...
- DE1-SOC开发板上搭建NIOS II处理器运行UCOS II
DE1-SOC开发板上搭建NIOS II处理器运行UCOS II 今天在DE1-SOC的开发板上搭建NIOS II软核运行了UCOS II,整个开发过程比较繁琐,稍微有一步做的不对,就会导致整个过 ...
- 【小梅哥SOPC学习笔记】给NIOS II CPU增加看门狗定时器并使用
给NIOS II CPU增加看门狗定时器并使用 配置看门狗定时器: 1. 设置计时溢出时间为1秒 2. 计数器位宽为32位 3. 勾选No Start/Stop control bits 4. 勾选F ...
- 【小梅哥SOPC学习笔记】NIOS II处理器运行UC/OS II
SOPC开发流程之NIOS II 处理器运行 UC/OS II 这里以在芯航线FPGA学习套件的核心板上搭建 NIOS II 软核并运行 UCOS II操作系统为例介绍SOPC的开发流程. 第一步:建 ...
- FPGA回忆记事(一):基于Nios II的LED实验
实验一:基于Nios II的LED实验 一. 创建Quartus II工程 1.打开Quartus II环境.开始->程序->Altera->Quartus II 9.1. 2 ...
随机推荐
- [LintCode] Longest Increasing Continuous Subsequence 最长连续递增子序列
Give an integer array,find the longest increasing continuous subsequence in this array. An increasin ...
- Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds 解决方法
Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds. If the server requires ...
- python 数据类型基础
Python3 运算符 什么是运算符? 本章节主要说明Python的运算符.举个简单的例子 4 +5 = 9 . 例子中,4 和 5 被称为操作数,"+" 称为运算符. 1.算术运 ...
- svn学习笔记(2)操作----还原,重命名,冲突处理,权限配置等
1.查看某个文件的所有版本信息 2.版本还原,还原到之前的某一个版本 通过show log查看 查看某个文件的所有版本后,可以在这些版本之间自由切换 3.文件改名 文件改名字给我们一个教训: 如:in ...
- mysqld诡异crash
突然收到告警短信,提示有一组服务器MHA已经切换,登录服务器后查看错误日志如下(其中相关insert语句已经处理): mysql版本:5.5.24 :: InnoDB: Assertion failu ...
- sql 数据库 初级 个人学习总结(一)
数据库个人总结(初级)1.增删改查 insert into 表名 values ('条件','条件2') delete from 表名 where 条件 update 表名 set=条件值 where ...
- 关于WPF中ItemsControl系列控件中Item不能继承父级的DataContext的解决办法
WPF中所有的集合类控件,子项都不能继承父级的DataContext,需要手动将绑定的数据源指向到父级控件才可以. <DataGridTemplateColumn Header="操作 ...
- html本地服务器
html本地服务器 http://files.cnblogs.com/files/douxuyao/Aws.rar
- Android课程---手机尺寸相关的概念 +尺寸单位+关于颜色
手机的尺寸: 屏幕对角线的长度,单位为英寸(2.54cm) 手机的分辨率: 屏幕能显示的像素的数量, 一般用在长方向上数量*宽方向上数量来表达 手机的像素密度: pixels per inch,也称P ...
- php使用 memcache 来存储 session 方法总结
设置session用memcache来存储 方法I: 在 php.ini 中全局设置 session.save_handler = memcache session.save_path = " ...