這不是一篇構建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語言工程以及燒錄掉電不消失。
?
