【小梅哥SOPC學習筆記】NIOS II處理器運行UC/OS II


SOPC開發流程之NIOS II 處理器運行 UC/OS II

這里以在芯航線FPGA學習套件的核心板上搭建 NIOS II 軟核並運行 UCOS II操作系統為例介紹SOPC的開發流程。

第一步:建立 Quartus II 工程

建立 Quartus II 工程時需要注意以下幾點

1、 器件選擇為 EP4CE10F17C8N;

2、 工程路徑中不得出現非法字符(空格和中文字符);

3、 開發工具選擇 Quartus II 11.0及以上,這里我選擇的版本為 Quartus II 15.1。

4、 由於我們最終的軟件工程也是建立在 Quartus II 工程目錄下的,而軟件工程有一個最讓人崩潰的地方就是,軟件工程在建立時,很多包含文件是以據對路徑存在的,如果你更改了工程路徑,那么當你再次編譯工程時,就會報錯。所以這里我在建立工程時,直接在 E 盤根目錄下建立了一個 mysystem 的文件夾,並將工程建立在此文件夾中。這樣可以避免路徑太深,以后切換電腦時,只需要將工程直接拷貝到新的電腦的 E 盤下即可。只要 QII 軟件安裝位置相同,再次編譯軟件工程就不會報錯。

第二步:打開 Qsys 工具

在 Quartus II 軟件中,依次點擊 tools/Qsys,以打開 Qsys 工具。

第三步:在 Qsys 系統中添加 NIOS II 處理器

在左側的 IP Catalog 的搜索框中,輸入 nios,在搜索結果中,選擇並添加 NIOS II(Classic) Processor 到右側的 System Contents 中來。添加時,選擇 NIOS II/f 型 CPU。添加完成后,在

System Contents 中修改其名字為 mycpu。

圖片1

添加完成后,會報如下錯誤

 

圖片2

這個是因為目前只添加了CPU,還沒有添加對應的存儲器,因此會報錯。這里不用理會,在后面的步驟中,只要按照操作來,這些錯誤最好都會消失的。后續操作中如果遇上其他錯誤也不要驚慌,最后只要系統搭建完成,錯誤都是會消失的。

第四步:在 Qsys 中添加 UCOS 系統所需定時器

在左側的 IP Catalog 的搜索框中,輸入 timer,在搜索結果中,選擇並添加 Interval timer 到右側的 System Contents 中來。添加時,將 timeout period 設定為 10ms。添加完成后,修改其名字為 ucosii_timer。

 

圖片3

第五步:在 Qsys 中添加 SDRAM

在左側的 IP Catalog 的搜索框中,輸入 sdram,在搜索結果中,選中並雙擊 SDRAM Control,在打開的參數配置選項卡中,按照如下圖所示的配置進行設置:

 

圖片4

圖片5

添加完成后,修改其名字為 sdram。

第六步:在 Qsys 系統中添加 JTAG_UART

在左側的 IP Catalog 的搜索框中,輸入 uart,在搜索結果中,選擇並添加 JTAG UART 到右側的 System Contents 中來。添加時,所有參數默認即可。添加完成后,修改其名字為 JTAG_ UART_0。

第七步:在 Qsys 系統中添加 sysid

在左側的 IP Catalog的搜索框中,輸入 sys,在搜索結果中,選擇並添加 System ID Peripheral 到右側的 System Contents 中來。添加時,設定 32bit system id 為自定義值,我這里設定為0x00000002。添加完成后,修改其名字為 sysid0。

第八步:連線和導出端口

自此,所有的外設添加就已經完成了,接下來,需要將每個模塊的端口連接到對應的總線上,這里不一一介紹,詳情請參看下圖:

 

圖片6

其中,clk_100M 模塊的 clk_in 和 clk_reset,以及 sdram 模塊的 wire 需要 export。 將 ucosii_timer 和 jtag_uart_0 的 irq 連接到 mycpu 的 d_irq 上,在右側的 IRQ 一欄中, ucosii_timer 的中斷號設置為 0,jtag_uart_0 的中斷號設置為 1。 注意,在Quartus II13.0及以前的版本中,所有部件第二列name欄中並不會有d_irq或irq這樣一個信號,這個無需在意,只是沒顯示而已。只需要直接點擊右側的IRQ一欄中的空心圈並輸入序號即可完成中斷的分配,如下圖所示:

 

圖片7

第九步:設定 sdram 基地址

在 Base 一欄中,將 sdram 模塊的起始地址設置為 0,然后點擊地址前面很小的那個鎖的符號,使其變為鎖定狀態。

第十步:自動分配所有模塊地址

在 Qsys 系統中,依次點擊菜單欄中的 sysytem/Assign Base Address,系統即可自動為我們分配各個模塊的基地址。由於 sdram 的基地址本身處於鎖定狀態,所以在此過程中,可能其他模塊的基地址會因為自動修改而發生變化,但是 sdram 的基地址將保持不變。

第十一步:設定 CPU 的復位向量地址和異常向量地址

雙擊 mycpu 模塊,在打開的參數設置中,將 Reset Vector 和 Exception Vector 都選擇為 sdram.s1。

以上,我們就完成了完整 Qsys 系統的搭建,接下來,我們就可以生成 Qsys 系統的 RTL 代碼了。

第十二步:保存設計

點擊 file/save,將我們的系統保存,我這里命名為“cpu”。

第十三步:生成 Qsys 系統的 HDL 代碼

在 Qsys 系統中,依次點擊 Generate/Generate HDL,在彈出的窗口中,點擊 Generate 來完成 HDL 代碼的生成。此過程根據電腦配置的不同,大約需要 3 到 5 分鍾。

第十四步:在 Quartus II 系統中添加並例化 QSYS 系統

在 Qsys 系統中,依次點擊 Generate/HDL Example,在打開的界面中,將 HDL Example 中的代碼選中並復制,如下圖中紅線圈起來的內容:

 

圖片8

回到 Quartus II 工程中,新建一個 Verilog HDL 文件,將剛剛復制的內容粘貼進去,將文件保存,命名為 mysystem。

第十五步:添加鎖相環

在 Quartus II 軟件中,依次點擊 tools/IP Catalog,在右側彈出的窗口中,在搜索欄輸入 pll,然后雙擊打開搜索結果中的 Altera PLL,在打開的窗口中,選擇 Verilog 格式,並保存名為 sys_pll。然后點擊 OK。等待大於 10 秒鍾左右,會彈出 PLL 的配置窗口,在配置窗口中,按下圖所示的內容進行配置:

 

圖片9

第十六步:添加 Qsys 系統到 Quartus II 工程中

第十四步中,只是完成了 Qsys 系統的例化,實際並沒有將 Qsys 系統添加到 Quartus II 工程中來。這里,我們雙擊 Quartus II 軟件中 Project Navigator 窗口中 Files 選項卡中的 Files

 

圖片10

在彈出的窗口中,找到 E:\mysystem\cpu\synthesis 路徑下的 cpu.qip 文件,加入到工程中。

第十七步:完善 mysystem.v 模塊

將 mysystem.v 中的內容完善如下:

module mysystem(
    refclk,
    rst_n,
    sdram_addr,
    sdram_ba,
    sdram_cas_n,
    sdram_cke,
    sdram_cs_n,
    sdram_dq,
    sdram_dqm,
    sdram_ras_n,
    sdram_we_n,
    sdram_clk
); 
    input refclk;
    input rst_n; 
    output [12:0]sdram_addr;
    output [1:0]sdram_ba;
    output sdram_cas_n;
    output sdram_cke;
    output sdram_cs_n;
    inout [15:0]sdram_dq;
    output [1:0]sdram_dqm;
    output sdram_ras_n;
    output sdram_we_n;
    output sdram_clk; 
    
    wire cpu_clk;
    wire sdram_clk;
    wire cpu_reset_n;
    wire pll_locked;
    
    assign cpu_reset_n = pll_locked; 
    
    cpu u0 ( 
        .clk_clk       (cpu_clk),       //   clk.clk 
        .reset_reset_n (cpu_reset_n), // reset.reset_n 
        .sdram_addr    (sdram_addr),    // sdram.addr 
        .sdram_ba      (sdram_ba),      //      .ba 
        .sdram_cas_n   (sdram_cas_n),   //      .cas_n 
        .sdram_cke     (sdram_cke),     //      .cke 
        .sdram_cs_n    (sdram_cs_n),    //      .cs_n 
        .sdram_dq      (sdram_dq),      //      .dq 
        .sdram_dqm     (sdram_dqm),     //      .dqm 
        .sdram_ras_n   (sdram_ras_n),   //      .ras_n 
        .sdram_we_n    (sdram_we_n)     //      .we_n 
    ;
    
    sys_pll_0002 sys_pll_inst ( 
        .refclk   (refclk),   //  refclk.clk 
        .rst      (~rst_n),      //   reset.reset 
        .outclk_0 (cpu_clk), // outclk0.clk 
        .outclk_1 (sdram_clk), // outclk1.clk 
        .locked   (pll_locked)    //  locked.export 
    );
    
endmodule 
 

第十八步:分析和綜合;

第十九步:分配引腳

引腳分配如下表所示:

圖片12-1圖片12-2圖片12-3

第二十步:全編譯

此過程大約需要 6 到 10 分鍾左右;

第二十一步:配置固件到FPGA芯片中

將生成的 SOF 文件配置到芯航線開發板中。

第二十二步:打開 NIOS II EDS 軟件

在 Quartus II 軟件中,依次點擊 tools/NIOS II software Buil tools for Eclipse,在打開的

Workspace Launcher 中,設定 Workspace 為 E:\mysystem,然后點擊 OK。

第二十三步:建立 UC/OS II 模版工程

在打開的開發環境中,點擊 File/New/Nios II Application and BSP from Template。

 

圖片13

在打開的窗口中,按下圖所示的內容進行選擇:

 

圖片14

然后系統便能為我們自動生成完整的系統,生成后的界面如下所示:

圖片15

第二十四步:編譯軟件工程

此時,我們按下鍵盤上的組合鍵“ctrl + B”,就能夠對軟件工程全編譯。

第二十五步:下載並運行

編譯完成后,點擊 Run/Run Configurations,在打開的窗口中,

 

圖片16

雙擊 Nios II Hardware,在彈出的界面中,選擇 Project Name 為 myucosii(注:圖中我的工程名為 myucos,只是工程名字不同而已,無其他影響)。

 

圖片17

選擇完成后,切換到 Target_Connection 選項卡中,如下圖:

圖片18

若 1 處和 2 處無內容,則點擊 3 處的 Refresh Connections,直到 1 和 2 中出現我們的 Cable 和 Device 為止。選中 4 處的兩個選項。然后點擊 5 處的 apply,最后點擊 6 處的 Run,則系統將啟動軟件燒寫過程,並在燒寫完成后啟動 FPGA 中的 Nios II 處理器。

此時,我們在Eclipse 的 Nios II Console 窗口中便能看到 Nios II 處理器通過串口發送到 PC 上的內容,如下圖所示:

圖片19

自此,整個在芯航線FPGA上搭建 NIOS II 處理器並運行 UC/OS-II 系統告一段落。

本文主要通過一個最簡單的例子介紹了常見的SOPC簡單開發流程,后續詳細的SOPC開發教程敬請關注小梅哥后續視頻教程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM