NIOS II程序Flash固化

NIOS II 程序flash固化

这两天尝试着NIOS II程序固化,遇到很多问题,在网上搜索资料也没有一个统一的固化方法,各种尝试都已失败告终。本人结合自己的经验,将NIOS II 程序固化方法记录下来。分享发表希望以自己的成功案例给NIOS II开发者解决程序固化这方面的问题。
alteral官网关于NIOS II程序flash少些提供的手册描述支持两种程序固化方法。一种EPCS flash固化,一种CFI flash固化。本文分别对这两种固化方法进行描述。最后介绍将elf和sof合并成jic文件稍写至EPCS。本人的开发平台是quartus 14.1版本,NIOS的开发使用的是QSYS平台。
本人默认为读者熟悉quartus开发平台和NIOS II软核开发.

第一部分 EPCS flash固化

EPCS flash主要用于固化FPGA的配置文件,与FPGA以SPI总线进行数据交互,在NIOS II软核开发过程中,可以将FPGA的配置文件和NIOS II应用程序一起固化置EPCS flash。本人的片子使用的是EPCS64N。
具体固化步骤如下:
第一步:创建EPCS控制器
EPCS flash固化需要在搭建好NIOS软核后创建EPCS控制器,quartus 14.1的版本创建如图所示:
在这里插入图片描述

EPCS控制器创建

选择默认方式即可。生成EPCS控制器后,按照下图方式连接到NIOS软核和并设置中断号为0。具体连接方法如EPCS连接图所示:
在这里插入图片描述
EPCS连接图

注意:
1、网上很多资料需要将EPCS的SPI引脚迁出,并需要对quartus进行相关设置。本人认为应该是SOPC的开发方式。在quartus 14.1的版本中默认加载EPCS控制器时没有SPI控制引脚。因为alteral已经优化这部分设计,在工程编译间断会自动连接至SPI引脚,且不需要设置时序。且并有要求EPCS的地址必须从0开始。本人使用的是随机地址,并没有设置EPCS的地址为0。
2、在连线的时候需要把NIOS软核的jtag_debug_module_reset引脚和EPCS的复位引脚相连。不然会稍写失败报出如下图(稍写失败提示)故障。
3、必须要将EPCS的中断编号设置为0,以保证EPCS的中断级别为最高。不然会稍写失败报出如下图(稍写失败提示)故障。
在这里插入图片描述
稍写失败提示图

第二步:设置NIOS软核配置
EPCS与NIOS软核连接好后,给EPCS控制器分配地址空间。接着配置NIOS软核复位向量为EPCS控制器地址空间,配置异常向量空间为SDRAM,或者on_chip_ram地址空间。本文程序运行在FPGA的片外外设SDRAM里,所以配置异常向量空间为SDRAM地址空间。具体配置如NIOS配置图所示:
在这里插入图片描述
NIOS配置图

第三步:eclipse配置
在稍写之前先将.sof文件下载至FPGA,搭建好硬件坏境。打开IDE,编辑好程序后点击IDE菜单栏的NIOS II->flash programmer,打开NIOS II flash programmer窗口。点击file->new打开New Flash Programmer Settings File窗口。添加bsp文件,如bsp文件添加图所示:
在这里插入图片描述
bsp文件添加图

点击OK。进入New Flash Programmer Settings File窗口。点击connections…。打开Hardware Connections界面窗口(如Hardware Connections界面窗口图所示)。在Ignore mismatched system ID和Ignore mismatched system timestap前打钩。点击Reflash Connections按钮更新连接。出现黄色警告可以忽略。红色表示错误。 在这里插入图片描述

Hardware Connections界面窗口图
第四步,添加稍写文件 在NIOS II flash programmer窗口File Name窗口中先添加.sof文件,接着添加应用程序的.elf文件(稍写文件添加图所示)。最后点击start即可。成功会显示稍写进度(如稍写进度图所示)。

在这里插入图片描述

稍写文件添加图

在这里插入图片描述

稍写进度图

第二部分 CFI Flash程序固化

与EPCS flash稍写相比CFI Flash固化最大不同点在于FPGA配置文件和应用程序分开存放。EPCS将带有SPI接口的flash分成两个区域,分别存放FPGA配置文件和NIOS应用程序。而CFI Flash程序固化,则是将FPGA的配置文件存放在EPCS中,NIOS应用程序存放在带有CFI接口的Flash存储器中。而在quartus ii 14.1的版本中通过三态控制器连接外部flash。需要加普通的三态控制器接口改为CFI接口。最后连接到外部flash芯片引脚。下面分步介绍CFI Flash程序固化的过程。

第一步:CFI接口添加与时序配置
在Qsys界面中添加Generic Tri-State Controller(三态控制器)和Tri-State Conduit Bridge(三态流桥),连接时钟和复位信号连线。将三态控制器的uas连接至Avalon-MM Pipeline Bridge的m0信号线(本人项目使用Avalon管道桥)或者直接将uas连接到NIOS软核的数据线和指令线。将三态控制器的tcm信号线与三态流桥的tcs信号线连接在一起。到出三态流桥out信号,用于连接外部flash引脚。具体连接方式如三态控制器连接图所示,设置好三态控制器的相关信号以及时序。给三态控制器分配地址空间锁定改地址空间。本项目设置为从0地址开始的地址空间,并且锁定该地址空间。
在这里插入图片描述

三态控制器连接图

第二步:设置NIOS软核配置
点击NIOS组件,进入NIOS软核配置窗口。配置软核复位向量为三态控制器地址空间,配置异常向量空间为SDRAM,或者on_chip_ram的地址空间。本文程序运行在FPGA的片外外设SDRAM里,所以配置异常向量空间为SDRAM地址空间。具体配置如NIOS配置图所示: 在这里插入图片描述

NIOS配置图
备注:本项目将三态控制更名为mem,所以上图所看到复位向量为mem.uas。 第三步:eclipse配置 在稍写之前先将.sof文件下载至FPGA,搭建好硬件坏境。打开IDE,编辑好程序后点击IDE菜单栏的NIOS II->flash programmer,打开NIOS II flash programmer窗口。点击file->new打开New Flash Programmer Settings File窗口。添加bsp文件,如bsp文件添加图所示:

在这里插入图片描述

bsp文件添加图
点击OK。进入New Flash Programmer Settings File窗口。点击connections....。打开Hardware Connections界面窗口(如Hardware Connections界面窗口图所示)。在Ignore mismatched system ID和Ignore mismatched system timestap前打钩。点击Reflash Connections按钮更新连接。出现黄色警告可以忽略。红色表示错误。

在这里插入图片描述

Hardware Connections界面窗口图
第四步,添加稍写文件 在NIOS II flash programmer窗口File Name窗口中应用程序的.elf文件(稍写文件添加图所示)。最后点击start即可。成功会显示稍写进度(如稍写进度图所示)。

在这里插入图片描述

稍写文件添加图

在这里插入图片描述

稍写进度图
在稍写CFI flash过程中若是出现Error Code:8,则可能是硬件连线错误或者时序设置不对,需要检查时序配置和相关的引脚极性是否与电路匹配。或者检查硬件电路是否有问题。 以上两种稍写程序的方法都是先使用quartus ii稍写FPGA的配置文件,然后使用NIOS II EDS中提供的Flash Programmer工具来进行NIOS II程序固化。这种稍写方式对于开发者来说并没有什么不便。然而,当我们的产品已经设计完成并量产的时候,就需要将固件写到产品中。当产品数量较大或者项目代由其他不懂NIOS II程序flash稍写的同事固化时,稍写程序者需要在quatus II和eclipse工具之间切换。效率也就自然下去了。所以下面我将结合以上两种方法介绍第三种稍写方式。将SOF文件和NIOS II的ELF文件合并生成一个JIC文件。这样稍写跟固化FPGA配置文件一样,只需使用quartus II软件就可完成配置和NIOS II 程序的EPCS稍写了。下面介绍具体稍写方法。 1、将工程目录下的SOF拷贝到ELF生成的文夹目录下,使用eclipse工具打开NIOS软件工程和对应的板极支持包,这里命名为lte_new和lte_new_bsp(如下图软件工程图所示),然后选中lte_new,单机右键选择NIOS II->Nios II Command Shell,双击打开命令行输入界面。

在这里插入图片描述

软件工程图
1.将硬件镜像和软件镜像转换成flash文件,先后输入以下文件转换命令:

sof2flash --input=.sof --output=hwimage.flash --epcs --verbose
elf2flash --input=.elf --output=swimage.flash --epcs --after=hwimage.flash --verbose
每步转换完成后输入ls命令均可看到新生成的文件(hwimage.flash或者swimage.flash)。
2.把flash文件转换成hex文件。先后输入以下命令:
nios2-elf-objcopy -I srec -O ihex hwimage.flash hwimage.hex
nios2-elf-objcopy -I srec -O ihex swimage.flash swimage.hex
输入ls命令可以看到新生成的hex文件。
3.打开quartus II的Convert Programming File工具给FlashLoad添加 器件类型然后添加hex文件,先添加hwimage.hex再添加swimage.hex文件。添加文件时选择相对地址。如下hex文件添加图所示。

在这里插入图片描述

hex文件添加图所示

4.最后点击Gererate,即生成jic文件。再检查生成的.map文件有 hwimage.hex在起始地址0x0,swimage.hex文件在hwimage.hex结束后的地址。如下图map内容显示图所示:
在这里插入图片描述

map内容显示图
至此关于NIOS II程序的固化方法已经介绍完毕。以上是本人结合自己的工作经验亲身实践成功的例子。希望该文档能对NIOS II开发者在工作过程中起到一定指导作用。以此文敬献给NIOS II软核开发者。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值