NIOS II 开发常见问题
- 格式:pdf
- 大小:642.82 KB
- 文档页数:9
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。
NIOS2完整教程NIOS II 是一款高度可配置的32位嵌入式软核处理器,由Intel旗下的Altera(现在归属于英特尔)推出。
它具有低功耗、高性能和可扩展性的特点,适用于各种嵌入式应用领域。
下面是一份简要的NIOSII完整教程,帮助您了解如何开始使用NIOSII。
1. Nios II 架构Nios II 架构包括处理器核、总线接口、存储器和外设设备。
处理器核包括CPU和一些协处理器,如乘法器、除法器等。
总线接口用于连接处理器核、存储器和外设设备。
存储器用于存储指令和数据。
外设设备包括UART、GPIO、SPI、I2C等。
2. Nios II 开发环境搭建首先,您需要安装Altera的Quartus软件来进行Nios II的开发。
Quartus提供了一个开发工具套件,包括编译器、仿真器和调试器。
您还需要安装Nios II EDS,这是一个集成开发环境,用于配置和生成Nios II处理器的软件。
安装完软件后,您可以创建一个新的Nios II项目。
3. Nios II 项目配置在Quartus中创建新的Nios II项目时,您需要指定处理器类型、时钟频率和存储器大小等参数。
您还可以选择添加外设设备和协处理器。
一旦项目创建完成,您可以使用Nios II EDS来配置处理器和外设设备,并生成相关的软件。
4. Nios II 软件开发Nios II 支持多种软件开发工具,包括C/C++编译器、汇编器和调试器。
您可以使用C/C++编译器来编写和调试应用程序。
您还可以使用汇编器来编写高性能的关键代码。
调试器可以帮助您检测和修复应用程序中的错误。
5. Nios II 系统调试在开发过程中,您可能需要进行系统调试,以解决应用程序的问题。
Nios II 支持硬件和软件调试。
硬件调试通过连接JTAG接口进行,可以在硬件级别上进行调试。
软件调试使用Nios II调试器进行,可以在软件级别上进行调试。
6. Nios II 系统验证在完成软件开发和调试后,您可以进行系统验证,确保系统的正确性和稳定性。
蔚来java面试题库蔚来作为一家领先的智能电动汽车制造商,对于Java开发人员的技术面试通常会涉及多个方面,包括但不限于基础知识、编程能力、设计模式、框架使用、系统设计等。
以下是一些可能在蔚来Java面试中出现的题目:# 1. Java基础知识- 解释Java中的多态性是如何实现的。
- 描述Java中的四种访问修饰符及其使用场景。
- 阐述Java中的垃圾回收机制。
# 2. 集合框架- 比较ArrayList和LinkedList在性能上的区别。
- HashMap和HashTable的区别是什么?- 如何实现一个线程安全的ArrayList?# 3. 异常处理- 描述Java中异常的分类。
- 如何使用try-catch-finally块来处理异常?- 运行时异常和编译时异常的区别是什么?# 4. 多线程和并发- 什么是线程安全?如何确保线程安全?- 描述synchronized和volatile关键字的作用。
- 什么是死锁?如何避免死锁?# 5. Java I/O- 描述Java中的字节流和字符流的区别。
- 如何使用Java NIO来提高I/O操作的性能?# 6. 设计模式- 解释单例模式的实现方式及其使用场景。
- 描述工厂模式和抽象工厂模式的区别。
- 阐述观察者模式在实际开发中的应用。
# 7. 框架与技术栈- 描述Spring框架的核心概念。
- 什么是依赖注入?Spring是如何实现依赖注入的?- 阐述Hibernate与JPA的区别。
# 8. 数据库与SQL- 解释SQL中的JOIN操作。
- 描述事务的ACID属性。
- 如何优化SQL查询性能?# 9. 系统设计- 描述RESTful API的设计原则。
- 如何设计一个高可用的系统?- 解释微服务架构的优势和挑战。
# 10. 测试- 什么是单元测试?为什么它很重要?- 描述JUnit和TestNG的区别。
- 如何进行集成测试?# 结语在准备蔚来的Java面试时,除了掌握上述题目的知识点外,还应该关注最新的技术趋势,如云计算、大数据、人工智能等,并尝试在项目中应用这些技术。
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恢复现场并返回;软中断处理程序是用来处理由软件发起的中断事件的,包括调试指令引起的中断及未定义指令引起的中断。
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工程)全部找出来。
Nios II Software Developer's Handbook§6 异常处理6.1 简介本章重点是介绍怎样通过注册user-defined ISR (interrupt service routine)来处理硬件中断。
6.2 Nios II异常概述所有异常都由“exception address”处的代码处理。
Nios II处理器提供如下几种异常。
1.硬件中断异常2.软件中断异常z未实现的指令z软件trapsz其他异常异常发生时,处理器自动进行如下处理。
(1)把status register(ct10)中的内容拷贝到estatus register(ct11),保存异常发生前处理器的状态。
(2)清除status register的PIE位,disable further硬件中断(3)将异常后指令的地址保存在ea register(r29),为异常处理提供返回地址。
(4)执行异常处理处代码6.3 HAL实现这一部分介绍了HAL系统库所使用的异常处理实现方法。
HAL系统库提供的异常handler位于exception address。
它通过如下算法来区别硬件中断和软件中断。
(1)检查estatus register的EPIE位是否enabledz如果没有enabled,为软件中断z如果enabled,进行步骤(2)(2)检查是否ipending的所有位为0z如果是,则为软件中断z否则为硬件中断该算法使用了如下3个routines。
z_irq_entry()z alt_irq_handler()z software_exception()1._irq_entry()如果Nios II系统包括硬件中断,那么在exception address处是一个顶层的汇编routine:routine_irq_entry()。
它检查发生了何种中断,如果是硬件中断则调用alt_irq_handler(),如果是软件中断则调用software_exception()。
一、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。
DE2-35调试SDRAM调试:时钟50MHz,与CPU时钟相位差60度(3ns),程序在RAM和ROM运行,在Nios II IDE中.text选ROM,其余均选RAM。
SDRAM配置如下:Nios II IDE中运行程序:IOWR(SDRAM_BASE,0,0x7777);IOWR_ALTERA_AVALON_PIO_DATA(LEDR_BASE,IORD(SDRAM_BASE,0));编译正确,但是运行不正确,灯亮得不对,读出数据错误。
经过调试发现,时钟引脚没接,应该把SDRAM时钟也接到外部引脚。
时钟引出后,正确。
修改CPU运行地址如下:打开Nios II工程,先选择Nios II-->generate BSP,然后clear project,更新Nios II IDE中的HAL 等,同时修改BSP editer Link Script中的下列项下载硬件配置到开发板,编译Nios工程,并运行,正确。
SDRAM正常工作。
SDRAM开辟图像缓冲区:CFI-FLASH调试:添加CFI-FLASH模块和Avalon-MM Tristate Bridge模块,CF I配置如下,tri_state选Registered。
分配地址,编译SOPC,更新Quartus II顶层文件,编译工程,更新Nios II IDE的工程,记住最后要(Build All)。
Flash写操作之前都要先以块为单位擦除,注意数据破坏。
访问Flash有两套API:(1)Simple flash access,访问快速,但是易造成数据破坏Alt_flash_open_dev();Alt_write_flash ();Alt_read_flash ();Alt_flash_close_dev();(2)Fine-gained flash access 访问速度慢,但是可以对现有数据进行有效保护Alt_get_flash_info();Alt_erase_flash_block();Alt_write_flash_block();Simple flash access方法,程序如下,验证成功。
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 s cripts, and then from the project folder choose the setup s cript for your particular development board, and click Run.2.D:TEST ios_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_s leep.c:68: error: parse error before '/' token等错误全部由alt_busy_sleep.c引起,都是关于括号不匹配的问题,而alt_busy_sleep.c是IDE中的一个默认程序。
这个错误同样出现在D:TESTDE2Projectsoftware ios2 ,培训用的一个简单实验。
答:找到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_AVALON_PIO_DATA(LED_PIO_BASE, led);来向该组件写入数据,就会导致上述错误。
解决办法:1.可以修改sopc系统,为该PIO改名为LED_PIO ;2.在hello_led.c的前面给LED_PIO_BASE赋值,如#define LED_PIO_BASE0x00001800,后面的这个地址要与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 s cript auto_verify_ddr_timing.tcl unsuccessful Error: 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"这里的目录是初始的目录,把它改为正确的目录。