不是一篇构建nios的教程,而是遇到的各种问题以及解决方法。至于构建教程,网上一大把,我推荐正点原子的FPGA教程,比较新,比较详细,通俗易懂!!!

这里以一个点亮LED灯的Nios软核为例,很明显,需要如下IP核,以及正确的连线(否则各种莫名其妙的错误),效果如下所示:

关于Quartus构建nios软核以及eclipse建立c语言工程以及成功下载到FPGA芯片过程遇到的各种问题以及解决方法详解_Nios

这里多了一个按键控制的IP核,不过没关系。

记住:一模一样按照我这里的连线,一条线都不能少,否则后果自负。以及export一列,也得按照红色框的来,因为这些IP核是要对芯片外部通过引脚有通信的。比如pio核,就是通过引脚控制外部的LED亮灭的,epcs也是如此,因为epcs是FPGA芯片外部的flash芯片,用于储存代码,掉电不会消失。举个例,我之前忘记连了nios_qsys核的jtag_debug_module_reset信号的连线到其它核的rest线,如果我只是把程序下载到FPGA的片内memory(掉电程序消失),那么没问题,但是当我在eclipse中点击flash programmer界面,把xx.sof和我的C语言xx.elf文件下载进去时候,提示了一个错误

Error: Error code: 4 for command: $SOPC_KIT_NIOS2/bin/nios2-flash-programmer "……_epcs_flash_controller.flash" --base=0x0 --epcs --sidp=0x1890 --id=0x0 --timestamp=1329570479 --device=1 --instance=0 '--cable=USB-Blaster on localhost [USB-0]' --program –verbose

百度后发现,这是因为我忘了连接的刚刚那条jtag_debug_module_reset线,所以得在qsys界面重新打开xx.qsys文件,重新连上那条线(不需要再从头构建一次这些IP核,可以直接打开)。然后还需要再generate一次,首先软件提示你保存这个软核(如果你之前没有保存过),也就是所有的这些核,被集成了一个模块,取一个名字,system_qsys.qsys,然后generate后,会生成如下重要文件:

一,构建软核需要的IP核以及生成相关需要的文件

.../hardware/system_qsys.sopcinfo    软核的一些信息文件,比如这个软核的systemID等等,后面eclipse构建c语言工程就是需要这个文件进行构建,从而针对性的生成一些驱动库函数

.../hardware/synthesis/system_qsys.v    这个就是Quartus工程的顶层模块会例化调用的软核模块(也就是我们需要的最终模块)的verilog源码

.../hardware/synthesis/system_qsys.qip    相当于是给顶层模块指明system_qsys.v的一些依赖关系,库名等,可以看成是一个库的配置函数,这个在集成Qsys系统时候会用到

二,建立一个Quartus工程

建立一个自己FPGA芯片型号的工程

三,集成Qsys软核系统

在Quarts界面,Assiment-settings按钮,file,add,添加刚刚system_qsys.qip 这个软核配置文件,相当于是添加了所有库文件

同时给建立的工程添加一个顶层模块文件,比如qsys_hello_world.v,添加例化软核模块的代码,我的代码如下:

/ Descriptions:        hello_world顶层模块
module qsys_hello_world(
    input  sys_clk,
     input  sys_rst_n,
     
     //flash
     input  flash_data0,
     output flash_sdo,
     output flash_sce,
     output flash_dclk,
     
     output [7:0] led
);

//例化Qsys系统
    system_qsys u0 (
        .clk_clk          (sys_clk),          //        clk.clk
        .reset_reset_n    (sys_rst_n),    //      reset.reset_n
        .pio_led_export   (led),   //    pio_led.export
        .epcs_flash_dclk  (flash_dclk),  // epcs_flash.dclk
        .epcs_flash_sce   (flash_sce),   //           .sce
        .epcs_flash_sdo   (flash_sdo),   //           .sdo
        .epcs_flash_data0 (flash_data0)  //           .data0
    );


endmodule

 

除此之外,软件中,assignments-Device-pinOption界面,未使用的引脚全部配置为高阻态,使用的全部设为正常I/O

现在软核搞定了,还差最后一步,给软核模块的输入输出与fpga芯片外界建立IO引脚联系,Assignment-pinplanner,看电路图,一个个分配好引脚即可(如果有脚本文件也可以打开照着分配即可,按道理说脚本文件可以直接导入,可是不知道为啥不行)

四,全编译以及下载进入FPGA

全编译这个Quaruts工程,得到qsys_hello_world.sof文件,可以直接烧录进入FPGA了(从此这个FPGA就是一个单片机了),但是这样掉电会消失。接下来一个博客会讲解如何建立eclipse C语言工程以及烧录掉电不消失。