【小梅哥SOPC学习笔记】sof与NIOS II的elf固件合并jic得到文件

摘要:
Sof和NIOSII elf固件被合并到jic文件中。请注意,此方法有一个更简单的方法。肖美歌提供了相应的脚本文件,可以一键生成所需的文件。请前往核心路线FPGA技术支持小组获取脚本。所以我根据Altera官网上的一篇帖子进行了转换,将SOF文件和NIOSII的elf固件合并,生成了一个jic文件。这样,制造商只需使用Quartus编程器来烧录jic文件即可实现同时烧录FPGA配置文件和NIOSII固件的功能,简化了步骤,节省了时间。

sof与NIOS II的elf固件合并jic得到文件

注意,本方法已经有更加简便的方法,小梅哥提供相应的脚本文件,可以一键生成所需文件,脚本请前往芯航线FPGA技术支持群获取。

7.1 为什么需要将Sof与elf合并得到jic文件

我们在学习和调试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

7.2 本章示例介绍

因为有经验不足的朋友反映在看了这个教程后还是不知道怎么操作,总是不成功,因此这里小梅哥使用我们芯航线FPGA的开发板,一步一步演示这个实现过程,将整个过程具体化。

先说明下我这个设计工程的结构:

图片0

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轻触按键:输入控制信息

介绍完了这个系统,接下来就可以介绍整个转换过程了:

7.3 详细转换步骤

7.3.1 sof2flash:

从一个.sof 文件生成一个flash文件:

sof2flash --input=<hwimage>.sof --output=hwimage.flash --epcs –verbose

首先我们打开我们的NIOS II软件工程和对应板级支持包,这里名为tft_touch和tft_touch_bsp

图片1

然后选中tft_touch,单击右键选择Nios II -> Nios II Command Shell

图片2-1

图片3

我们的Quartus II生产的sof文件名为” TFT_SRAM.sof”,这个时候,如果我们直接输入

sof2flash --input= TFT_SRAM.sof --output=hwimage.flash --epcs –verbose

会提示找不到input file也就是找不到TFT_SRAM.sof文件。

图片4

这是因为该命令是在当前目录下寻找TFT_SRAM.sof文件,而我们的TFT_SRAM.sof文件在E:easy_sopcTFT_SRAMprjoutput_files目录下,因此当然无法找到该文件了。解决这个问题的方法有两种。

第一种,推荐方案。

因为很多不熟悉命令行的朋友在操作时速度慢而且容易出错,因此这里提供一种比较熟悉的方式。首先在windows中,将TFT_SRAM.sof文件从output_files文件夹中拷贝到tft_touch文件夹中:

图片6

然后回到命令行窗口再次执行

sof2flash --input= TFT_SRAM.sof --output=hwimage.flash --epcs –verbose命令

(提示:使用键盘上的向上方向键,可以快速切换到之前使用过的命令,这里在切换目录后,连按两次方向上键就应该能找到之前输入的sof2flash命令。)生成过程大约花费10秒钟。生成完成后的截图如下所示:

图片7

然后我们输入ls命令就能看到,确实生成了这样一个名为hwimage.flash的文件:

图片8

第二种方案:首先在shell中使用cd命令直接将目录切换到sof文件所在目录,也就是E:easy_sopcTFT_SRAMprjoutput_files。相应命令为(注意斜线方向):

cd e:/easy_sopc/TFT_SRAM/prj/output_files

图片9

然后再次执行sof2flash命令即可实现。生成完成后的截图如下所示:

图片10

然后我们输入ls命令就能看到,确实生成了这样一个名为hwimage.flash的文件:

图片11

一般推荐大家使用第一种方式,当然命令行高手除外。

7.3.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在当前目录下。(第一步中使用推荐的方式,则能够自动保证这一点)。命令执行结果如下:

图片12

然后我们输入ls命令,可以看到,在当前文件夹下确实生成了一个名为swimage.flash的文件:

图片13

7.3.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的文件:

图片14

7.3.4 Convert Programming Files

在Quartus® II软件中,open File > Convert Programming Files > Set the programming file as JTAG Indirect Configuration File (.jic).

图片15

7.3.5 选择EPCS

在配置下拉菜单中选择合适大小的EPCS器件(见10步图)

7.3.6 命名jic

命名你的输出.jic 文件(见10步图)

7.3.7 Add Device

点击Flash Loader的下面,在右边选择Add Device (见10步图)

7.3.8 选择FPGA器件

从列表中选择你的FPGA器件(见10步图)

7.3.9 Add SOF

点击SOF Data,选择Add File,选择加.sof 文件(见10步图)

7.3.10 Add Hex data

点击Add Hex data,选择Relative addressing,选择上面生成的.hex 文件

图片16

图片17

7.3.11 Generate

然后点击Generate生成。生成完成后检查生成的 .map 文件(使用记事本打开)有Page_0在起始地址0x0,.hex文件在Page_0结束地址后的起始地址1

图片18

图片19

7.3.12 烧写

现在在Quartus II Programmer中,选择Add File,选择加.jic 文件。检查Program框,下一步.jic 文件,接着按Start即可。

7.3.13 测试效果

最后上一张测试图,女神镇楼(话说放这样一张图给客户,客户是不是会觉得特别开心呢):

图片20

图片21

 

如有更多问题,欢迎加入芯航线 FPGA 技术支持群交流学习:一群 472607506(已满)  二群  615381411

小梅哥

芯航线电子工作室

免责声明:文章转载自《【小梅哥SOPC学习笔记】sof与NIOS II的elf固件合并jic得到文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ffmpeg jpeg图片播放失败之问题排查【GPU编解码】GPU硬解码---DXVA (转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

apicloud 第一篇

最近公司需要开发一款app,说实话,之前也只是对Android有过一部分的了解,ios基本上都毛都不知道,所以作为小公司的我们经过商议决定使用apicloud,虽然用户体验不如原生的好,但谁叫我们穷,没钱招人呢,哈哈 这里就针对在使用apicloud开发过程中遇到的问题与相应的解决进行记录和与我相同的小伙伴们一起成长。 到apicloud官网下载相应的开发...

神舟K650c i7(W350STQ)上成功装好Mac OS X 10.9,兼谈如何安装WinXP、7、8.1、OSX、Ubuntu五系统(Chameleon、MBR)

作者:zyl910   参考教程——http://bbs.pcbeta.com/viewthread-1432534-1-4.html笔记本SNB和IVY平台Win7/Win8/Win8.1安装OS X Mavericks懒人版通用教程   根据该文的操作步骤,顺利时略写,遇到问题或需要补充时才详细叙述。   教程贴外所用的软件、驱动——http://pa...

利用 Charles Proxy 下载旧版本 iOS App

一、软件准备 1、旧版本 iTunes1.IPSW Downloads:https://ipsw.me/2.百度网盘链接:https://pan.baidu.com/s/11kdHbhqP_6wvcMWDa3HZNg 提取码:hj81 2、抓包工具 Charles Proxy1.Charles官网链接:https://www.charlesproxy.co...

博客文章列表

总体分为翻译类编程类应用类(占大多数)翻译类标题格式tra-openpgptra-sqlitetra-bash工具类标题格式win-client-putty,Bitvisewin-client-VNCViewerwin-client-tortoiseSVNwin-client-toad,navicat服务类标题格式分守护类与内核类守护类分网络类与系统类,即协...

Django命名空间app_name和namespace

前言: django命名空间解决什么问题? 在多个app之间,有可能产生同名的url,这个时候避免反转url的时候混淆,可以使用应用命名空间做区分。应用命名空间使用。在应用url中定义 app_name; 一个app,可以创建多个url映射到一个app中,所以就会产生一个问题,在做反转的时候,如果不使用命名空间,就会混淆,为了避免这个问题。我们可以使用实...

无法创建文件夹或文件问题的解决的方法

   问题现象:我们的软件执行在Windows server 2003系统上,软件是一个接受文件软件,将接受的文件存于一个目录下,当执行到一定的时候,大概目录下有10w个文件的时候,就弹出“无法创建目录或文件”对话框,这是是我们catch到的异常。 问题原因: 可能有两种: 一、我们是不是使用了Windows server 的磁盘限额功能,限制了每一个用...