1. 程式人生 > >關於Quartus構建nios軟核以及eclipse建立c語言工程以及成功下載到FPGA晶片過程遇到的各種問題以及解決方法詳解

關於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語言工程以及燒錄掉電不消失。