1. 程式人生 > >helloworld:基於Qsys的第一個Nios II系統設計

helloworld:基於Qsys的第一個Nios II系統設計

一、平臺說明及設計目標

  • 軟體平臺:Quartus II13.0(64bit)及 Nios II 13.0 Software Build Tools for Eclipse
  • 硬體平臺:Altera Cyclone III EP3C16F484C6
  • 設計目標:實現FPGA平臺上的“Hello World”

二、實現步驟

1、新建工程

  • 開啟quartus新建一個工程:File -> New Project Wizard…工程路徑使用英文,不要含有空格等,否則後面會出現問題
    這裡寫圖片描述
  • 新增檔案:無新增檔案,點選Next即可
  • 器件設定:根據自己使用選擇即可,此處選擇Cyclone III EP3C16F484C6
    這裡寫圖片描述
  • EDA工具設定:由於此工程不進行模擬等,故不進行設定,如果需要進行ModelSim模擬,則在Simulation行中,選擇Tool Name 為ModelSim-Altera(這裡根據所安裝的ModelSim版本進行選擇),Format(s)選擇為Verilog HDL(這裡也是根據所掌握的硬體描述語言進行選擇)。點選 Next
  • Summary頁面:單擊 Finish 完成即可。

2、新建原理圖bdf檔案

  • File -> New..,選擇Design Files 中的Block Diagram/Schematic File,單擊OK即可,出現block1.bdf檔案
    這裡寫圖片描述

3、硬體部分設計

  • 啟動Qsys工具:單擊 Tools -> Qsys ,進入Qsys設定介面

  • 系統已經預設添加了時鐘模組,名稱為 clk_0 ,這裡選中 clk_0,右擊,選擇Rename,將其名稱去掉_0更改為clk,下面新增的模組也進行類似名稱更改。

  • 左面Component Library,是系統提供的元件庫,裡面有一些構成處理器的常用模組。右面是已經新增到系統的模組,也就是說,Nios II 軟核處理器是可以定製的,根據具體需要來。

  • 接著新增軟核處理器的各部分模組:總共需要新增Nios II Processor、On_ChipMemory(RAM or ROM)、JTAG UART、System ID Peripheral這4個模組。

  • 新增軟核Nios II Processor:在Component Library中搜索Nios II Processor,雙擊即可進行配置。首先需要選擇的是Nios II 核心的型別。Nios II 軟核的核心共分成三種,為e型、s型以及f型。e型核佔用的資源最少 600-800LEs,功能也最簡單,速度最慢。s型核佔用資源比前者多一些,功能和速度較前者都有所提升,f型核的功能最多,速度最快,相應的佔用資源也最多,選擇的時候根據需求和晶片資源來決定,這裡我們選擇s核。下面的 Reset Vector 是復位後啟動時的Memory 型別和偏移量, Exception Vector 是異常情況時的 Memory 型別和偏移量。現在還不能配置,需要 SDRAM 和 FLASH 設定好以後才能修改這裡,這兩個地方很重要。最後單擊 Finish,結束當前配置。

  • 新增片記憶體儲器:在元件庫中搜索 On Chip Memory,雙擊進行設定。主要設定Size中的Data width(資料位寬)為16位和Total memoy size(片內資源大小,根據晶片資源進行合理設定)為10240 bytes。單擊 Finish,結束當前配置。

  • **新增Jtag下載除錯介面:**JTAG UART 是實現PC和nios ii 系統間的序列通訊介面 ,它用於字元的輸入輸出,在NIOS II 的開發除錯中扮演重要角色。在元件庫中搜索 jtag uart。雙擊進行設定,選擇預設配置即可。單擊 Finish,結束當前配置。

  • 新增系統ID模組:系統ID是系統與其他系統區別的唯一標識,類似校驗和的這麼個東西,在你下載程式之前或者重啟之後,都會對他進行檢驗,以防止quartus和nios程式版本不一致的錯誤發生。在元件庫中搜索 system id peripheral,雙擊進行設定,選擇預設即可。單擊 Finish,結束當前配置。

  • 連線:將右面 Connections欄目中的相關線通過設定節點進行連線。首先所有模組的clk和復位reset需要連線起來。然後片記憶體儲器On-Chip Memory的s1和處理器nios2_qsys的data_master和instruction_master相連。JTAG除錯模組jtag_uart的avalon_jtag_slave和處理器nios2_qsys的data_master相連。系統ID模組sysid_qsys的control_slave和處理器nios2_qsys的data_master相連。最後,處理器nios2_qsys的中斷和jtag_uart的中斷相連線。最終的完成效果圖如下所示。
    這裡寫圖片描述

  • 進行軟核的相關設定

    • 雙擊nios2_qsys,進入處理器設定模組。在Core Nios II欄目下,將Reset vector memory 和 Exception vector memory 設定為onchip_memory.s1。

    • 單擊 System -> Assign Base Addresses,這時候我們會發現下部Messages視窗中原先的錯誤全部沒有了,變為0 Errors,0 Warnings。如果不是這個結果,返回去按步驟檢查。

    • 單擊 File -> Save,進行儲存,這裡我們儲存檔名為nios_qsys(檔案型別為.qsys)。

    • 選擇Generation選項卡,設定Create simulation model為None,然後單擊下面的Generate,進行生成。時間較長,大家耐心等待。生成完成後單擊close即可,然後關閉Qsys回到Quartus II介面。

  • 雙擊Block1.bdf的空白處,開啟Symbol對話方塊。單擊左下角的MegaWizard Plug-In Manager…,進入巨集模組呼叫介面,選擇Creat a new custom megafunction variation,單擊 Next> 進入下一步,在What name do you want for the output file下面的地址後面新增輸出檔案的名稱,如原來內容為E:/ADS-B/wtq20170407/NIOS_demo/NIOS_helloworld/,
    新增後為E:/ADS-B/wtq20170407/NIOS_demo/NIOS_helloworld/pll_nios。然後在右側搜尋框中搜索ALTPLL,選中即可,這一步主要為系統新增時鐘模組,然後單擊 Next>進入下一步。
    這裡寫圖片描述

  • 彈出ALTPLL設定對話方塊,這裡我們在 General欄目的What is the frequency of the inclk0 input?地方,將時鐘更改為50MHz,然後連續單擊 Finish完成操作,這時會彈出一個Quartus II IP Files對話方塊,單擊Yes完成即可,不需要進行任何操作。然後單擊Symbol對話方塊中的OK即可,最後將模組放在Block1.bdf中即可。
    這裡寫圖片描述
  • 雙擊Block1.bdf的空白處,再次開啟Symbol對話方塊。選擇左側的Libraries -> Project –> nios_qsys,然後單擊OK即可,將nios_qsys放置在空白處。同樣方法在空白處放置兩個輸入input和兩輸入與門and2,按下圖連線。
    這裡寫圖片描述
  • 單擊File -> Save,進行檔案儲存,名稱預設即可,如helloword.bdf。

  • 單擊 Project -> Add/Remove Files in Project…,單擊File name後面的瀏覽按鈕,選擇.qsys檔案(IP核檔案),單擊Add將其新增進來,然後單擊OK。(如果沒有這一步會出現錯誤Error:Node instance”xx”instantiates undefined entity”xx” vhdl ,意思是你的部分vhd檔案包括IP核等沒加入工程)

  • 預編譯 Processing -> Start -> Start Analysis & Synthesis,然後分配管腳:單擊Assignments –> Pin Planner,如下圖(這裡復位管腳用的是button按鈕,不能是撥碼開關,否則後面RUN AS Nios II hardware時會報錯)
    這裡寫圖片描述

  • 也可以通過tcl指令碼的方式分配管腳:新建tcl檔案,內容格式:set_location_assignment PIN_G21 -to CLK,然後Tools–>tcl scripts,選中tcl檔案,run。

  • 單擊Processing -> Start Complilation 進行編譯,並把sof檔案下載到板子裡,硬體部分到此結束。

4、軟體部分設計

  • 開啟Nios II 13.0 Software Build Tools for Eclipse,首先,需要進行Workspace Launcher(工作空間)路徑的設定,接觸過Eclipse的朋友都熟悉,自己設定即可,需要注意的是路徑中不要含有空格等,然後單擊OK即可。

  • 新建工程。單擊File -> New -> Nios II Application and BSP from Template,彈出Nios II Application and BSP from Template對話方塊。先選擇對應的SOPC系統,單擊SOPC Information File name後面的瀏覽按鈕,選擇我們之前硬體部分做好的軟核檔案,字尾名為.sopcinfo,這裡一定要注意,選擇的檔案一定要對應起來,否則會因為軟硬不匹配導致系統失敗。我這裡選擇的nios_qsys.sopcinfo,然後系統會自動讀取CPU name,我們不用再進行設定,下面填寫Project name,這裡我們填
    寫為helloword,工程模板(Project template)使用預設的即可。然後單擊Finish完成即可。這時候會在左側的Project Explorer中生成兩個工程檔案,如圖所示。
    這裡寫圖片描述
    這裡寫圖片描述

  • 雙擊開啟helloword工程下面的hello_word.c檔案,就可以看到c語言程式碼,我們新增一句printf(“Hello word! \n”);
    這裡寫圖片描述
  • 右擊helloword工程,選擇Nios II -> BSP Editor,進入Nios II BSP Editor配置介面。主要在main選項卡下hall中進行配置,具體配置內容見下圖。然後單擊Generate,生成BSP庫。生成完成後,單擊Exit退出即可。
    這裡寫圖片描述
  • 編譯helloword工程:右擊選擇Build Project。

  • 編譯完成後,右擊工程,選擇Run As -> Nios II Hardware,彈出Run Configurations對話方塊,預設Project選項卡中Project name和Project ELF file name應該都是有內容的,沒有的選一下。然後進入Target Connection選項卡,Connections中如果沒有東西的話,單擊右側的Refresh Connection來查詢我們的下載器,查詢後我們單擊System ID Prroperties…,進行系統ID檢測,檢查是否是我們之前設定的ID號,無誤後點擊Apply,然後再點選Run,這是程式會被自動下載,最終在Nios II Console選項卡中會顯示下載完成後程式執行的結果,即發回兩句話,具體效果下圖所示。
    這裡寫圖片描述

四、出現的問題及解決方法

  • 在軟體設計最後一步編譯完helloworld工程,進行Run As -> Nios II Hardware時,彈出“Run Configurations”對話方塊,提示“Connected system ID hash not found on target at expected base address”

  • 我所犯的錯誤時,原理圖bdf檔案中,復位管腳的分配,最開始是用的SW,改成BUTTON之後,重新編譯工程。在Nios eclipse中重新生成BSP檔案,再compile all。錯誤消失,得到正確實驗結果。

  • 問題就出現在復位開關上,需要說明的是這裡是開關,而不是按鍵:復位訊號低電平有效,當復位訊號處於高電平時,是沒有問題的。而復位訊號處於低電平時則會出問題,產生該錯誤。所以估計此時開關使處於低電平狀態,故撥動開關,此時電平應是高電平。再次再次執行,ID檢測問題解決。

  • 參考博文,文中對這一錯誤進行了總結:

      1) unused pin沒有設定,可能會收到外部訊號的干擾;設定未用引腳為As input tri-stated with weak pull-up.

      2) 系統時鐘訊號沒有約束,或者SDRAM等儲存裝置的時鐘沒有配置正確;

      3) 系統復位訊號沒有連線外部復位開關;

      4) 可能某些PIN分配了錯誤管腳;逐一檢查設計PIN的分配。

      5) SOPC系統中沒有新增system ID元件。