注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
591586293的个人空间 https://home.eeworld.com.cn/space-uid-116712.html [收藏] [复制] [分享] [RSS]
日志

NIOSII中相关问题

已有 6912 次阅读2010-6-25 11:02 |

1.int main (void) __attribute__ ((weak, alias ("alt_main"))); 

     这是定义main的别名为alt_main,这样当NiosII IDEdebugger的断点设置在main的时候(Debug As...里面可以设置),由于Free-Standing的模式下,alt_main取代了main函数(已经不存在main函数实体了),此时如果断点还设置在main的时候,上面的语法就可以就可以告诉debugger将断点设置在alt_main,从而不会出现无法在main中设置断点错误.(已经经过实际验证:建立一个freestand的项目,然后在alt_main文件中讲上面的语句注释掉,此时debug的时候就会弹出无法设置断点的错误)

2.. 怎样在TCL脚本分配管脚 source <pin_assign>.tcl 有点问题:
# source stratix_pin_assign.tcl  couldn'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.

2D:\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 IIBulid例程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.cIDE中的一个默认程序。这个错误同样出现在D:\TEST\DE2Project\software\nios2,培训用的一个简单实验。
答:找到system.h文件,里面有个关于系统时钟频率的设置项,应该是没有赋值,你手动赋值。比如你用50MHZ的时钟,就设成50000000如果总是出现上述问题,可能和软件有关系,建议重新安装软件。注意quartusNIOS安装版本一定要相同,不能混装。

4.这个错误是什么原因引起,把那个sdk_arm删除后,又提示另一个地方出错。           答:运行NIOS II IDE,点Project->Clear,重新Builde,应该可以解决问题。

5.在SOPCGenerate出现如下错误是怎么回事? Error: Generator program for module 'epcs_controller' did NOT run successfully. 只要在SOPC中加入epcs_controller就会出现此错误,无法生成一个元件。
答:可能和软件有关系,建议重新安装软件(这个问题是我刚学NIOS遇到的最头痛的一个问题,问题的原因是QuartusNios安装的版本不一致)。

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]显示个位0F(segments[(hex >> 4) & 15] << 8)显示十位数0F,个位0F,然后十位加一。

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赋值,如#defineLED_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 Avalontristate.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->ImportAssginments,导入一个管脚分配文件,后缀为.csv .txt等,前提是在顶层原理图中各个输入输出的名称要和这个文件中的名称一致。

16.NIOS II中编译时出现如下错误怎么解决?错误是不是由SOPC中的RAM引起?
region ram is full (count_binary.elf section .text). Region needs to be24672 bytes larger.address 0x80c1f8 of count_binary.elf section .rwdata is not within       region ram Unable 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 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_FILE C:/MegaCore/ddr_ddr2_sdram- v3.2.0/lib/auk_ddr_tb_functions.vhd"这里的目录是初始的目录,把它改为正确的目录。

18.NIOS II IDE编译时出现如下错误是怎么回事?
system_description/alt_sys_init.c:75: error: `ONCHIP_MEMORY_BASE'undeclared here (not in a function)
system_description/alt_sys_init.c:75: error: initializer element is notconstant
system_description/alt_sys_init.c:75: error: (near initialization for`ext_flash.dev.write')
system_description/alt_sys_init.c:75: error: initializer element is notconstant
system_description/alt_sys_init.c:75: error: (near initialization for`ext_flash.dev.read')
答:ONCHIP_MEMORY_BASE没有赋值,在alt_sys_init.c 程序的开头加上#defineONCHIP_MEMORY_BASE 0x00000000后面的这个地址要与SOPC中的对应。

19. NIOS II IDE编译时出现如下错误是怎么回事?
Pausing target processor: not responding.Resetting and trying again: FAILED
Leaving target processor paused
答:以下是一位FAE的回答:
1.
关于USB-BlasterNios II IDE下载时会发生偶发性错误,这种现象主要是IDE softwareNios II CPU透过USB-Blaster在做通讯时发生错误,若是确认FPG上配置没有错误,连续发生错误的机率应该是相当的低,您只需要重新下载即可       2. 若您使用Nios II IDE 6.0,请尽量配合SOPC Builder 6.0重新build您的system,并且使用Quartus II 6.0重新compile您的project,以减少CPUIDEsoftware不兼容的情形。

 

20.NIOS II IDE中工程的System Library选项中的这几个选项代表什么意思?.text .rodata .rwdata reset .exception这几个地址之间的关系是什么?答:.text : 代码区 .rodata:只读数据区,一般存放静态全局变量 .rwdata:可读写变量数据区另外还有.bss:存放未被初始化的变量。
■ .text — the actual executable code
■ .rodata — any read only data used in the execution of the code
■ .rwdata — where read/write variables and pointers are stored
■ heap — where dynamically allocated memory is located
■ stack — where function call parameters and other temporary data is  stored

21. 怎样在NIOSII中操作PIO,提供一种参考方法。
答:hello_led.c是这样写IO口的:
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led);
首先在altera_avalon_pio_regs.h找到定义
i nclude <io.h>
#define IORD_ALTERA_AVALON_PIO_DATA(base) IORD(base, 0)
#define IOWR_ALTERA_AVALON_PIO_DATA(base, data) IOWR(base, 0, data)
因此在NIOSII中可以调用#i nclude <io.h>库函数IORD/IOWR来操作PIO
small\software\hello_led_0_syslib\Debug\system_description下的system.h
,有以下内容:
#define LED_PIO_TYPE "altera_avalon_pio"
#define LED_PIO_BASE 0x00004000
其中LED_PIO_BASEIO寄存器地址?)为0x00004000SopcBuilder中设置一致!
(
其实在SopcBuilder中有关NiosII的配置,就是通过system.h来传送给IDE!)
最后用IOWR(0x00004000, 0, led);替代
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led);
编译,下载到开发板上,运行成功!

22.怎样让SDRAMFLASHSRAM的地址公用?
答: sdram可以和sram,flash共用数据总线和地址总线.sopc builder中添加SDRAM控制器时,在其share pins via tristate选择项上勾上Controller sharesdq/dqm/addr IO pins选项,这样sdram可以和sram,flash共用数据总线和地址总线.但是ATERA不推荐这样做,因为这样会降低SDRAM控制器的性能,在FPGA芯片管脚资源比较紧张的时候迫不得已才这样做。

23.怎样使用DE2板上的数码管,绑定管脚时需要注意什么?请举一个例子说明。
答: DE2板上的数码管只用了7位,小数点位默认为高电平。例如,在做例程count_binary时,需要用到两个数码管,以实现00FF的计数,在 SOPC添加一个16位的PIO SEVEN_SEG[15..0],绑定管脚时注意:使SEVEN_SEG[0..6]帮定到数码管HEX0[6..0]位,SEVEN_SEG[8.. 14]绑定到数码管HEX1[6..0]位,SEVEN_SEG[7]SEVEN_SEG[15]直接接VCC,这样才能让两个数码管正常显示并计数。

24. NIOS II IDE 中调试,编译通过的软件时,出现了下面的提示,是什么原因?
Using cable "ByteBlasterII [LPT1]", device 1, instance 0x00
Processor is already paused
Downloading 00000000 ( 0%)
Downloaded 57KB in 1.2s (47.5KB/s)
Verifying 00000000 ( 0%)
Verify failed
Leaving target processor paused
答: Verify failed这个问题说明板子的复位电路可能有问题,或装载程序的外部SRAMSDRAMCPU 的连接或时序有问题,也有可能是软件偶尔的错误。若是软件偶尔的错误,可以先复位一下CPU,然后再下载程序;或者断电后重新下载.sofNIOS II 程序

25.在练习C:\altera\kits\nios2_51\examples\verilog\niosII_cycloneII_2c35的工程时,里面有很多元件DE2板上都没有对应的管脚,比如网络元件lan91c111,使用的IP核,还有 24位的ext_flash,而DE2板上的FLASH只有22位。是不是SOPC中只能让DE2板上有对应管脚的元件存在,其它的只能删除?
答:这个目录下的example是针对altera自己的板子的,和DE2硬件不能对应,只能作为参考,或者做一些修改后用。

26.SOPC中加了一个200KBonchip_memory ,为什么在Quartus II 编译时出现这个错误?Error: Selected device has 105 RAM location(s) of type M4K RAM.However, the current design needs more than 105 to successfully fit
答:SOPC中的onchip_memoryM4K RAM根本就不是一个概念。Quartus II中编译出现这个错误,是由于设计中用到了太多的M4K

27. 关于sopc-builder reset address 的设置,一直搞得不是很明白。
答:SOPC中的reset address 指定的是最终全部软件程序代码下载到的地方,并且程序从reset address 启动。SOPC 中的exception address 指定的是系统异常处理代码存放的地方。如果exception address reset address 不一样,那么程序从reset address 启动后将把放在reset address 处的系统异常处理代码拷贝到exception address NIOS II软件中的text address指定的是程序运行的地方。如果text addressreset address 不一样,那么程序从reset address 启动后将把放在resetaddress 处的普通只读程序代码拷贝到text address NIOS II软件中的rodataaddress指定的是只读数据的存放地方。如果rodata addressreset address 不一样,那么程序从reset address 启动后将把放在reset address 处的只读数据拷贝到rodata address
NIOS II
软件中的rwdata address指定的是可读写数据的存放地方。如果rwdata addressreset address 不一样,那么程序从reset address 启动后将初始化rwdata address 处的可读写数据。

28. 如何提高NIOS II系统的性能?
答:主要可以从这几个方面入手:
1
、使用fast CPU类型。          2、提高系统主频。
3
、优先在SRAM中运行程序,SDRAM次之,最后选择FLASH中运行。
4
、使用片内RAM作为数据缓冲,片外SRAM次之,最后选SDRAM
5
IO数据传输尽可能采用DMA    6、对能并行处理的数据考虑使用多CPU协同处理。
7
、典型算法做成用户指令,有256条可以做,足够你用的。
8
、能用HDL模块来完成工作吗?能,就用HDL模块做成外设来完成吧
9
、采用C2H

29.如何优化NIOSII里的应用工程?
答:Optimize your Nios II application design!
1.Creat an Blank Project
Select Altera Nios II " C/C++ Application"
2. In main.c[your main fuctional c/c++ file]

i nclude "system.h"
i nclude "alt_types.h"
#......
int main (void) __attribute__ ((weak, alias ("alt_main")));
int alt_main (void)
{
......
return 0;
}
3."System Library Properties" Options
Select "Clean EXIT"
Select "Small C Library"
Select "Reduced Device Drivers"
Spicify linker script position, to ext_flash, ext_ram or on-chip-ram

30. 关于verify failed的总结
1. SDRAM的时序不对有时候不正确的pll clock phase shift for sdram_clk_out就会导致SDRAM不能正常工作:
   2. SDRAM
的连线不对,物理板子的连线问题
   3.
在调试的时候,程序下载的空间不是非易丢失存储器(non-volatile memory)或者存储器的空间不够也会导致这个错误
   4. QuartusII
的默认设置导致的错误,QuartusII默认将所有没有使用的IO口接地,这种时候可能导致某些元器件工作不正常; 最好将不用的IO口设置为三态
   5. USB-blaster
坏了,或者JTAG通信的信号噪声太大JTAG的端口需要一个弱上拉电阻来抗干扰
  6.
确保你的sdram既连接到CPU的指令总线也连接到CPU的数据总线

31.关于DMA传输的几点说明:
1memory 到外设的传输,调用alt_dma_txchan_ioctl()时,有一个参数alt_dma_tx_only_on
   2
.调用alt_dma_txchan_send函数时,在传输结束前就返回一个值,如果此值为负的话,说明发送请求失败。正确传输结束后,调用done函数。
   3
. 接收函数alt_dma_rxthan_prepare类似上面的12
   4
.传输结束,有两种可能:数据传完或者end of packet(要预先使能)
   5
Sopc builder中例化时要制定哪些可以访问DMA的主端口,DMAavalon slave端口要接cpu。实际传输的最大数可以帮助确定设置的位数
   6
alt_dma_txchan_ioctl用于控制dma的一些工作性质,使用多的话可以用信号量等来抢占   7dma传输最小应该传4字或者其倍数。

32. 1. 建立CPU时,下面的那个HardWare Multiply里面可以选①Embedded  Multipliers②Logic Elements③None,这三个选项有什么区别呀?
答: ①Embedded Multipliers,使用专门的内嵌硬件乘法单元(不可编程,仅能做乘法,且乘法速度最快),不是RAM ②Logic Elements,使用逻辑单元也就是FPGA中的查找表(速度较慢)。③None,那就是不要声长硬件乘法器了,这是只能通过软件模拟乘法,速度最慢。

33.下载是出现“not responding”错误的又一点发现:
答:在设计的过程中,经常使用板子上内部的两个晶振作为CPU或者有些信号的时钟,而且习惯用osc_27osc_50命名。在绑定管脚时又经常导入一个 CSV文件,没有手动一一绑定,而在那个CSV文件中晶振管脚名分别为CLOCK_27,CLOCK_50,这样系统的CPU根本就没有绑定管脚,不出错才怪。把名称改为CLOCK_27,CLOCK_50,重新编译下载就可以了。

34. 安装了nios2linux-1.4之后,为什么在New->Project时并没有出现Microtronx NIOS II选项呢?
答:这个问题好像难倒过很多人,其实在运行nios2linux-1.4安装的第一步,里面有个提示:
Information Regarding the Installation Procedure
IMPORTANT: Please ensure that you specify the correct path for the Altera Nios II Kit installation directory and the Cygwin root directory. The typical Altera Nios II Kit directory is:c:\altera\kits\nios2
The typical Cygwin root directory is:c:\altera\quartus50\bin\cygwin
问题的关键就是上面的路径不正确。对于Nios 5.16.0的路径分别为nios_51nios_60,都不是nios2,所以安装后找不到模板工程很正常。但它的一些必要文件又确实是安装在了 nios_51nios_60中。我也遇到了过同样的问题,想到了一个 简单的方法可以解决:
1.
把文件夹nios_51nios_60改为nios2,启动Nios II,就可以看到所需模板工程。
2.
退出Nios II,把文件夹名还原。
3.
再次启动Nios II,你会发现模板工程依然还在。

35Nios II汉化解决方案答:NIOS II IDE实际上是在eclipse平台上的一个应用插件,而Eclipse 是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。可访问如下网站:
1.Eclipse
官方网站javascript:;
2.
中国Eclipse社区 javascript:;
下面介绍如何汉化NIOS II(实际上只是汉化了eclipse
1.
打开NIOS II,点help->about NIOS II IDE,会看到有关NIOS的版权信息。可以看到NIOS II 5.1的版本上的Eclipse版本是Eclipse 3.0.1
2.
Eclipse官方网站上找到Eclipse 3.0.1多国语言包NLpack-eclipse-SDK-

3.0.x-win32.zip
下载地址:http://sunsite.informatik.rwth-a ... SDK-3.0.x-win32.zip
3.
NIOS II的安装目录中,你可以找到一个eclipse目录,如:C:\altera\kits\nios2\bin\eclipse,在这个目录下新建2个文件夹languagelinks
4.
NLpack1-eclipse-SDK-3.1.1a-win32.zip解压到language目录下
5.
links文件夹下用记事本新建一个文件,取名为link.link(必须是此扩展名)
6.
language.link 里输入代码如下:path=c:/altera/kits/nios2/bin/eclipse/language 保存此文件。
7.
汉化完成。
说明,这种方法只是汉化了eclipse,对NIOS II没有汉化,但这个软件已经大部分为中文了,因为NIOS II 只是eclipse一个插件。对于我们新手来说这还是必要

的。

 

 

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章