NIOS II 常见问题总结
- 格式:doc
- 大小:43.50 KB
- 文档页数:8
NIOS开发遇到的error整理1、出现:make[1]: *** [public.mk] Error 1编译nios ii出错如下:make[1]: *** [public.mk] Error 1make: *** [../MyFirstLed_bsp-recurs-make-lib] Error 2网上有说:To regenerate from Eclipse:1. Right-click the BSP project.2. In the Nios II Menu, click Generate BSP.或者:你要在工具栏里click Generate BSP一下,就不会出错了。
错误2:参考文档:n2sw_nii52014.pdf第一次做NIOS遇到的三个错误第一次做第一次NIOS实验,过了三道关,就是解决了三个特别奇怪的错误,现整理出来,让以后的朋友们别再浪费这个时间了。
错误一:新建工程后,运行SOPC Builder,刚刚打开界面就提示:“Unable to load system PTF”然后就退出了。
图片如下:原因:你的工程路径名称中含有非法字符,看是不是用中文名称当了路径名?解决:改一个没有空格,没有中文的路径即可。
错误二:编译CPU内核时,编译失败,错误为no install.ptf file found at <pathname>/europa_utils.pm原因:你的windows登录的时候,用了一个中文名称,使得你帐户的路径变得不可识别。
解决:新建或改换一个英文帐户,登录WINDOWS错误三:进行Nios软件编译后进行硬件debug或run时,出现提示There are no Nios II CPUs with debug modules available which match the val uesspecified. Please check that your PLD is correctly configured, downloading a new SOF file if necessary.原因:没有启动硬平台解决:要打开那个QUARTUS工程,运行programmer,将程序下载仿真,此时会提示:接着运行此时,再进行软件Debug。
NIOS II常遇问题以及解决方法前段时间接触NIOS II开发中遇到一些问题,记录下来供备忘。
首先,我使用的开发板是黑金动力的飓风四代(FPGA - EP4CE15F17C8N)操作系统是win8-32bit,提几点初学时的心得和体会:1、视频演示用的是win7-64bit,视频教程中提到了部分32位系统和64位系统的一些区别;在Quartus 11.0 sp1 / Modelsim SE 10.0c使用中,目前没有发现相关的问题,但是在论坛上查找资料时,发现有人提出使用64位系统开发NIOS II会遇到一些诡异的问题,这点在配套教程中没有描述。
关于具体事宜,我也没有遇到,也不会关注。
2、教程申明了必须使用Administrator账户。
说到这个问题,必须要提到操作系统版本的问题,以win7为例,分为家庭普通版、家庭高级版、专业版、旗舰版,不同的版本通过设置,能够拿到的最高权限是不同的,越靠后的能够得到的权限或者功能就越多,如果读者遇到一些权限问题,可考虑下是否是因为操作系统版本的问题。
另外,因为种种原因决定使用了非Administrator账户做开发,也是可以的,需要将对应的账户提升到完全的Administrator权限(不仅仅是属于Administrator组就够了),我之前在win8上非Administrator账户是使用Quartus 和Modelsim没有问题。
3、在软件安装路径问题中,视频教程中来了句“使用默认的安装地址,不然可能会出现问题”(非原话,大体意思如上),在这点上就显得极其不负责任了。
很多人C盘空间并不充裕,无法将这几套软件安装在C盘——那么就是需要更改安装路径了,而该软件的安装路径中不得有中文、空格等,只要注意这些问题,更改安装路径是没问题的。
4、使用NIOS II时,win8下一直编译不成功,最后忍痛换成win7(32位专业版),问题就可以解决。
现在回头想想,有可能是win8系统本身的问题;有可能是我本身额外安装了cygwin,和Quartus配套的cygwin工具冲突了也很有可能,当时换系统前应该先卸载掉cygwin试试的;也有可能是非Administrator账户导致的;NIOS II开发问题集锦---------------------------------------------------------------------------------------- 问题1:如何使用Nios II Software Tools for Eclipse导入已有工程?解答:File>Import>General>Exsiting Projects into Workspace各位同学可不要小看这个步骤,这个步骤将指定路径所有的Eclipse工程(当然包括Nios II工程)全部找出来。
niosii IDE提示make: *** [ .elf] Error 1或者 make: *** [**.elf] Error 1我的系统是WIN7,QuartusII和NIOS2的版本都是10.0,按照特权同学的《特权和你一起学NIOS2--第三章流程实践案例——手把手第一个工程》操作,前面都很顺利,后来在Eclipse里建好了软件工程之后,编译(Build Project),出现如下错误提示:make:***[**.mk] Error 1 或者make: *** [**.elf] Error 1。
看了很多论坛,很多网友都提了自己的解决思路,归纳起来,大概有几种解决办法:(1)、Regenerate the BSP to update the Makefile, and then build again. To r egenerate from Eclipse: 1. Right-click the BSP project. 2. In the Nios II Menu, click Generate BSP.(2)、Here is the list of files that you can select to change their compatibilit y mode under the Quartus II->bin->cygwin->bin folder:1. Make.exe2. Sh.exe3. Echo.exe4. Cygstart.exe5. MakeInfo.exe6. Perl.exe7. Collect2.exe (under nios2eds\bin\nios2-gnutools\ H-i686-pc-cygwin\libexec\gcc\ nios2-elf\3.4.6)8. Nios2-elf-g++.exe (under nios2eds\bin\nios2-gnutools\ H-i686-pc-cygwin\bin)方法就是将上面8个.exe文件改成XP兼容模式。
一、Nios II中断简述Nios II 的中断处理方式带有典型的RISC处理器的特征,所有的中断处理都从同一入口进入,然后由软件加以分配。
负责分配工作的软件叫系统ISR,它是由开发系统提供的,自动的连接到可执行程序上。
系统ISR维护着一个中断向量表,表中的每一项代表着一个专项处理程序的入口。
所有的专项处理程序都是由用户定义然后注册到中断向量表中的,叫做用户ISR。
系统ISR的入口地址是在SOPC_Builder中定义的,叫Exception Address。
和中断有关的CPU寄存器有:ctl0、ctl1、ctl3、ctl4。
Ctl0 是程序状态字,它的bit0位是全局中断允许位,1代表允许,0代表禁止。
Ctl1是程序状字的堆栈,当发生中断时,由它保留一个程序状态字的备份。
Ctl3是中断允许寄存器,其中每一位控制着一个中断源,1代表允许,0代表禁止,共计32位。
Ctl4是中断申请寄存器,每一位对应着一个中断源的中断请求,1代表有中断,0代表没有……计32位。
NiosII的中断处理过程是这样的:1. 拷贝一份程序状态字到ctl1;2. 清除全局中断允许位PIE,禁止中断;3. 将下一条将执行的指令的地址存入R29,以便中断返回之用;4. 跳转到中断入口地址,进入系统ISR;5. 系统ISR保护现场;6. 系统ISR检测ctl1的PIE位,如为0则进入软中断处理程序从11继续,否则由7继续;7. 系统ISR检测Ctl4,如果有中断申请,则转到硬中断处理和序,否则进入软中断处理程序;8. 硬中断处理程序将检测中断申请号,并检索中断向量表,跳转到用户中断处理程序;9. 用户中断处理程序做出具体的处理,最后返回系统ISR;10. 系统ISR恢复现场,并返回;11. 软中断处理程序进行陷井指令、模拟指令判断,并做相应处理,然后返回系统ISR;12. 系统ISR恢复现场并返回;软中断处理程序是用来处理由软件发起的中断事件的,包括调试指令引起的中断及未定义指令引起的中断。
NIOS开发遇到的error整理1、出现:make[1]: *** [public.mk] Error 1编译nios ii出错如下:make[1]: *** [public.mk] Error 1make: *** [../MyFirstLed_bsp-recurs-make-lib] Error 2网上有说:To regenerate from Eclipse:1. Right-click the BSP project.2. In the Nios II Menu, click Generate BSP.或者:你要在工具栏里click Generate BSP一下,就不会出错了。
错误2:参考文档:n2sw_nii52014.pdf第一次做NIOS遇到的三个错误第一次做第一次NIOS实验,过了三道关,就是解决了三个特别奇怪的错误,现整理出来,让以后的朋友们别再浪费这个时间了。
错误一:新建工程后,运行SOPC Builder,刚刚打开界面就提示:“Unable to load system PTF”然后就退出了。
图片如下:原因:你的工程路径名称中含有非法字符,看是不是用中文名称当了路径名?解决:改一个没有空格,没有中文的路径即可。
错误二:编译CPU内核时,编译失败,错误为no install.ptf file found at <pathname>/europa_utils.pm原因:你的windows登录的时候,用了一个中文名称,使得你帐户的路径变得不可识别。
解决:新建或改换一个英文帐户,登录WINDOWS错误三:进行Nios软件编译后进行硬件debug或run时,出现提示There are no Nios II CPUs with debug modules available which match the val uesspecified. Please check that your PLD is correctly configured, downloading a new SOF file if necessary.原因:没有启动硬平台解决:要打开那个QUARTUS工程,运行programmer,将程序下载仿真,此时会提示:接着运行此时,再进行软件Debug。
NIOS烧写epcs_flash关于Nios核的创建的可以参考网络上的文档,我主要是参考了黑金动力社区的两份文档。
列出如下。
《NIOSII那些事儿-Qsys_EP4CE15_v1.1.2》《NIOSII那些事儿-Qsys_v1.3.1》《Quartus_II_12.0 Qsys及Nios_II教程》在描述烧录过程之前,先给出一个我烧录过程中遇到的问题,贴图如下,大家想想为什么会出现这个问题?下面开始烧录的流程:1:器件选型2:引脚设置,参见下面两张图。
3:epcs_flash_controller的设置,重要哦。
4:连接好四个相关引脚。
5:先将sof文件下载进fpga,以确保fpga内有了nios核。
6:在nios的开发环境里面,选择Nios II -> Flash Programmer7: File -> New,打开如下界面,选择对应的xxxx.sopcinfo文件。
8: 选择Connections 在打开的界面中选好xxxx.qpf文件。
最好打钩以忽略掉system ID的选项。
9:点击Add按钮,一次添加好xxxx.sof文件和xxxx.elf文件。
如图。
10:点击Start按钮,等待烧录完成即可。
恭喜你已经完成了通过nios的Flash Programmer进行epcs的烧写。
以上是在Cyclone IV系列进行的操作,另外本人还遇到一个问题,就是在Cyclone V系列的nios创建过程中无法引出epcs_flash_controller的引出端,导致烧录的时候会报开头贴出的错误。
如果谁在V系列遇到并解决了此问题还请来信。
china_fpga@。
NiosII 之软件调试技巧观察寄存器对寄存器的观察和编辑是最基本也是最重要的调试手段.¾ 菜单操作NiosII IDE->Window->Show View->Registers图示意图 1: RegisterView编辑寄存器的值右键单击目标寄存器,并选择Ch ¾ ange Register Value ,输入一个新值,回车即可;被修红色显示;¾ rs view 中或者某个寄存器上单击右键,并选择Format ,然后在下列中选择显示格式 Hexadecimal .寄存器的详细介绍请参考NiosII 之处理器操作模式及寄存器改过的寄存器会以设置寄存器值的显示格式在registeNatural .Decimal .。
观察变量Variables View 默认显示当前函数中的所有局部变量,用户也可以在Variables View 中通过鼠标右键选择Add Global Variables,添加任何感兴趣的全局变量.¾ 菜单操作NiosII IDE->Window->Show View->Variables图示意图 2: VariablesView编辑变量的值¾ 右键单击目标变量,并选择Change Variable Value,输入一个新值,回车即可;被修红色显示;¾ 改过的变量会以设置变量值的显示格式在Variables View 中或者某个变量上单击右键,并选择Format,然后在下列中选择显示格式 Hexadecimal .¾ :Natural .Decimal .查看变量的类型属性在Variables View 中的某个变量上单击右键,并选择Cast to Type;观察内存¾ 菜单操作NiosII IDE->Window->Show View-> Memory图 3: MemoryView 示意图Memo ¾ ry View 支持与C 语言一样的寻址方式,用户可以在地址栏中使用下面几种表达式 0x0847d3c (&y)24*ptr¾ 图:+10编辑memory 的值在地址栏中输入感兴趣的地址, 然后在其下方的Memory View 中,鼠标左键单击(不能双击)感兴趣的地址单元(参考图 3: MemoryView 示意),然后输入新值即可;可以通过键盘的Arrow Key,来定位新的要修改的单元;对Memory 的编辑是NiosII IDE 中最不人性化的一点/观察表达式¾菜单操作NiosII IDE->Window->Show View->Expressions图 4: ExpressionView示意图¾添加Expression在Expression View中,单击鼠标右键选择Add Watch Expression,然后在弹出的对话框中输入想要观察的表达式(例如: (x-5)*3), 单击OK即可;设置断点¾ 断点的作用: 使程序运行到满足断点条件时自动停止运行;用户可以直接在源程序的代码上添加断点,取消断点或者暂时禁止断点;¾ 设置断点: 双击代码左侧边缘处即可设置断点,如下图所示;图断点设置示意图 5:¾ 编辑断点菜单操作NiosII IDE->Window->Show View->Breakpoints所有的断点都会在Breakpoint View 中显示,并可以使能/禁止/删除断点;图 6: BreakpointView 示意图NiosII IDE 的支持断点的动态设置,用户可以在程序运行时在源码中动态设置 断点.WatchpointWatchpoint是一种特殊的断点,一般的断点是当程序执行到源代码的某个位置时强制程序停下来; Watchpoint则可以根据给定条件控制程序.NiosII IDE对Watchpoint的支持还存在很大缺陷,这里只作简单介绍.¾在全局变量上设置watchpoint在源文件中双击选中一个全局变量(目前只支持32位的变量,例如int);选择菜单 Run > Toggle Watchpoint;在Add Watchpoint 的对话框中选择z如果要让程序在读该全局变量的时候停止的话,就在Read选项上打勾;z如果要让程序在写该全局变量的时候停止的话,就在Write选项上打勾;单击OK.可以在Breakpoints view(见P5)中观察和控制所有的断点,包括Watchpoint;注:重复1-2步可以取消Watchpoint;¾在表达式上设置watchpoint打开Breakpoints view(见P5);右键单击窗口内任何位置,然后选择Add Watchpoint;在Add Watchpoint (C/C++) 对话框的Expression to watch 域输入目标表达式(目标表达式通常用来表示某个地址);在Add Watchpoint 的对话框中选择z如果要让程序在读表达式所指向的地址时停止的话,就在Read选项上打勾.z如果要让程序在写表达式所指向的地址时停止的话,就在Write选项上打勾.单击OK.图 7: Watchpoint示意图在HAL源文件中设置断点NiosII IDE 6.0支持Linked Folder这样的特性,在每个系统库项目中你都可以看到两个Linked Folder,如下图所示:图 8: LinkerFolder示意图借由这两个linked folder,用户可以找到HAL的所有源文件,并直接在源文件上设置断点.用户在调试程序时,通常IDE会自动在应用程序的main函数入口处设置一个断点,使得程序看起来好像都是从main开始执行的.实际上程序的真正入口是复位子程序,读者可以思考下面两个问题:¾如何让程序从复位地址开始调试?¾如何在中断入口设置断点?指令单步调试模式在NiosII IDE的Debug Perspective界面工具栏中, 用户可以看见一个Instruction Stepping Mode按钮(如下图所示), 只要单击该按钮, 就可以进入单个指令的调试模式;图 9: 指令单步调试工具示意图指令单步调试在Disassembly窗口中进行,如下图所示;图 10: Disassembly窗口示意图用户无法在汇编源文件*.S中直接进行单步调试,此时就需要借助指令单步调试模式在Disassembly窗口中调试汇编程序.观察复杂的结构变量很多时候,特别是用C++进行软件开发的时候,用户可能需要观察一些比较复杂的变量,比如类,结构体,联合体以及多维数组等;NiosII IDE默认的调试级别并不支持复杂变量的观察和编辑.用户可以通过修改调试器的调试等级来实现复杂变量的观察和编辑,右键单击目标项目并进行下面的菜单操作:->Properties->C/C++Build->ToolSettings->NiosIICompiler->General->DebugLevel选择最高调试级别: Maximum(-g3), 就可以观察很多高级变量了;图 11: 调试级别设置示意图观察.objdump文件*.objdump有点象快速查看之流的工具,就是以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息。
NIOS II常见编译问题解答win7下的兼容性问题cygdrive/f/altera/10.0/nios2eds/components/altera_hal/build/system_rules.mk:120:/components/altera_hal/build/gnu_rules.mk: No such file or directory/cygdrive/f/altera/10.0/nios2eds/components/altera_hal/build/system_rules.mk:124:/components/altera_hal/build/gtf_rules.mk: No such file or directorymake[1]: *** No rule to make target `/components/altera_hal/build/gtf_rules.mk'. Stop.make: *** [system_project] Error 2Build completed in 11.068 seconds解决办法:因为在win7下的权限问题.具体解决方法参考下面的方法:Under your Quartus II folder, go to bin->cygwin->bin folder, select the following files in the list below and then right-click and choose Properties. Under the Compatibility tab, check “Run this program in compatibility mode for:”and choose “Windows XP (Service Pack 2)”. Check “Run this program as an administrator”, as well.Here is the list of files that you can select to change their compatibility mode under the Quartus II->bin->cygwin->bin folder:1. Make.exe2. Sh.exe3. Echo.exe4. Cygstart.exe5. MakeInfo.exe6. Perl.exe7.Collect2.exe(undernios2eds\bin\nios2-gnutools\H-i686-pc-cygwin\libexec\gcc\nios2-elf\3.4.6)8. Nios2-elf-g++.exe (under nios2eds\bin\nios2-gnutools\ H-i686-pc-cygwin\bin)在英文网上查到的,这几个不同的exe文件在不同的bin文件夹之间,依次右击改掉属性,把允许管理员使用权限前面打上勾即可.5.如果run Niosii时经常出现到2%后N久也不动,也不报错,甚至进度条也在滚,当然没有前进了。
1、NIOSII IDE写C代码的时候一行末尾斜杠“\”代表一句代码中本行写不完,两行代码或多行代码是一句。
2、如何在NIOSII中操作PIO?举个例子来说明,运行NIOSII IDE向导,在NIOSII下新建一个hello_led的工程。
其中Hello_led.c是这样写IO口的:IOW_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,led);首先在Altera_pio_regs.h找到定义:#include <io.h>#define IOWR_ALTERA_AVALON_PIO_DATA(base,0) IORD(base,0)#define IOWR_ALTERA_AVALON_PIO_DATA(base,0,data) IOWR(base,0,data)因此在NIOSII中可以调用#include <io.h>库函数 IOWR/IORD来操作PIO。
接着在system.h有以下内容:#define LED_PIO_TYPE "altera_avalon_pio"#define LED_PIO_BASE 0X00004000 //具体的LED的基地址在sopcBuilder中有关NIOSII的配置就是通过system.h来传递给IDE的。
最后,用IOWR(0X00004000,0led);替代IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,LED)完成PIO操作。
3、最后一步假如要将硬件配置数据也放到flash中,在进行NIOSII Flash Programming的时候,必须首先将硬件配置好。
即先将sof文件下载到FPGA,再进行.sop——>.flash转换和下载。
看到站里一篇技术文章,里面有讲到利用NIOSII来“在应用”配置FPGA,摘来收藏:1 系统的硬件设计系统主要由Cyclone FPGA、EPCS、Flash和串行通信等组成,硬件结构如图1所示。
NIOS嵌入式处理器Nios嵌入式处理器于2001年首次推出,创新的Nios® 嵌入式处理器成为业界第一款专门针对FPGA的商用处理器。
自此以后,众多的FPGA用户采用了Altera 提供的Nios和Nios II处理器。
Altera建议新设计采用Nios II处理器。
在二○世纪九十年度末,可编程逻辑器件(PLD)的复杂度已经能够在单个可编程器件内实现整个系统。
完整的单芯片系统(SOC)概念是指在一个芯片中实现用户定义的系统,它通常暗指包括片内存储器和外设的微处理器。
最初宣称真正的SOC――或可编程单芯片系统(SOPC)――能够提供基于PLD的处理器。
在2000年,Altera发布了Nios处理器,这是Altera Excalibur嵌入处理器计划中第一个产品,它成为业界第一款为可编程逻辑优化的可配置处理器。
本文阐述开发Nios处理器设计环境的过程和涉及的决策,以及它如何演化为一种SOPC工具。
Altera很清楚地意识到,如果我们把可编程逻辑的固有的优势集成到嵌入处理器的开发流程中,我们就会拥有非常成功的产品。
基于PLD的处理器恰恰具有应用所需的特性。
一旦定义了处理器之后,设计者就“具备”了体系结构,可放心使用。
因为PLD和嵌入处理器随即就生效了,可以马上开始设计软件原型。
CPU周边的专用硬件逻辑可以慢慢地集成进去,在每个阶段软件都能够进行测试,解决遇到的问题。
另外,软件组可以对结构方面提出一些建议,改善代码效率和/或处理器性能,这些软件/硬件权衡可以在硬件设计过程中间完成。
Nios II系列软核处理器是Altera的第二代FPGA嵌入式处理器,其性能超过200DMIPS,在Altera FPGA中实现仅需35美分。
Altera的Stratix 、Stratix GX、 Stratix II和 Cyclone系列FPGA全面支持Nios II处理器,以后推出的FPGA器件也将支持Nios II。
Builder/Nios II 编译过程中遇到的一些问题与解决方法 (I)couldn't read file "": no such file or directorysolution:From the Tools menu select Tcl Scripts, and then from the project folder choose the setup script for your particular development board, and click Run.下载时出现错误:Error: Can't configure device. Expected JTAG ID code 0x020010DD for device 1, but found JTAG ID code :SOPC所选器件和开发板上的不一致。
solution:提示LED_PIO_BASE没有声明,这是因为名字不一致引起的。
比如,在生成SOPC时,双击系统PIO(Parallel I/O)(在Avalon Modules -> Other下),为系统添加输出接口,你没有把该组件改名成LED_PIO,而是保留了原始的名字:PIO_0;但你又通过IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led); 来向该组件写入数据,就会导致上述错误。
解决办法:1.可以修改sopc系统,为该PIO改名为LED_PIO ;2.在的前面给LED_PIO_BASE赋值,如#define LED_PIO_BASE 0x00001800,后面的这个地址要与SOPC中的地址对应。
在Quartus II中,为什么编译一些样板工程都会出错?Error: DDR timing cannot be verified until project has been successfully compiled. Error: Evaluation of Tcl script unsuccessfulError: Quartus II Shell was unsuccessful. 2 errors,1 warningsolution:在做样板工程时要注意一个问题: Due to the library paths that are coded into the Quartus setting for this project, if a user wishes to modify the hardware design they must first strip out any old paths from within the project settings file (qsf)在qsf文件中找到类似语句 set_global_assignment-nameVHDL_FILE C:/megaCore/"这里的目录是初始的目录,把它改为正确的目录1在Nios II IDE编译时出现如下错误是怎么回事?Pausing target processor: not responding.Resetting and trying again: FAILEDLeaving target processor paused solution:以下是一位FAE的回答:1.关于USB-Blaster在Nios II IDE下载时会发生偶发性错误,这种现象主要是IDEsoftware与Nios II CPU透过USB-Blaster在做通讯时发生错误,若是确认FPG配置没有错误,连续发生错误的机率应该是相当的低,您只需要重新下载即可。
NIOS2完整教程NIOSII是一种32位可配置的软核处理器,支持使用硬件描述语言(HDL)进行快速设计和开发。
下面是一个完整的NIOSII教程,介绍了NIOSII的基本概念和使用方法。
第一部分:NIOSII概述(300字)NIOS II是Altera公司推出的一种可配置软核处理器。
它可以根据需要进行配置,包括选择处理器指令集的大小和功能,以及设置外设和存储器的接口。
NIOS II是基于经典的RISC架构,具有高性能和灵活性。
第二部分:NIOSII的基本构成(300字)NIOSII处理器由五个核心组件组成:指令集体系结构(ISA)、处理器核心、数据存储器、指令存储器和外设接口。
ISA定义了NIOSII支持的指令集,包括整数指令、浮点指令和多媒体指令。
处理器核心执行指令,并且可以执行单周期、多周期或流水线处理。
数据存储器用于存储数据,指令存储器用于存储程序指令。
外设接口用于连接NIOSII处理器和外部设备。
第三部分:NIOSII的配置和开发环境(300字)第四部分:NIOSII的应用场景(300字)NIOSII可用于各种应用场景,包括但不限于嵌入式系统、通信系统、工业自动化和军事应用。
NIOSII的可配置性使得它非常适合于各种需求和资源约束的项目。
NIOSII的性能和可扩展性使得它能够满足高带宽和实时性要求的应用。
此外,NIOSII的软件开发环境也非常成熟和易于使用,可以加快开发过程。
第五部分:NIOSII的优势和挑战(300字)NIOSII相对于其他软核处理器的主要优势在于其可配置性和性能。
NIOSII可以根据需求进行定制,并且可以实现高度优化的硬件和嵌入式软件系统。
然而,NIOSII的可配置性也带来了一些挑战,例如设计复杂性和调试困难。
此外,NIOSII的性能也受限于硬件资源的可用性和设计的质量。
总结(200字)在本教程中,我们介绍了NIOSII的基本概念和使用方法。
NIOSII是一种可配置的软核处理器,支持使用HDL进行快速设计和开发。
NIOS II 常见问题总结1. 怎样在TCL脚本分配管脚 source <pin_assign>.tcl 有点问题:# source stratix_pin_assign.tclcouldn't read file "stratix_pin_assign.tcl": no such file or directory 答: From the Tools menu select Tcl Scripts, and then from the project folder choose the setup script for your particular development board, and click Run.2.D:\TEST\nios_sst60下载时出现错误:Error: Can't configure device. Expected JTAG ID code 0xDD for device 1, but found JTAG ID code 0x020B40DD.答:SOPC所选器件和开发板上的不一致。
3.在NOIS II中Bulid例程hello_world都出现了错误,错误提示为:gdrive/c/altera/kits/nios2/components/altera_nios2/HAL/src/alt_busy_s leep.c:68: error: parse error before '/' token等错误全部由alt_busy_sleep.c引起,都是关于括号不匹配的问题,而alt_busy_sleep.c是IDE中的一个默认程序。
这个错误同样出现在D:\TEST\DE2Project\software\nios2 ,培训用的一个简单实验。
答:找到system.h文件,里面有个关于系统时钟频率的设置项,应该是没有赋值,你手动赋值。
NIOSII教程1.NIOSII概述:介绍NIOSII的特点、应用领域和产品系列。
2.NIOSII架构和指令集:介绍NIOSII的架构和指令集。
NIOSII的架构包括处理器核、存储器和外设接口等。
处理器核由五个主要部分组成:指令译码器、执行单元、数据通路、存储器接口和外设接口。
NIOSII的指令集包括常见的RISC指令,如加载、存储、算术逻辑和分支等。
3.NIOSII的软件开发环境:介绍NIOSII的软件开发环境和相关工具。
4.NIOSII的软件编程:介绍NIOSII的软件编程方法和技术。
在NIOSII上进行软件编程可以使用C语言和汇编语言。
用户可以使用开发工具来编写、调试和运行自己的软件。
此外,NIOSII还支持外设驱动程序的编写和集成,以实现与外部设备的交互。
5.NIOSII硬件设计:介绍如何进行NIOSII的硬件设计和集成。
6.NIOSII的调试和性能优化:介绍如何进行NIOSII的调试和性能优化。
在NIOSII的开发过程中,调试和性能优化是非常重要的环节。
用户可以使用调试器来调试和分析程序的执行过程,以发现和修复错误。
此外,用户还可以通过改进代码结构和算法来提高程序的性能。
7.NIOSII的应用案例:介绍一些NIOSII在实际应用中的案例。
总结:NIOSII教程主要介绍了NIOSII的概述、架构、指令集、软件开发环境、软件编程、硬件设计、调试优化和应用案例等内容。
通过学习NIOSII教程,用户可以获得关于NIOSII的全面知识,并能够利用NIOSII 进行快速设计和开发嵌入式系统。
Nios II中断简述及中断调试技巧2008-11-05 17:35一、Nios II中断简述Nios II 的中断处理方式带有典型的RISC处理器的特征,所有的中断处理都从同一入口进入,然后由软件加以分配。
负责分配工作的软件叫系统ISR,它是由开发系统提供的,自动的连接到可执行程序上。
系统ISR维护着一个中断向量表,表中的每一项代表着一个专项处理程序的入口。
所有的专项处理程序都是由用户定义然后注册到中断向量表中的,叫做用户ISR。
系统ISR的入口地址是在SOPC_Builder中定义的,叫Exception Address。
和中断有关的CPU寄存器有:ctl0、ctl1、ctl3、ctl4。
Ctl0 是程序状态字,它的bit0位是全局中断允许位,1代表允许,0代表禁止。
Ctl1是程序状字的堆栈,当发生中断时,由它保留一个程序状态字的备份。
Ctl3是中断允许寄存器,其中每一位控制着一个中断源,1代表允许,0代表禁止,共计32位。
Ctl4是中断申请寄存器,每一位对应着一个中断源的中断请求,1代表有中断,0代表没有……计32位。
NiosII的中断处理过程是这样的:1.拷贝一份程序状态字到ctl1;2.清除全局中断允许位PIE,禁止中断;3.将下一条将执行的指令的地址存入R29,以便中断返回之用;4.跳转到中断入口地址,进入系统ISR;5.系统ISR保护现场;6.系统ISR检测ctl1的PIE位,如为0则进入软中断处理程序从11继续,否则由7继续;7.系统ISR检测Ctl4,如果有中断申请,则转到硬中断处理和序,否则进入软中断处理程序;8.硬中断处理程序将检测中断申请号,并检索中断向量表,跳转到用户中断处理程序;9.用户中断处理程序做出具体的处理,最后返回系统ISR;10.系统ISR恢复现场,并返回;11.软中断处理程序进行陷井指令、模拟指令判断,并做相应处理,然后返回系统ISR;12.系统ISR恢复现场并返回;软中断处理程序是用来处理由软件发起的中断事件的,包括调试指令引起的中断及未定义指令引起的中断。
niosii处理器的复位地址和异常地址学习Nios Development Board Reference Manual, Stratix II Edition。
(1)在使⽤Nios II SDK Shell试运⾏./restore_my_flash时,发现restore_my_flash会区分⽬录名的⼤⼩写,因此使⽤Nios II SDK Shell时最好注意⼤⼩写⼀致。
(2)restore_my_flash.pl为perl脚本,可以直接修改后直接执⾏。
(3)restore_my_flash不能正常取得命令⾏参数,但这不影响恢复出⼚设置的操作,因为restore_my_flash可以不依靠命令⾏参数来执⾏。
(4)最好不要移动NiosII的安装⽬录,例如restore_my_flash就会从⽬录名中提取内容⽣成需要的⽂件名。
(5)恢复出⼚设置需要.sof和.flash两个⽂件,估计.sof⽤于⽣成最⼩的nios 系统,以便将.flash⽂件下载到Flash中。
(restore_my_flash提⽰使⽤J24 JTAG连接器,该连接器是⽤于配置StratixII器件的。
)学习Creating Multiprocessor NiosII Systems Tutorial。
在standard设计的基础上修改了NiosII系统,⼜添加了两个NiosII处理器及各⾃的定时器、共享互斥锁、消息缓冲区。
编译、运⾏和调试了hello_world_multi程序。
给我的感觉是:(1)SOPC Builder中设置的NiosII的Reset和Exception地址很重要;(2)QuartusII⽣成的编程⽂件中包含有NiosII处理器的复位地址;(3)NiosII IDE的编译会⽣成绝对地址的代码和数据;(4)NiosII IDE通过NiosII处理器中的jtag_debug_module重定向程序的执⾏地址;(5)上电或复位后,NiosII处理器从复位地址(通常指向Flash)处执⾏Boot Loader,将程序拷贝到Ram中并在Ram中执⾏;(6)Exception地址确定了程序拷贝到Ram中的位置,Exception地址的低位总是0x20,NiosII处理器跳转到Ram执⾏时先执⾏低位地址为0x00的指令(⽤于初始化指令cache),之后执⾏低位地址为0x20处的系统启动代码。
NIOS II 常见问题总结1. 怎样在TCL脚本分配管脚source .tcl 有点问题:# source stratix_pin_assign.tclcouldn't read file "stratix_pin_assign.tcl": no such file or directory答:From the Tools menu select Tcl Scripts, and then from the project folder choose the setup script for your particular development board, and click Run.2.D:\TEST\nios_sst60下载时出现错误:Error: Can't configure device. Expected JTAG ID code 0x020010DD for device 1, but found JTAG ID code 0x020B40DD.答:SOPC所选器件和开发板上的不一致。
3.在NOIS II中Bulid例程hello_world都出现了错误,错误提示为:gdrive/c/altera/kits/nios2/components/altera_nios2/HAL/src/alt_busy_sleep.c:68: error: parse error before '/' token等错误全部由alt_busy_sleep.c引起,都是关于括号不匹配的问题,而alt_busy_sleep.c是IDE中的一个默认程序。
这个错误同样出现在D:\TEST\DE2Project\software\nios2 ,培训用的一个简单实验。
答:找到system.h文件,里面有个关于系统时钟频率的设置项,应该是没有赋值,你手动赋值。
比如你用50MHZ的时钟,就设成50000000如果总是出现上述问题,可能和软件有关系,建议重新安装软件。
注意quartus和NIOS安装版本一定要相同,不能混装。
4.这个错误是什么原因引起,把那个sdk_arm删除后,又提示另一个地方出错。
答:运行NIOS II IDE,点Project->Clear,重新Builde,应该可以解决问题。
5.在SOPC中Generate出现如下错误是怎么回事? Error: Generator program for module 'epcs_controller' did NOT run successfully. 只要在SOPC中加入epcs_controller就会出现此错误,无法生成一个元件。
答:可能和软件有关系,建议重新安装软件(这个问题是我刚学NIOS遇到的最头痛的一个问题,问题的原因是Quartus和Nios安装的版本不一致)。
6.在Nios II IDE中,怎样打开一个已经存在的工程?每次新建工程比较麻烦。
答:指定一个Nios II IDE的工作目录,就打开了那个目录下存在的工程。
另外,在Nios II 中是可以建立多个工程的。
7.在Quartus II 中编译出现如下错误怎么办?Error: Can't place pins assigned to pin location Pin_AE24 (IOC_X65_Y2_N2)答:按F1可以查看帮助,出现这样的错误的原因是:CAUSE: You assigned two or more pins to the specified location, but the Fitter cannot place all the pins in that location.删除这个管脚即可。
有一种比较简便的方法,就是在工程目录中找到一个后缀为QSF的管脚配置文件,查找Pin_AE24删除那行语句就行了。
8.如何在NIOS II IDE 下跟踪查看变量的定义或者函数的定义?答:按住CTRL键,鼠标移动到变量或者函数名的地方,就可以发现这些地方高亮显示,单击就可以进入到变量或者函数定义的地方。
9. 在count_binary.c有这样一段程序,它是如何操作的?unsigned int data = segments[hex & 15] | (segments[(hex >> 4) & 15] << 8)答:segments[hex & 15]显示个位0~F;(segments[(hex >> 4) & 15] << 8)显示十位数0~F,个位0~F,然后十位加一。
10.这个错误是由什么引起?答:提示LED_PIO_BASE没有声明,这是因为名字不一致引起的比如,在生成SOPC系统时,双击PIO(Parallel I/O)(在Avalon Modules -> Other 下),为系统添加输出接口,你没有把该组件改名成LED_PIO,而是保留了原始的名字:PIO_0;但你又通过IOWR_ALTERA_A V ALON_PIO_DATA(LED_PIO_BASE, led);来向该组件写入数据,就会导致上述错误。
解决办法:1.可以修改sopc系统,为该PIO改名为LED_PIO ;2.在hello_led.c 的前面给LED_PIO_BASE赋值,如#define LED_PIO_BASE 0x00001800,后面的这个地址要与SOPC中的地址对应。
11. 如何在NIOS II中驱动外部芯片或设备?答:在开发过程中,我们经常会使用外接一些芯片,或外接一些实用电路,比如AD芯片、串并转换芯片等等,那么如何在NIOS II中去使用这些芯片呢?我们在开发中会有多个选择:1.如果这个芯片是使用数据和地址总线的,并且补线时没有足够的单独引脚,那么这个芯片必须挂接在tri_stat总线上,这种用法和我们以往单片机或MCU 类似,在SOPC Builder 中直接定义用户逻辑,如果有额外的控制引脚,就需要用PIO来驱动,虽然公用数据地址线节省了引脚,但做控制时序费劲了。
2.如果这个芯片单独使用数据和地址,那么我们会直接做成Avalone总线的Slave设备,在Sopc Builder中自己定义component。
需要写HDL模块,自己定控制、状态、数据寄存器和控制位定义,这种方式控制灵活,易于实现复杂的控制时序。
3.在Quartus II 工程中画电路模块(或用HDL写电路模块),这种方式是独立于SOPC定义的模块之外的,做一个纯电路的处理模块,有时候会比较容易实现某些灵活的处理。
12.在SOPC添加Avalon Trisatate Bridge时,提示有如下错误,该如何解决?Tri state bridge/tristate master requires a slave of type Avalon tristate.Please add a slave of type Avalon tristate.Generate按钮为灰色,无法Generate答:需要一个专门接三台桥的设备,把flash添加到sopc中就可以了。
13. 在做count_binary这个例子时,出现一个错误:error: `BUTTON_PIO_IRQ' undeclared (first use in this function) BUTTON_PIO_IRQ的值如何给他定义?答:这个错误可能是在sopc builder中定制的pio端口名称是否与程序中用的不一致,要和程序里的一致,把pio组件的名称就改为button_pio,如下图:如果已经这样设置,还有可能是没有设置中断号,具体应该这样设置:14.在Quartus II中编译时出现如下错误:Error: Node instance "cpu_bht" instantiates undefined entity "cpu_bht_module"点击错误的地方弹出一个对话框这个错误是怎么回事?怎样解决?答:可能是在SOPC中所选的CPU型号不正确,换一个试试。
15.怎样自动分配管脚?答:在Quartus II自动分配管脚有一个方法,点击Assignments->Import Assginments,导入一个管脚分配文件,后缀为.csv .txt等,前提是在顶层原理图中各个输入输出的名称要和这个文件中的名称一致。
16.在NIOS II中编译时出现如下错误怎么解决?错误是不是由SOPC中的RAM引起?region ram is full (count_binary.elf section .text). Region needs to be 24672 bytes larger. address 0x80c1f8 of count_binary.elf section .rwdata is not within region ramUnable to reach edge_capture (at 0x00800024) from the global pointer (at 0x0081419c) because the offset (-82296) is out of the allowed range, -32678 to 32767.答:可能时RAM的大小不够,也有可能是中断地址(exception address) 的偏余量不够,设置大些就可以了。
如果还是出现这个问题,加一个SDRAM试试。
17.在Quartus II中,为什么编译一些样板工程都会出错?Error: DDR timing cannot be verified until project has been successfully compiled.Error: Evaluation of Tcl script auto_verify_ddr_timing.tcl unsuccessfulError: Quartus II Shell was unsuccessful. 2 errors, 1 warning答:在做样板工程时要注意一个问题:Due to the library paths that are coded into the Quartus settings for this project, if a user wishes to modify the hardware design they must first strip out any old paths from within the project settings file (qsf)在qsf文件中找到类似语句set_global_assignment-nameVHDL_FILEC:/MegaCore/ddr_ddr2_sdram-v3.2.0/lib/auk_ddr_tb_functions.vhd"这里的目录是初始的目录,把它改为正确的目录。