NIOS II使用经验

1.hello world 试验后做led实验,在QSYS内修改了nios 内核,进入软件环境nios ii SBT Eclipse,bulid project时三个报错,其中一个是Description Resource Path Location Type make: *** [public.mk] Error 1 hello_...,网上说右键bsp文件夹,nios> generating bsp可以解决。仅执行这个操作,还会留下一个,应先将bsp文件夹(或者两个文件夹都)右键clean project,然后nios> generating bsp,然后再build project,就没有报错了,编译成功。

2.qsys 内搭建片上系统时,nios的instruction master一般情况下只要连接到内存类组件(on-chip ram ,ddr ,flash等)的slave端口。其他的slave端口只需连接nios的data master即可。

3.qsys改动,重新generate后,对应的软件工程eclipse里,最好对软件文件夹和对应的bsp文件夹clean project,然后对bsp重新generate bsp,然后再build all(ctrl +b).

4.eclipse中,f5 step into,程序一步一步运行,会进入子函数内部。f6 step over,程序一行一行运行。f7运行完子函数,跳回到调用他的上一级函数。

5.主程序c文件中,编译时报错symbol xx could not be resolved.原因是该头文件未被更新。可选中软件工程及其bsp文件夹,右键->index->fresh all files更新所有文件,报错一般会消除。

6.在nios->bsp editor->linker script中,若有堆栈安排在ddr中,则应对ddr做offset,避开堆栈的地址空间,否则对ddr的读写操作可能干涉堆栈,造成程序运行异常,跑飞。

7.debug或run as nios hardware时,报错 system id hash 或者timestamp不一致,可能的原因有以下几个:1.文件或者工作空间(workspace)打开不对,导致文件不匹配。2.时钟或者复位信号有问题(时钟未lock或者reset一直处于复位状态)3.quartus工程内,unsigned pin未设置输入三态。4无外部复位引脚接入(该条存疑)

8.自定义IP核封装后(比如工程名叫test_prj),可以在其test_prj_hw.tcl中快速修改封装。引用他人的IP也可用此方法:将IP的.v(加密或者不加密均可)文件或者网表文件和xx_hw.tcl加到自己的工程中,和.sopcinfo文件同级,该路径是IP文件夹的默认路径。(若放在其他路径下,可在qsys,tool->option,add ip repo...将别人IP的路径添加进来)

9.如何调用他人网表形式的IP核?自己如何产生网表文件?project -> export design partition,选中top.v模块,生成网表qxp文件。在引用他人封装的IP时,需将该IP的.qxp文件.top.v文件,hw_tcl文件一起加入工程(注意修改hw.tcl文件中top.v的路径)。打开qsys后,可自动发现该IP。在全编译之前,需要将nios内核文件夹下synthesis->submodule文件夹下雨qxp对应的top.v文件,否则可能会报错。

10.在封装IP时,add file 步骤中,建议只添加一个IP 的top.v文件。

11.qsys中,CPU主端口读写ddr从端口,一般情况下,这两个IP核工作的时钟域不同(ddr usr clock250MHz甚至更高,nios是跑不了这么高的),连接这两个主从端口时,建议手动添加跨时钟域桥接组件,可提高系统的时序表现。(不手动添加,工具本身也会自动添加的,但是参数都是默认的,不一定最优)

12.时钟引脚的电平设置不对,可能导致pll无法锁定。

13.on-chip ram初始化文件hex,不必重新编译整个工程,那样耗时太长。可以将需要初始化的hex文件加入工程中,processing->uodate memory initialization file,quartus会识别hex文件,然后点击左侧task工具框内的assembler,重新生成sof文件等,hex文件就被编译进sof内,上电后,onchip ram就会被初始化,可能是某个boot loader软件程序等,即可在ram上自动运行该程序。

 

你可能感兴趣的:(NIOS,II,学习笔记)