原文
将HW和SW合成一个JIC文件
需要的文件:sof,elf;
step1:先将硬件映像和软件映像转换成flash文件
打开nios II command shell,输入:
sof2flash –input=hello_cy3.sof –output=hwimage.flash –epcs –verbose
elf2flash –input=hello_world_0.elf –output=swimage.flash –epcs –after=hwimage.flash –verbose
step2: 把flash文件转化成hex文件
nios2-elf-objcopy -I srec -O ihex hwimage.flash hwimage.hex
nios2-elf-objcopy -I srec -O ihex swimage.flash swimage.hex
step3:打开Quartus® II Convert Programming File 工具,给Flash Loader添加器件类型,然后添加第2步转化出来的hex文件。添加hex文件时,选中“绝对地址”选项。
点击Gererate,即生成了jic文件,再检查生成的 .map 文件有hwimage.hex在起始地址0x0,swimage.hex文件在hwimage.hex结束地址后的起始地址1
hwsw_file.map显示了地址信息
复制代码
BLOCK START ADDRESS END ADDRESS
hwimage.hex 0x00000000 0x00030FA5
swimage.hex 0x00030FA6 0x0003131D
Note: All the addresses in this file are byte addresses
复制代码
当然了,也可以只转换swimage,hwimage直接用sof就可以了,不过,这个我没试,这里有说明
http://www.altera.com.cn/support/kdb/solutions/rd10132010_126.html
最后,下载JIC文件,哈哈,NIOS综于跑起来了。
2、将HW和SW合成一个SOF文件
其实在quartus中,也能像Xilinx 的EDK那样将hw和sw合成同一个bitstream。但是SW必须是在片内运行的。
我们知道,NIOS II是不需要自已写bootloader的,NIOS II帮你写好了,但是只能从指定的FLASH Loader,但如果你要从其它的存储器Loader,比如说SD卡,那么就要自已写bootloader了,这样可以将bootloader和sof合成一个文件。
这个方法,无需在SOPC Builder内添加epcs_controller模块;
将CPU的reset地址和vector设置在onchip_mem;
generate之后,无需立即重新编译Quartus 工程。
在Nios II IDE中将system library的的program memary(.text)等,都设为onchip_mem;如下图:
再重新build project。
这个时候Nios II IDE自动创建onchip_memory初始化文件onchip_memory.hex,保存在与SOPC Builder系统文件(.ptf)同一个文件夹下。
然后重新编译Quartus 工程,则自动将onchip_memory.hex内容包含在sof和pof文件中。
然后在 Quartus Programmer中用AS模式下载POF就可以了。再重新上电,发现NIOS 就跑起来了。
结语:
NIOS 出问题后不是很好解决,有些问题很难通过console输出的信息来判定问题所在,再加上编译的时间较长,这也增加了测试的时间。当然咯,有些是软件bug,但也有些是时序问题,比如说你对sopc builder里面做修改后,综合出来的结果会不一样,warring也不一样,例如,我在quartus 10.0里nios在onchip_memory能跑到100M,SDRAM 140M,但改成在sdram里运行后,RUN时,提示verifly错误,NIOS不能运行。改成90M 100M就可以了。所以说,掌握对warring的理解,和新的解决方法也是很不错的,必竟时间是有限的,只要目的达到了,就OK了,你说呢。
参考资料:
如何将Nios II的硬件映像和软件映像合并生成一个jic文件