这不是一篇构建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核以及生成相关需要的文件
.https://blog.csdn.net/kangkanglhb88008/article/hardware/system_qsys.sopcinfo? ? 软核的一些信息文件,比如这个软核的systemID等等,后面eclipse构建c语言工程就是需要这个文件进行构建,从而针对性的生成一些驱动库函数
.https://blog.csdn.net/kangkanglhb88008/article/hardware/synthesis/system_qsys.v? ? 这个就是Quartus工程的顶层模块会例化调用的软核模块(也就是我们需要的最终模块)的verilog源码
.https://blog.csdn.net/kangkanglhb88008/article/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语言工程以及烧录掉电不消失。
? |