歡迎您光臨本站 登入註冊首頁

NIOS II 學習筆記

admin @ 2014-03-26 , reply:0

概述

NiosDevelopmentBoardReferenceManual,StratixIIEdition在使用NiosIISDKShell試運行./restore_my_flash時,發現restor……

Nios Development Board Reference Manual, Stratix II Edition

  1. 在使用Nios II SDK Shell試運行./restore_my_flash時,發現restore_my_flash會區分目錄名的大小寫,因此使用Nios II SDKShell時最好注意大小寫一致。
  2. restore_my_flash.pl為perl腳本,可以直接修改後直接執行。
  3. restore_my_flash不能正常取得命令行參數,但這不影響恢復出廠設置的操作,因為restore_my_flash可以不依靠命令行參數來 執行。
  4. 最好不要移動NiosII的安裝目錄,例如restore_my_flash就會從目錄名中提取內容生成需要的文件名。
  5. 恢復出廠設置需 要.sof和.flash兩個文件,估計.sof用於生成最小的nios系統,以便將.flash文件下載到Flash中。 (restore_my_flash提示使用J24 JTAG連接器,該連接器是用於配置StratixII器件的。)

Creating Multiprocessor NiosII Systems Tutorial
    在standard設計的基礎上修改了Nios II系統,又添加了兩個Nios II處理器及各自的定時器、共享互斥鎖、消息緩衝區。編譯、運行和調試了hello_world_multi程序。
    給我的感覺是:

  1. SOPC Builder中設置的NiosII的Reset和Exception地址很重要;
  2. QuartusII生成的編程文件中包含有NiosII處理器的 複位地址;
  3. NiosII IDE的編譯會生成絕對地址的代碼和數據;
  4. NiosII IDE通過NiosII處理器中的jtag_debug_module重定向程序的執行地址;
  5. 上電或複位后,NiosII處理器從複位地址(通常指 向Flash)處執行Boot Loader,將程序拷貝到Ram中並在Ram中執行;
  6. Exception地址確定了程序拷貝到Ram中的位置,Exception地址的低位總是 0x20,NiosII處理器跳轉到Ram執行時先執行低位地址為0x00的指令(用於初始化指令cache),之後執行低位地址為0x20處的系統啟動代碼。

    Nios II多處理器設計的注意點:

  1. 不支持SMP(對稱多處理),只支持不對稱的(每個處理器執行不同的程序);
  2. 處理器之間可以不共享資源;
  3. 同一程序存儲器中的各處理器的代碼空間不能重合(通過Reset和Exception地址實現);
  4. 共享數據存儲器最好用硬體共享互斥鎖 結合軟體操作的方式來實現,不支持純硬體的共享方式(如果軟體不使用硬體互斥鎖,仍然會有訪問衝突),純軟體的共享方式有使用限制並且較複雜;
  5. 軟體 共享互斥鎖只適用於同一處理器的不同進程之間共享資源;
  6. Nios II HAL library不支持共享外設(涉及中斷處理、外設輸入數據的處理等),Altera建議由固定的處理器管理相應的外設,其他處理器要使用該外設可以通過 消息緩衝區的方式;
  7. 不同於單處理器設計,多處理器設計一定要明確規定每個組件的匯流排連接點;
  8. 只要由不同的處理器訪問,兩個組件可以有相同的地址;
  9. 由設計人員保證各處理器使用的代碼空間是足夠的、不發生覆蓋的;
  10. 多處理器的軟體的運行、調試可以一起或分別啟動、終止,NiosII 5.0暫不支持一起暫停、再繼續,“一起”不是“同時”。

Nios II Flash Programmer User Guide
    關鍵點在於:

  1. Quartus II的Programmer只支持FPGA和配置器件;
  2. Flash Programmer只支持CFI介面的Flash或EPCS配置器件,但可燒入配置文件、軟體代碼和任意數據;
  3. 使用Flash Programmer需要生成Target Board及生成Flash Programmer可編程邏輯設計,並在實際項目SOPC Builder流程中指定該Target Board;
  4. Boot-Copier Program是Nios II IDE自帶的,當軟體代碼位於Flash或EPCS中時由Flash Programmer自行使用,不同的是對Flash而言Boot-Copier Program放在Flash中,對EPCS而言Boot-Copier Program放在EPCS serial flash controller包含的on-chip ROM中;
  5. 上電或複位時,Nios II從Boot-Copier Program開始執行(不論是Flash或EPCS),這要求SOPC Builder流程中指定複位地址為Flash或EPCS serial flash controller。

Simulating Nios II Embedded Processor Designs

  1. 模擬NiosII設計包括三種方式:“NiosII IDE Debugger + Signal Tap II + 物理板”的軟硬體聯調方式;“NiosII IDE Debugger +指令集模擬器ISS”的軟體調試方式(ISS可對部分組件建模);使用ModelSim-Altera進行的RTL級的功能模擬方式(可以調試處理器及其 外設之間的交互情況)。本文針對RTL級模擬方式。
  2. 存儲器的初始化:含有軟體代碼的存儲器都應被初始化,不論是片上還是片外存儲器;軟體代碼相關的存儲器初始化文件由NiosII IDE編譯軟體時生成。
  3. JTAG UART和PIO在SOPC Builder中都可設置模擬選項,ModelSim-Altera還可根據模擬選項調出UART交互終端窗口。
  4. 需要在SOPC Builder中設置ModelSim的路徑和使能Simulation,之後SOPC Builder會生成模擬用的ModelSim項目文件、ModelSim宏命令、UART等組件的初始化文件。
  5. 需要在Nios II IDE中為System Library屬性打開“ModelSim only,no hardware support”開關,這樣在編譯軟體時才會生成代碼相關的存儲器初始化文件,但生成的代碼不含啟動代碼(指令和數據Cache沒有初始化、BSS段也不清除),以便加速模擬。因此,如果要下載代碼到硬體板,必須關掉“ModelSim only,no hardware support”開關並且重編譯,以便生成完整的代碼。
  6. 在Nios II IDE中以NiosII ModelSim方式運行(需設置ModelSim的路徑),將使ModelSim編譯setup_sim.do並接管後續的模擬運行工作。
  7. 較重要的ModelSim宏(SOPC Builder生成):s、w、jtag_uart_drive。
  8. 一定要從Nios II IDE運行ModelSim,jtag_uart_drive宏才能正常運行。其他模擬步驟都可單獨使用ModelSim打開該項目,在執行完setup_sim.do后運行。
  9. 應該可以在SOPC Builder生成TestBench文件后修改該文件,以便進行Nios II和片上其他邏輯的聯合模擬。(因為是SOPC Builder生成的TestBench文件,並沒有在Quartus II中生成,所以不一定是完整的片上設計的TestBench文件。)

Avalon匯流排

  1. NIOS和NIOS II都使用了Avalon匯流排,這是一種交換式架構的片內匯流排;
  2. 該匯流排形式和PCI、ISA等板間互連匯流排的最大區別在於:主從設備之間有緊密耦合關係。Avalon匯流排架構中,由硬體設計人員通過SOPC Builder規定互連的主從設備(包括數據、控制信號、片選、地址的互連),不連接的設備之間是互相看不到的。
  3. 每個Avalon主設備端有多路復用器,用來從多個從設備的數據匯流排中選擇當前要訪問的數據——這也是“交換”的含義所在。可見多路復用器的介面引 線相當多,這隻能在連線資源豐富的FPGA內實現。所以說,Avalon匯流排架構是適用FPGA設計的。片外的交換式匯流排也有,但都是串列介面的,主要是 為了降低PCB布線難度,如:PCI Express、乙太網等。由於,Avalon匯流排架構中所有設備沒有實現全互連,也就不存在“全交換”。但即使這樣,不同的主設備訪問不同的從設備也是 可以同時的、併發的。
  4. 每個Avalon從設備都有仲裁器,仲裁各主設備的訪問,確保訪問周期的完整性和正確性。我們可以認為訪問周期是“原子”的,即不被其他主設備破壞的。
  5. 軟體對共享資源的訪問,通常要求一個序列的多個訪問不能被其他CPU打斷,這不是“原子”級的訪問周期設計能保證的,這也是SOPC Builder中提供了硬體共享互斥鎖的由來。
  6. 各CPU上運行的軟體都可對某個硬體共享互斥鎖進行SET和TEST操作,以爭取對資源的佔用能力。由於對硬體共享互斥鎖的訪問周期是“原子”,所以硬體共享互斥鎖能保證多CPU設計中軟體級別的共享資源互斥訪問。

    NIOS II設計的靈活性是我感興趣的主要原因。只要有足夠的邏輯資源余量,NIOS II的設計是可以不斷更新的,設計人員不用為自己的設計能力、CPU版本的升級擔心,這放開了我們的“思維”約束。


[admin via 研發互助社區 ] NIOS II 學習筆記已經有2738次圍觀

http://cocdig.com/docs/show-post-43116.html