關於Quartus構建nios軟核以及eclipse建立c語言工程以及成功下載到FPGA晶片過程遇到的各種問題以及解決方法詳解
這不是一篇構建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語言工程以及燒錄掉電不消失。