【连载】【FPGA黑金开发板】NIOS II那些事儿--NIOS II 常见问题(FAQ)

为了帮助初学者快速入门NIOS II,在此建立NIOS II FAQ,希望大家把自己遇到的问题提出来,然后在这里总结起来,以帮助以后遇到同样问题的人。

首先需要声明一点,下面部分问题来自网络,如果版权问题,请及时通知,我将会将其删除

在此提几点要求和规定:  

1.此贴是NIOS II FAQ,所以不收录其他相关内容;

2.大家通过回帖方式进行提问,如果有其他人可以解决,也是通过回帖方式进行解决;  

3.问题解决以后,我会将其编入这个贴内,然后将问题跟帖删除,避免跟帖过多的影响。

4.禁止在回帖中涉及与NIOS II无关内容,一经发现立即删除。

 

-------------------------------------------华丽的分割线----------------------------------------------------------------------

 

 

 1.NIOS能做浮点运算么?  

答:NIOS可以进行浮点运算,完全可以替代MCU,时钟可以跑到100Mhz,比ARM7还要快,ARM7时钟一般为72Mhz左右。

 

 

2.NIOS是否可以不使用SDRAM和并行FLASH?

答:首先说明一下,SDRAM是用来运行程序的,FLASH是用来存储程序代码的(SDRAM掉电丢失,FLASH则不会),每次上电的时候,都需要将FLASH中的程序代码放到SDRAM中,然后再运行。FPGA内部的memory(onchip memory)比较小,跑比较大的程序就很难了,所以我们外扩了SDRAM,以便比较大的程序运行。当然,我们也可以将并行的FLASH换成串行的FLASH,而且这样可以节省很多引脚。其实EPCS1(4,16...)就是串行FLASH,所以我们可以利用它来存储代码,至于如何设置,我后面通过博客形式来给大家讲解。

   

3.我的Quartus II编译硬件时没有错误,但是在下载程序的时候去出现以下错误的信息?
  Info: Started Programmer operation at Thu May 06 01:39:46 2010
  Error: Application Nios2 on 127.0.0.1 is using the target device
  Error: Operation failed

  Info: Ended Programmer operation at Thu May 06 01:39:46 2010
  不明白这是什么意思,时好时坏?

 

 

答:这种情况出现在JTAG模式下,你在使用NIOS下的JTAG功能(比如利用BLASTER进行在线仿真),同时你又想下载*.sof文件(就是在JTAG模式下下载程序)。简单说就是你的JTAG已经被占用了。解决办法就是关闭你正在使用的JTAG功能,然后再下载*.sof文件。初学者经常会犯这样的错误,一定要注意。

 

 

 4. 

 

 

答:1.安装最好装在默认目录下,即:X:\altera目录下,如果自行指定目录的目录中含有空格或者汉字,在新建工程时,会出现如下错误提示:

         No project template folders found in $sopc_kit_nios/examples/software.

 

 

  2.工程的存放地址不要有中文,也不要有空格,不然建立工程时可能出现如下错误提示:

        The software setting(STF)file associated with this project is damaged.This may be fixed by copying your source files into a new c/c++ application project.For more details see the error log.

 

 

    这个问题还是NiosII IDE对中文字符支持不好引起的,把目录名都改成英文而且不要有空格就没有问题了。

 

 

5.Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
 Pausing target processor: not responding.
 Resetting and trying again: FAILED
 Leaving target processor paused

 

 

答:我遇到这种问题是因为忘记将NIOS软核的复位(RESET)添加引脚了,或者是因为你所添加的引脚不是对应按键也能导致这种问题的发生。

 

 

6.请问一下使用EPCS4来保存程序,如何通过fpga加载到sdram里?

答:如何使用EPCSX保存程序请看我最新发表的博文,地址:http://www.cnblogs.com/kingst/archive/2010/05/09/1730835.html  

如何通过FPGA加载到SDRAM,这个过程是NIOS内部完成的,不需要我们来控制。  

 

 

 

7. 怎样在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.

8.D:\TEST\nios_sst60下载时出现错误:
Error: Can't configure device. Expected JTAG ID code 0x020010DD for device 1, but found JTAG ID code 0x020B40DD.
答:SOPC所选器件和开发板上的不一致。

9.在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安装版本一定要相同,不能混装。

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

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

12.在Nios II IDE中,怎样打开一个已经存在的工程?每次新建工程比较麻烦。
答:指定一个Nios II IDE的工作目录,就打开了那个目录下存在的工程。另外,在Nios II中是可以建立多个工程的。

13.在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删除那行语句就行了。

14.如何在NIOS II IDE 下跟踪查看变量的定义或者函数的定义?
答:按住CTRL键,鼠标移动到变量或者函数名的地方,就可以发现这些地方高亮显示,单击就可以进入到变量或者函数定义的地方。

15. 在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,然后十位加一。

16.这个错误是由什么引起?
答:提示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_BASE 0x00001800,后面的这个地址要与SOPC中的地址对应。

17. 如何在NIOS II中驱动外部芯片或设备?
答:在开发过程中,我们经常会使用外接一些芯片,或外接一些实用电路,比如AD芯片、串并转换芯片等等,那么如何在NIOS II中去使用这些芯片呢? 我们在开发中会有多个选择:
1.如果这个芯片是使用数据和地址总线的,并且补线时没有足够的单独引脚,那么这个芯片必须挂接在tri_stat总线上,这种用法和我们以往单片机或MCU 类似,在SOPC Builder中直接定义用户逻辑,如果有额外的控制引脚,就需要用PIO来驱动,虽然公用数据地址线节省了引脚,但做控制时序费劲了。
2.如果这个芯片单独使用数据和地址,那么我们会直接做成Avalone总线的Slave设备,在Sopc Builder中自己定义component。需要写HDL模块,自己定控制、状态、数据寄存器和控制位定义,这种方式控制灵活,易于实现复杂的控制时序。
3.在Quartus II 工程中画电路模块(或用HDL写电路模块),这种方式是独立于SOPC定义的模块之外的,做一个纯电路的处理模块,有时候会比较容易实现某些灵活的处理。

18.在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中就可以了。


19. 在做count_binary这个例子时,出现一个错误: error: `BUTTON_PIO_IRQ' undeclared (first use in this function) BUTTON_PIO_IRQ的值如何给他定义? 答:这个错误可能是在sopc builder中定制的pio端口名称是否与程序中用的不一致,要和程序里的一致,把pio组件的名称就改为button_pio,如下图:
如果已经这样设置,还有可能是没有设置中断号,具体应该这样设置:


20.在Quartus II中编译时出现如下错误:
Error: Node instance "cpu_bht" instantiates undefined entity "cpu_bht_module"
点击错误的地方弹出一个对话框

这个错误是怎么回事?怎样解决?
答:可能是在SOPC中所选的CPU型号不正确,换一个试试。

21.怎样自动分配管脚?
答:在Quartus II自动分配管脚有一个方法,点击Assignments->Import Assginments,导入一个管脚分配文件,后缀为.csv .txt等,前提是在顶层原理图中各个输入输出的名称要和这个文件中的名称一致。

22.在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 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试试。

23.在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"这里的目录是初始的目录,把它改为正确的目录。

24.在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 not constant
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 not constant
system_description/alt_sys_init.c:75: error: (near initialization for `ext_flash.dev.read')

答:ONCHIP_MEMORY_BASE没有赋值,在alt_sys_init.c 程序的开头加上#define ONCHIP_MEMORY_BASE 0x00000000后面的这个地址要与SOPC中的对应。

25. 在NIOS II IDE编译时出现如下错误是怎么回事?
Pausing target processor: not responding.
Resetting and trying again: FAILED
Leaving target processor paused

答:以下是一位FAE的回答:
1. 关于USB-Blaster在Nios II IDE下载时会发生偶发性错误,这种现象主要是IDE software与Nios II CPU透过USB-Blaster在做通讯时发生错误,若是确认FPG上配置没有错误,连续发生错误的机率应该是相当的低,您只需要重新下载即可。
2. 若您使用Nios II IDE 6.0,请尽量配合SOPC Builder 6.0重新build您的system,并且使用Quartus II 6.0重新compile您的project,以减少CPU与IDE software不兼容的情形。

26.在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

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

28.怎样使用DE2板上的数码管,绑定管脚时需要注意什么?请举一个例子说明。
答: DE2板上的数码管只用了7位,小数点位默认为高电平。例如,在做例程count_binary时,需要用到两个数码管,以实现00到FF的计数,在 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,这样才能让两个数码管正常显示并计数。

29. 在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这个问题说明板子的复位电路可能有问题,或装载程序的外部SRAM或SDRAM和CPU 的连接或时序有问题,也有可能是软件偶尔的错误。若是软件偶尔的错误,可以先复位一下CPU,然后再下载程序;或者断电后重新下载.sof和NIOS II 程序

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

31.在SOPC中加了一个200KB的onchip_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_memory和M4K RAM根本就不是一个概念。Quartus II中编译出现这个错误,是由于设计中用到了太多的M4K。

32. 关于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 address和reset address 不一样,那么程序从reset address 启动后将把放在reset address 处的普通只读程序代码拷贝到text address 。NIOS II软件中的rodata address指定的是只读数据的存放地方。如果rodata address和reset address 不一样,那么程序从reset address 启动后将把放在reset address 处的只读数据拷贝到rodata address 。
NIOS II软件中的rwdata address指定的是可读写数据的存放地方。如果rwdata address和reset address 不一样,那么程序从reset address 启动后将初始化rwdata address 处的可读写数据。

33. 如何提高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。

34.如何优化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

35. 关于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的数据总线

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

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

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

39. 安装了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.1和6.0的路径分别为nios_51和nios_60,都不是nios2,所以安装后找不到模板工程很正常。但它的一些必要文件又确实是安装在了 nios_51或nios_60中。我也遇到了过同样的问题,想到了一个简单的方法可以解决:
1.把文件夹nios_51或nios_60改为nios2,启动Nios II,就可以看到所需模板工程。
2.退出Nios II,把文件夹名还原。
3.再次启动Nios II,你会发现模板工程依然还在。

40.Nios II汉化解决方案
答:NIOS II IDE实际上是在eclipse平台上的一个应用插件,而Eclipse 是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。可访问如下网站:
1.Eclipse官方网站http://www.eclipse.org/
2.中国Eclipse社区 http://www.eclipseworld.org/bbs/index.php
下面介绍如何汉化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个文件夹language和links
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一个插件。对于我们新手来说这还是必要的

 

 

 

 

41.FLASH下载内容为空
在有SDRAM和FLASH的SOPC中,如果最后要下载程序到FLASH中,在NIOS II 中用FLASH PROGRAMER下载时有  

# Programming flash with the project
"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --base=0x03000000 --cable='ByteBlas
terII [LPT1]' --sidp=0x04001038 --id=417604522 --timestamp=1257256685  "ext_flas
h.flash"
Empty flash content cannot be programmed or verified
的错误。提示说要给flash编程的数据是空的。
  

答:原因是RESET VECTOR指向了SDRAM,应该指向FLASH。因为这里要下载的是一个工程,下载的是工程内容,reset vector指向了SDRAM与flash就没有关系了,也就不会下载到flash中。

 

42.Verifying 000xxxxx ( 0%)
Verify failed between address 0xxxxxx and 0xxxxxx
Leaving target processor
paused

论坛和网络上关于这个问题问的特别多,也是新手常见的一个问题,下面我就这个问题稍微总结一下:  

 

1. 首先要根据address后面的两个地址判断出错的到底是什么器件。一般情况出现错误的大多是存储器。
    判断的方法是根据sopc中的地址,或者是system.h中的地址,查找相应出错的器件。
2. 检查硬件焊接是否正常。
    很多时候有些问题是硬件焊接造成的,这个主要针对的是自己焊接的板子,一旦地址数据总线有任何焊接问题,都会出现verify failed错误。
3. 检查sopc中的componet是否正常。
    如果是自己加入的接口逻辑,这个部分要确认其正常与否。
4. 检查Quartus中的设计:
    检查引脚锁定是否正确,必须一一对应,不能有一个错误;
    地址对齐问题:针对8、16、32位的外部存储器,对应地址最低位的应该是0、1、2。也就是说如果用16位的外部存储器,那么它的最低位是ADD[1],而ADD[0]是不用的,其他同理。
    数据总线必须是双向IO口,这点很容易忽略。
    如果是SDRAM,需要计算并设定PLL的相移。
5. Nios IDE中检查项目设计是否正确。

43. Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
  Resetting and pausing target processor: OK
  Reading System ID at address 0x00201040: verified
  No CFI table found at address 0x00000000
  Leaving target processor paused

  下载FLASH时出现这个问题?
答:这个是FLASH设置问题,需要几点需要注意:
  1. 数据线双向;
  2. 16位和8位模式要分清楚;
  3. 在SOPC builder中要根据自己的FLASH类型正确设置参数,并行FLASH要加三态桥。

44.make -s all includes
  Compiling int01.c...
  Linking int01.elf...
  /cygdrive/c/altera/90/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/http://www.cnblogs.com/http://www.cnblogs.com/nios2-elf/bin/ld: region ram is full (int01.elf section .rwdata). Region needs to be 32 bytes     larger.
  /cygdrive/c/altera/90/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/http://www.cnblogs.com/http://www.cnblogs.com/nios2-elf/bin/ld: section .bss [00000020 -> 00000233] overlaps section .exceptions [00000020 -> 00000147]
  /cygdrive/c/altera/90/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/http://www.cnblogs.com/http://www.cnblogs.com/nios2-elf/lib/mno-hw-mul/libsmallc.a(writer.o)(.text+0x1c): In function `_write_r':
  /build/nios2eds-gnutools-win32-9.0/bin/nios2-gnutools/src/newlib/newlib/libc/reent/writer.c:57: Unable to reach errno (at 0x00000020) from the global pointer (at 0x0000b7c4) because the offset   (-47012) is out of the allowed range, -32678 to 32767.

  collect2: ld returned 1 exit status
  make: *** [int01.elf] Error 1
  Build completed in 55.703 seconds
  这个问题是什么原因啊?

答:出现这种情况是没有使用SDRAM,用FPGA内部的onchip memory。因为FPGA内部的资源有限,onchip memory比较小,如果运行比较大的程序就会出现上述错误。

你可能感兴趣的:(【连载】【FPGA黑金开发板】NIOS II那些事儿--NIOS II 常见问题(FAQ))