tag 标签: NIOS

相关博文
  • 热度 4
    2020-4-18 17:39
    1321 次阅读|
    0 个评论
    rtthread移植到nios ii中
    上次参加面板版社区评测的活动,获得了一本 《RT_Thread内核实现与应用开发实战指南》 ,看完了这本书之后,因为我手上有fpga的开发板一直就想把rt_thread移植到fpga中。看了RT-Theread源码BSP文件夹中nios的readme_cn.txt的介绍尝试了之后编译不通过,总是提示缺少各种头文件。我手上的fpga开发板是 小梅哥 的AC620,正好在网上找到了小梅哥的文章进行学习参考尝试 http://www.elecfans.com/d/593679.html ,也是编译不过去。期间又在rt-thread nano学习群里请教了" rt_thread小师弟 ",他建议我在编译时提示缺什么文件就添加什么文件,最终我调试成功了。 1.根据小梅哥的文章先把fpga工程和硬件平台搭建好,并创建好nios ii eclipse工程。小梅哥写的很详细了,我就不在这里啰嗦了。 2.我先创建好rt_thread文件夹,并在文件夹里把RT_THREAD的bsp文件夹中nios文件全部拷入,include文件夹、libcpu文件夹、src文件夹和文件内容。然后整个rt-thread文件夹拖入工程中。如图 不用按照readme.txt文件中介绍的添加那一点文件 ,后面编译时还会报错添加好几个文件,不如现在一次把能添加进去的都添加进去。 根据小梅哥的提示把application文件从bsp中拖出到工程根目录中。在 设置中添加头文件搜索路径,选中工程,鼠标右击选择Properties选项,在弹出的对话框中选中Nios II Application Paths选项,添加include和bsp文件夹道头文件路径中,然后确认关闭。 如图 此时选中的路径是工程文件夹下include 和bsp路径。这一点我试了好久。 3.然后开始编译工程,当提示缺少什么文件时就从rt-thread源码文件中找相应的文件添加到工程文件夹中。我么在搭建硬件平台时我 么给各个接口取得名字还会和软件本身定义有出入对应不上,这里也会报错,我们要在system.h代码中找到自己定义的接口名称复制下来,把报错找不到的接口名称修改。 4.最后编译出错的地方是startup.c中一个地址定义 “_alt_partition_sdram_load_addr”,没有找到好的办法我就把这个功能屏蔽了,如图 最终编译通过下载到AC620 FPGA开发板中led灯正常闪烁 。
  • 热度 3
    2018-1-25 11:04
    2517 次阅读|
    1 个评论
    如果使用静态地址对齐(每个寄存器在Avalon总线上占4个字节的地址) 设置IP使用静态地址对齐的方式为,在hw.tcl脚本里加上一局话:set_interface_property as addressAlignment {NATIVE} 在软件编程时 可以使用IOWR(基地址,寄存器编号(n),数据)对自定义IP的第n个寄存器进行写入操作 可以使用IORD(基地址,寄存器编号(n)) 对自定义IP的第n个寄存器进行读出操作 如果使用动态地址对齐,(每个寄存器在Avalon总线上占 数据位宽/8个字节的地址)(默认) 在软件编程时,使用IOWR_32DIRECT(数据位宽为32位)、IOWR_16DIRECT(数据位宽为16位)、IOWR_8DIRECT(数据位宽为8位)进行写操作 在软件编程时,使用IORD_32DIRECT(数据位宽为32位)、IORD_16DIRECT(数据位宽为16位)、IOWR_RDIRECT(数据位宽为8位)进行写操作 IOWR_8DIRECT(基地址、地址偏移量、数据),地址偏移量 = 寄存器编号*1 IOWR_16DIRECT(基地址、地址偏移量、数据),地址偏移量 = 寄存器编号*2 IOWR_32DIRECT(基地址、地址偏移量、数据),地址偏移量 = 寄存器编号*4 IORD_8DIRECT(基地址、地址偏移量),地址偏移量 = 寄存器编号*1 IORD_16DIRECT(基地址、地址偏移量),地址偏移量 = 寄存器编号*2 IORD_32DIRECT(基地址、地址偏移量),地址偏移量 = 寄存器编号*4
  • 热度 2
    2014-8-12 07:50
    704 次阅读|
    1 个评论
    开发Altera Nios II软件可使用Nios II IDE或 Nios II Software Build Tools for Eclipse(即:Nios II SBT for Eclipse),使用“Build All”或“Build Project”编译工程后有时会出现如下错误: c:/altera/11.0/nios2eds/bin/gnu/h-i686-mingw32/bin/../lib/gcc/nios2-elf/4.1.2/../../../../nios2-elf/bin/ld.exe: xxx.elf section `.text' will not fit in region `onchip_mem' c:/altera/11.0/nios2eds/bin/gnu/h-i686-mingw32/bin/../lib/gcc/nios2-elf/4.1.2/../../../../nios2-elf/bin/ld.exe: region `onchip_mem' overflowed by nnn bytes collect2: ld returned 1 exit status make: *** Error 1 其中:“xxx”是工程名,“nnn”是十进制数字,“.text”表示代码段,有时也可能是“.bss”(未初始化的变量段)、“.rodata”(只读数据区, 一般存放静态全局变量)、“.rwdata”(可读写变量数据区)等。 上述错误表示程序的代码段太大,FPG**上内存(Onchip Memory)不够,差“nnn”字节,编译出错。有时即使是一个很简单的“Hello World”程序,如果使用的FPG**内资源(内存)少,由于编译时要链接系统库(如设备驱动等),也好出现上述错误。   解决办法如下: 1、 Nios II IDE 第一步:右击工程,点击“System Library Properties”。     第二步:进入 C/C++ Build 页面,选择优化及调式级别, Optimization level 选“ -0s ”(按内存大小优化)、 Debug level 选“ g3 ”,按 Apply 后 OK 退出,如下图所示:     或者选择发行版( Release )去掉所有调试代码,按 Apply 后 OK 退出,如下图所示:     第三步:进入“ System  Library ”页面,压缩系统代码(驱动等),勾选“ Program never exits ”等 5 项,按 OK 退出,如下图所示:     重新编译,一般问题就解决。 2 、 Nios II Software Build Tools for Eclipse 第一步:启动 BSP 编辑器,进入“ Main | Setting | Common ”页面,勾选“ enable_reduced_device_drivers ”和“ enable_small_c_library ”两项,减少系统代码,按 Generate 后 Exit :       第二步:右击工程,启动属性(Properties)编辑器,点击Nios II Application Properties,Debug level选“Level3”,Optimmization level选“Size”,根据内存大小优化代码,按Apply后OK退出:     上述两步也可合成一步:右击 xxx_BSP ,启动属性( Properties )编辑器,点击 Nios II BSP Properties ,按下图选择即可:     重新编译,一般问题就解决。  3、上述处理后,重新编译,如果还是不够,就只有启动SOPC Builder修改(增大)onchip_mem了,如下图所示。如果问题还是没有解决,就只有重新设计硬件,扩展外部SRAM或SDRAM了。  
  • 热度 3
    2011-8-12 16:11
    869 次阅读|
    3 个评论
  • 热度 2
    2011-3-16 21:41
    1824 次阅读|
    0 个评论
    在FPGA开发板上都有几种不同的存储器,比如SDRAM,FLASH,EPCS,还有内部onchip memory,这几种存储器间是如何通信或者构建一个系统。该如何搭配他们呢,不少人都问到这个问题。在这里我做个总结以方便初学者的学习。 首先看看在sopc builder中reset address和nios IDE中System Library中的program memory(.text)、read-only data memory(.rodata)等 这几个地址的关系和作用 根据altera 的文档解释如下: .text :代码执行区 .rodata:只读数据区,存放静态全局变量 .rwdata:可读写数据区,存放可读写变量和指针变量 .bss:未初始化变量区 .text-the actual executable code .rodata-where 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 SOPC builder 在Nios II more "cpu_0" setting 标签中的reset address决定了flash programmer 的下载存储器(一般是选EPCS controller 或者CFI flash),并且决定了程序从此处开始启动。exception address指定的是异常处理地址。当然,程序在运行前所有的数据都是存放在flash(EPCS或者CFI FLASH)中如果你设计的系统reset address与其它地址的设置不相同,比如reset address 和exception address ,reset address 和IDE中的program memory(.text)设成不同的存储器,那么系统从reset address启动时都会从flash中把相关数据自动下载到相应的地址或者初始化相应地址。 通过上面的认识,我们就比较清楚了各存储器间可进行哪些搭配了,reset address的选择可选EPCS controller 或者CFI flash ;program memory(.text)可选择onchip memory ,SDRAM,CFI flash等。如果reset address为EPCS则在使用flash programmer时程序是下载到EPCS芯片中。如果reset address选择CFI flash,则flash programmer时程序是下载到CFI flash芯片中。 需要注意的是这里有个特殊情况。例如在开发板上经常有这么一个简单的系统,CPU+onchip memory +LED_PIO,reset address选择onchip memory;感觉整个系统都没有用到flash。而且onchip memory在系统断电后数据就会消失,那么程序代码是存在哪,系统是如何从onchip memory启动听呢?先来看看onchip memory模块的描述信息:在onchip_memory.v中有这么一段the_altsyncram.init_file = "onchip_memory.hex",很明显onchip memory的初始数据来自"onchip_memory.hex",而"onchip_memory.hex"是在Nios IDE的System Library中存储器有选择onchip_memory(至少有一项是选择onchip_memory,如果都不选,就不会生成)时,在build结束的时候生成的。于是当我们把System Library中存储器的选择都选择onchip_memory时,在IDE中build结束后所有的程序代码都生成在"onchip_memory.hex"中,再在QII中全编译一次时,系统通过onchip_memory.v调用"onchip_memory.hex"从而把所有的程序代码以及配制信息都生成在POF和SOF文件中,使用QII的programmer直接下载到EPCS芯片或者FPGA芯片内程序都会立即执行。因为这里的特殊性就有很多网友询问了,reset address 选择onchip memory,而IDE中把代码区都选择SDRAM调试的时候程序正常运行,再在QII全编译后下载POF文件就运行不了呢?问题就是出在这了,在这里可以总结出一点,要让程序在onchip memory之外的存储器中运行,那么reset address就必然选EPCS 或者CFI flash,并且要通过flash programmer把程序下载到flash中。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhangyanquen/archive/2010/07/05/5714806.aspx
相关资源
广告