这不是一篇构建nios的教程,而是遇到的各种问题以及解决方法。至于构建教程,网上一大把,我推荐正点原子的FPGA教程,比较新,比较详细,通俗易懂!!!
这里以一个点亮LED灯的Nios软核为例,很明显,需要如下IP核,以及正确的连线(否则各种莫名其妙的错误),效果如下所示:
这里多了一个按键控制的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语言工程以及烧录掉电不消失。