NIOSII 常见问题.docx
《NIOSII 常见问题.docx》由会员分享,可在线阅读,更多相关《NIOSII 常见问题.docx(16页珍藏版)》请在冰豆网上搜索。
NIOSII常见问题
首先需要声明一点,下面部分问题来自网络,如果版权问题,请及时通知,我将会将其删除
在此提几点要求和规定:
1.此贴是NIOSIIFAQ,所以不收录其他相关内容;
2.大家通过回帖方式进行提问,如果有其他人可以解决,也是通过回帖方式进行解决;
3.问题解决以后,我会将其编入这个贴内,然后将问题跟帖删除,避免跟帖过多的影响。
4.禁止在回帖中涉及与NIOSII无关内容,一经发现立即删除。
-------------------------------------------华丽的分割线----------------------------------------------------------------------
1.NIOS能做浮点运算么?
答:
NIOS可以进行浮点运算,完全可以替代MCU,时钟可以跑到100Mhz,比ARM7还要快,ARM7时钟一般为72Mhz左右。
2.NIOS是否可以不使用SDRAM和并行FLASH?
答:
首先说明一下,SDRAM是用来运行程序的,FLASH是用来存储程序代码的(SDRAM掉电丢失,FLASH则不会),每次上电的时候,都需要将FLASH中的程序代码放到SDRAM中,然后再运行。
FPGA内部的memory(onchipmemory)比较小,跑比较大的程序就很难了,所以我们外扩了SDRAM,以便比较大的程序运行。
当然,我们也可以将并行的FLASH换成串行的FLASH,而且这样可以节省很多引脚。
其实EPCS1(4,16...)就是串行FLASH,所以我们可以利用它来存储代码,至于如何设置,我后面通过博客形式来给大家讲解。
3.我的QuartusII编译硬件时没有错误,但是在下载程序的时候去出现以下错误的信息?
Info:
StartedProgrammeroperationatThuMay0601:
39:
462010
Error:
ApplicationNios2on127.0.0.1isusingthetargetdevice
Error:
Operationfailed
Info:
EndedProgrammeroperationatThuMay0601:
39:
462010
不明白这是什么意思,时好时坏?
答:
这种情况出现在JTAG模式下,你在使用NIOS下的JTAG功能(比如利用BLASTER进行在线仿真),同时你又想下载*.sof文件(就是在JTAG模式下下载程序)。
简单说就是你的JTAG已经被占用了。
解决办法就是关闭你正在使用的JTAG功能,然后再下载*.sof文件。
初学者经常会犯这样的错误,一定要注意。
4.
答:
1.安装最好装在默认目录下,即:
X:
\altera目录下,如果自行指定目录的目录中含有空格或者汉字,在新建工程时,会出现如下错误提示:
Noprojecttemplatefoldersfoundin$sopc_kit_nios/examples/software.
2.工程的存放地址不要有中文,也不要有空格,不然建立工程时可能出现如下错误提示:
Thesoftwaresetting(STF)fileassociatedwiththisprojectisdamaged.Thismaybefixedbycopyingyoursourcefilesintoanewc/c++applicationproject.Formoredetailsseetheerrorlog.
这个问题还是NiosIIIDE对中文字符支持不好引起的,把目录名都改成英文而且不要有空格就没有问题了。
5.Usingcable"USB-Blaster[USB-0]",device1,instance0x00
Pausingtargetprocessor:
notresponding.
Resettingandtryingagain:
FAILED
Leavingtargetprocessorpaused
答:
我遇到这种问题是因为忘记将NIOS软核的复位(RESET)添加引脚了,或者是因为你所添加的引脚不是对应按键也能导致这种问题的发生。
6.请问一下使用EPCS4来保存程序,如何通过fpga加载到sdram里?
答:
如何使用EPCSX保存程序请看我最新发表的博文,地址:
如何通过FPGA加载到SDRAM,这个过程是NIOS内部完成的,不需要我们来控制。
7.怎样在TCL脚本分配管脚source.tcl有点问题:
#sourcestratix_pin_assign.tcl
couldn'treadfile"stratix_pin_assign.tcl":
nosuchfileordirectory
答:
FromtheToolsmenuselectTclScripts,andthenfromtheprojectfolderchoosethesetupscriptforyourparticulardevelopmentboard,andclickRun.
8.D:
\TEST\nios_sst60下载时出现错误:
Error:
Can'tconfiguredevice.ExpectedJTAGIDcode0x020010DDfordevice1,butfoundJTAGIDcode0x020B40DD.
答:
SOPC所选器件和开发板上的不一致。
9.在NOISII中Bulid例程hello_world都出现了错误,错误提示为:
gdrive/c/altera/kits/nios2/components/altera_nios2/HAL/src/alt_busy_sleep.c:
68:
error:
parseerrorbefore'/'token等错误全部由alt_busy_sleep.c引起,都是关于括号不匹配的问题,而alt_busy_sleep.c是IDE中的一个默认程序。
这个错误同样出现在D:
\TEST\DE2Project\software\nios2.
答:
找到system.h文件,里面有个关于系统时钟频率的设置项,应该是没有赋值,你手动赋值。
比如你用50MHZ的时钟,就设成50000000
如果总是出现上述问题,可能和软件有关系,建议重新安装软件。
注意quartus和NIOS安装版本一定要相同,不能混装。
10.这个错误是什么原因引起,把那个sdk_arm删除后,又提示另一个地方出错。
答:
运行NIOSIIIDE,点Project->Clear,重新Builde,应该可以解决问题。
11.在SOPC中Generate出现如下错误是怎么回事?
Error:
Generatorprogramformodule'epcs_controller'didNOTrunsuccessfully.只要在SOPC中加入epcs_controller就会出现此错误,无法生成一个元件。
答:
可能和软件有关系,建议重新安装软件(这个问题是我刚学NIOS遇到的最头痛的一个问题,问题的原因是Quartus和Nios安装的版本不一致)。
12.在NiosIIIDE中,怎样打开一个已经存在的工程?
每次新建工程比较麻烦。
答:
指定一个NiosIIIDE的工作目录,就打开了那个目录下存在的工程。
另外,在NiosII中是可以建立多个工程的。
13.在QuartusII中编译出现如下错误怎么办?
Error:
Can'tplacepinsassignedtopinlocationPin_AE24(IOC_X65_Y2_N2)
答:
按F1可以查看帮助,出现这样的错误的原因是:
CAUSE:
Youassignedtwoormorepinstothespecifiedlocation,buttheFittercannotplaceallthepinsinthatlocation.删除这个管脚即可。
有一种比较简便的方法,就是在工程目录中找到一个后缀为QSF的管脚配置文件,查找Pin_AE24删除那行语句就行了。
14.如何在NIOSIIIDE下跟踪查看变量的定义或者函数的定义?
答:
按住CTRL键,鼠标移动到变量或者函数名的地方,就可以发现这些地方高亮显示,单击就可以进入到变量或者函数定义的地方。
15.在count_binary.c有这样一段程序,它是如何操作的?
unsignedintdata=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(ParallelI/O)(在AvalonModules->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_BASE0x00001800,后面的这个地址要与SOPC中的地址对应。
17.如何在NIOSII中驱动外部芯片或设备?
答:
在开发过程中,我们经常会使用外接一些芯片,或外接一些实用电路,比如AD芯片、串并转换芯片等等,那么如何在NIOSII中去使用这些芯片呢?
我们在开发中会有多个选择:
1.如果这个芯片是使用数据和地址总线的,并且补线时没有足够的单独引脚,那么这个芯片必须挂接在tri_stat总线上,这种用法和我们以往单片机或MCU类似,在SOPCBuilder中直接定义用户逻辑,如果有额外的控制引脚,就需要用PIO来驱动,虽然公用数据地址线节省了引脚,但做控制时序费劲了。
2.如果这个芯片单独使用数据和地址,那么我们会直接做成Avalone总线的Slave设备,在SopcBuilder中自己定义component。
需要写HDL模块,自己定控制、状态、数据寄存器和控制位定义,这种方式控制灵活,易于实现复杂的控制时序。
3.在QuartusII工程中画电路模块(或用HDL写电路模块),这种方式是独立于SOPC定义的模块之外的,做一个纯电路的处理模块,有时候会比较容易实现某些灵活的处理。
18.在SOPC添加AvalonTrisatateBridge时,提示有如下错误,该如何解决?
Tristatebridge/tristatemasterrequiresaslaveoftypeAvalontristate.PleaseaddaslaveoftypeAvalontristate.
Generate按钮为灰色,无法Generate
答:
需要一个专门接三台桥的设备,把flash添加到sopc中就可以了。
19.在做count_binary这个例子时,出现一个错误:
error:
`BUTTON_PIO_IRQ'undeclared(firstuseinthisfunction)BUTTON_PIO_IRQ的值如何给他定义?
答:
这个错误可能是在sopcbuilder中定制的pio端口名称是否与程序中用的不一致,要和程序里的一致,把pio组件的名称就改为button_pio,如下图:
如果已经这样设置,还有可能是没有设置中断号,具体应该这样设置:
20.在QuartusII中编译时出现如下错误:
Error:
Nodeinstance"cpu_bht"instantiatesundefinedentity"cpu_bht_module"
点击错误的地方弹出一个对话框
这个错误是怎么回事?
怎样解决?
答:
可能是在SOPC中所选的CPU型号不正确,换一个试试。
21.怎样自动分配管脚?
答:
在QuartusII自动分配管脚有一个方法,点击Assignments->ImportAssginments,导入一个管脚分配文件,后缀为.csv.txt等,前提是在顶层原理图中各个输入输出的名称要和这个文件中的名称一致。
22.在NIOSII中编译时出现如下错误怎么解决?
错误是不是由SOPC中的RAM引起?
regionramisfull(count_binary.elfsection.text).Regionneedstobe24672byteslarger.
address0x80c1f8ofcount_binary.elfsection.rwdataisnotwithinregionram
Unabletoreachedge_capture(at0x00800024)fromtheglobalpointer(at0x0081419c)becausetheoffset(-82296)isoutoftheallowedrange,-32678to32767.
答:
可能时RAM的大小不够,也有可能是中断地址(exceptionaddress)的偏余量不够,设置大些就可以了。
如果还是出现这个问题,加一个SDRAM试试。
23.在QuartusII中,为什么编译一些样板工程都会出错?
Error:
DDRtimingcannotbeverifieduntilprojecthasbeensuccessfullycompiled.
Error:
EvaluationofTclscriptauto_verify_ddr_timing.tclunsuccessful
Error:
QuartusIIShellwasunsuccessful.2errors,1warning
答:
在做样板工程时要注意一个问题:
DuetothelibrarypathsthatarecodedintotheQuartussettingsforthisproject,ifauserwishestomodifythehardwaredesigntheymustfirststripoutanyoldpathsfromwithintheprojectsettingsfile(qsf)
在qsf文件中找到类似语句
set_global_assignment-nameVHDL_FILEC:
/MegaCore/ddr_ddr2_sdram-v3.2.0/lib/auk_ddr_tb_functions.vhd"这里的目录是初始的目录,把它改为正确的目录。
24.在NIOSIIIDE编译时出现如下错误是怎么回事?
system_description/alt_sys_init.c:
75:
error:
`ONCHIP_MEMORY_BASE'undeclaredhere(notinafunction)
system_description/alt_sys_init.c:
75:
error:
initializerelementisnotconstant
system_description/alt_sys_init.c:
75:
error:
(nearinitializationfor`ext_flash.dev.write')
system_description/alt_sys_init.c:
75:
error:
initializerelementisnotconstant
system_description/alt_sys_init.c:
75:
error:
(nearinitializationfor`ext_flash.dev.read')
答:
ONCHIP_MEMORY_BASE没有赋值,在alt_sys_init.c程序的开头加上#defineONCHIP_MEMORY_BASE0x00000000后面的这个地址要与SOPC中的对应。
25.在NIOSIIIDE编译时出现如下错误是怎么回事?
Pausingtargetprocessor:
notresponding.
Resettingandtryingagain:
FAILED
Leavingtargetprocessorpaused
答:
以下是一位FAE的回答:
1.关于USB-Blaster在NiosIIIDE下载时会发生偶发性错误,这种现象主要是IDEsoftware与NiosIICPU透过USB-Blaster在做通讯时发生错误,若是确认FPG上配置没有错误,连续发生错误的机率应该是相当的低,您只需要重新下载即可。
2.若您使用NiosIIIDE6.0,请尽量配合SOPCBuilder6.0重新build您的system,并且使用QuartusII6.0重新compile您的project,以减少CPU与IDEsoftware不兼容的情形。
26.在NIOSIIIDE中工程的SystemLibrary选项中的这几个选项代表什么意思?
.text.rodata.rwdata与reset.exception这几个地址之间的关系是什么?
答:
.text:
代码区.rodata:
只读数据区,一般存放静态全局变量.rwdata:
可读写变量数据区另外还有.bss:
存放未被初始化的变量。
.text—theactualexecutablecode
.rodata—anyreadonlydatausedintheexecutionofthecode
.rwdata—whereread/writevariablesandpointersarestored
heap—wheredynamicallyallocatedmemoryislocated
stack—wherefunctioncallparametersandothertemporarydataisstored
27.怎样让SDRAM和FLASH,SRAM的地址公用?
答:
sdram可以和sram,flash共用数据总线和地址总线.在sopcbuilder中添加SDRAM控制器时,在其sharepinsviatristate选择项上勾上Controllersharesdq/dqm/addrIOpins选项,这样sdram可以和sram,flash共用数据总线和地址总线.但是ATERA不推荐这样做,因为这样会降低SDRAM控制器的性能,在FPGA芯片管脚资源比较紧张的时候迫不得已才这样做。
28.怎样使用DE2板上的数码管,绑定管脚时需要注意什么?
请举一个例子说明。
答:
DE2板上的数码管只用了7位,小数点位默认为高电平。
例如,在做例程count_binary时,需要用到两个数码管,以实现00到FF的计数,在SOPC添加一个16位的PIOSEVEN_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.在NIOSIIIDE中调试,编译通过的软件时,出现了下面的提示,是什么原因?
Usingcable"ByteBlasterII[LPT1]",device1,instance0x00
Processorisalreadypaused
Downloading00000000(0%)
Downloaded57KBin1.2s(47.5KB/s)
Verifying00000000(0%)
Verifyfailed
Leavingtargetprocessorpaused
答:
Verifyfailed这个问题说明板子的复位电路可能有问题,或装载程序的外部SRAM或SDRAM和CPU的连接或时序有问题,也有可能是软件偶尔的错误。
若是软件偶尔的错误,可以先复位一下CPU,然后再下载程序;或者断电后重新下载.sof和NIOSII程序
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,为什么在QuartusII编译时出现这个错误?
Error:
Selecteddevicehas105RAMlocation(s)oftypeM4KRAM.However,thecurrentdesignneedsmorethan105tosuccessfullyfit
答:
SOPC中的onchip_memory和M4KRAM根本就不是一个概念。
QuartusII中编译出现这个错误,是由于设计中用到了太多的M4K。
32.关于sopc-builder中resetaddress的设置,一直搞得不是很明白。
答:
SOPC中的resetaddress指定的是最终全部软件程序代码下载到的地方,并且程序从resetaddress启动。
SOPC中的exceptionaddress指定的是系统异常处理代码存放的地方。
如果exceptionaddress和resetaddress不一样,那么程序从resetaddress启动后将把放在resetaddress处的系统异常处理代码拷贝到