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

NIOS II 開發常見問題

admin @ 2014-03-26 , reply:0

概述

1.怎樣在TCL腳本分配管腳source<pin_assign>.tcl有點問題:#sourcestratix_pin_assign.tclcouldn'treadfile"st……

1. 怎樣在TCL腳本分配管腳 source <pin_assign>.tcl 有點問題:
# source stratix_pin_assign.tcl
couldn't read file "stratix_pin_assign.tcl": no such file or directory
    答: From the Tools menu select Tcl s cripts, and then from the project folder choose the setup s cript for your particular development board, and click Run.

2.D:TEST ios_sst60下載時出現錯誤:
Error: Can't configure device. Expected JTAG ID code 0x020010DD for device 1, but found JTAG ID code 0x020B40DD.
    答:SOPC所選器件和開發板上的不一致。

3.在NOIS II中Bulid常式hello_world都出現了錯誤,錯誤提示為:
gdrive/c/altera/kits/nios2/components/altera_nios2/HAL/src/alt_busy_sleep.c:68: error: parse error before '/' token等錯誤全部由alt_busy_sleep.c引起,都是關於括弧不匹配的問題,而alt_busy_sleep.c是IDE中的一個默認程序。這個錯誤同樣出現在D:TESTDE2Projectsoftware ios2 ,培訓用的一個簡單實驗。
    答:找到system.h文件,裡面有個關於系統時鐘頻率的設置項,應該是沒有賦值,你手動賦值。比如你用50MHZ的時鐘,就設成50000000。如果總是出現上述問題,可能和軟體有關係,建議重新安裝軟體。注意quartus和NIOS安裝版本一定要相同,不能混裝。

4.這個錯誤是什麼原因引起,把那個sdk_arm刪除后,又提示另一個地方出錯。
    答:運行NIOS II IDE,點Project->Clear,重新Builde,應該可以解決問題。

5.在SOPC中Generate出現如下錯誤是怎麼回事? Error: Generator program for module 'epcs_controller' did NOT run successfully. 只要在SOPC中加入epcs_controller就會出現此錯誤,無法生成一個元件。
    答:可能和軟體有關係,建議重新安裝軟體(這個問題是我剛學NIOS遇到的最頭痛的一個問題,問題的原因是Quartus和Nios安裝的版本不一致)。

6.在Nios II IDE中,怎樣打開一個已經存在的工程?每次新建工程比較麻煩。
    答:指定一個Nios II IDE的工作目錄,就打開了那個目錄下存在的工程。另外,在Nios II中是可以建立多個工程的。

7.在Quartus II 中編譯出現如下錯誤怎麼辦?
Error: Can't place pins assigned to pin location Pin_AE24 (IOC_X65_Y2_N2)
    答:按F1可以查看幫助,出現這樣的錯誤的原因是:
CAUSE: You assigned two or more pins to the specified location, but the Fitter cannot place all the pins in that location.刪除這個管腳即可。有一種比較簡便的方法,就是在工程目錄中找到一個後綴為QSF的管腳配置文件,查找Pin_AE24刪除那行語句就行了。

8.如何在NIOS II IDE 下跟蹤查看變數的定義或者函數的定義?
    答:按住CTRL鍵,滑鼠移動到變數或者函數名的地方,就可以發現這些地方高亮顯示,單擊就可以進入到變數或者函數定義的地方。

9. 在count_binary.c有這樣一段程序,它是如何操作的? unsigned int data = segments[hex & 15] | (segments[(hex >> 4) & 15] << 8)
    答:segments[hex & 15]顯示個位0~F;(segments[(hex >> 4) & 15] << 8)顯示十位數0~F,個位0~F,然後十位加一。

10.這個錯誤是由什麼引起?提示LED_PIO_BASE沒有聲明
    答:這是因為名字不一致引起的比如,在生成SOPC系統時,雙擊PIO(Parallel I/O)(在Avalon Modules -> Other 下),為系統添加輸出介面,你沒有把該組件改名成LED_PIO,而是保留了原始的名字:PIO_0;但你又通過 IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led);來向該組件寫入數據,就會導致上述錯誤。解決辦法:1.可以修改sopc系統,為該PIO改名為LED_PIO ;2.在hello_led.c的前面給LED_PIO_BASE賦值,如#define LED_PIO_BASE 0x00001800,後面的這個地址要與SOPC中的地址對應。

11. 如何在NIOS II中驅動外部晶元或設備?
    答:在開發過程中,我們經常會使用外接一些晶元,或外接一些實用電路,比如AD晶元、串並轉換晶元等等,那麼如何在NIOS II中去使用這些晶元呢? 我們在開發中會有多個選擇:
    1.如果這個晶元是使用數據和地址匯流排的,並且補線時沒有足夠的單獨引腳,那麼這個晶元必須掛接在tri_stat匯流排上,這種用法和我們以往單片機或 MCU 類似,在SOPC Builder中直接定義用戶邏輯,如果有額外的控制引腳,就需要用PIO來驅動,雖然公用數據地址線節省了引腳,但做控制時序費勁了。
    2.如果這個晶元單獨使用數據和地址,那麼我們會直接做成Avalone匯流排的Slave設備,在Sopc Builder中自己定義component。需要寫HDL模塊,自己定控制、狀態、數據寄存器和控制位定義,這種方式控制靈活,易於實現複雜的控制時序。
    3.在Quartus II 工程中畫電路模塊(或用HDL寫電路模塊),這種方式是獨立於SOPC定義的模塊之外的,做一個純電路的處理模塊,有時候會比較容易實現某些靈活的處理。

12.在SOPC添加Avalon Trisatate Bridge時,提示有如下錯誤,該如何解決?
Tri state bridge/tristate master requires a slave of type Avalon tristate.Please add a slave of type Avalon tristate.
Generate按鈕為灰色,無法Generate
    答:需要一個專門接三台橋的設備, 把flash添加到sopc中就可以了。

13. 在做count_binary這個例子時,出現一個錯誤: error: `BUTTON_PIO_IRQ' undeclared (first use in this function) BUTTON_PIO_IRQ的值如何給他定義?
    答:這個錯誤可能是在sopc builder中定製的pio埠名稱是否與程序中用的不一致,要和程序里的一致,把pio組件的名稱就改為button_pio。

14.在Quartus II中編譯時出現如下錯誤:
Error: Node instance "cpu_bht" instantiates undefined entity "cpu_bht_module"
點擊錯誤的地方彈出一個對話框這個錯誤是怎麼回事?怎樣解決?
    答:可能是在SOPC中所選的CPU型號不正確,換一個試試。

15.怎樣自動分配管腳?
    答:在Quartus II自動分配管腳有一個方法,點擊Assignments->Import Assginments,導入一個管腳分配文件,後綴為.csv .txt等,前提是在頂層原理圖中各個輸入輸出的名稱要和這個文件中的名稱一致。

16.在NIOS II中編譯時出現如下錯誤怎麼解決?錯誤是不是由SOPC中的RAM引起?
region ram is full (count_binary.elf section .text). Region needs to be 24672 bytes larger.
address 0x80c1f8 of count_binary.elf section .rwdata is not within region ram
Unable to reach edge_capture (at 0x00800024) from the global pointer (at 0x0081419c) because the offset (-82296) is out of the allowed range, -32678 to 32767.
    答:可能時RAM的大小不夠,也有可能是中斷地址(exception address) 的偏余量不夠,設置大些就可以了。如果還是出現這個問題,加一個SDRAM試試。

17.在Quartus II中,為什麼編譯一些樣板工程都會出錯?
Error: DDR timing cannot be verified until project has been successfully compiled.
Error: Evaluation of Tcl s cript auto_verify_ddr_timing.tcl unsuccessful
Error: Quartus II Shell was unsuccessful. 2 errors, 1 warning
    答:在做樣板工程時要注意一個問題:Due to the library paths that are coded into the Quartus settings for this project, if a user wishes to modify the hardware design they must first strip out any old paths from within the project settings file (qsf)
在qsf文件中找到類似語句
set_global_assignment-nameVHDL_FILE C:/MegaCore/ddr_ddr2_sdram-v3.2.0/lib/auk_ddr_tb_functions.vhd"這裡的目錄是初始的目錄,把它改為正確的目錄。

18.在NIOS II IDE編譯時出現如下錯誤是怎麼回事?
system_des cription/alt_sys_init.c:75: error: `ONCHIP_MEMORY_BASE' undeclared here (not in a function)
system_des cription/alt_sys_init.c:75: error: initializer element is not constant
system_des cription/alt_sys_init.c:75: error: (near initialization for `ext_flash.dev.write')
system_des cription/alt_sys_init.c:75: error: initializer element is not constant
system_des cription/alt_sys_init.c:75: error: (near initialization for `ext_flash.dev.read')
    答:ONCHIP_MEMORY_BASE沒有賦值,在alt_sys_init.c 程序的開頭加上#define ONCHIP_MEMORY_BASE 0x00000000後面的這個地址要與SOPC中的對應。

19. 在NIOS II IDE編譯時出現如下錯誤是怎麼回事?
Pausing target processor: not responding.
Resetting and trying again: FAILED
Leaving target processor paused
    答:以下是一位FAE的回答:
    1. 關於USB-Blaster在Nios II IDE下載時會發生偶發性錯誤,這種現象主要是IDE software與Nios II CPU透過USB-Blaster在做通訊時發生錯誤,若是確認FPG上配置沒有錯誤,連續發生錯誤的機率應該是相當的低,您只需要重新下載即可。
    2. 若您使用Nios II IDE 6.0,請盡量配合SOPC Builder 6.0重新build您的system,並且使用Quartus II 6.0重新compile您的project,以減少CPU與IDE software不兼容的情形。

20.在NIOS II IDE中工程的System Library選項中的這幾個選項代表什麼意思?.text .rodata .rwdata 與reset .exception這幾個地址之間的關係是什麼?
    答:.text : 代碼區 .rodata:只讀數據區,一般存放靜態全局變數 .rwdata:可讀寫變數數據區另外還有.bss:存放未被初始化的變數。
    ■ .text — the actual executable code
    ■ .rodata — any read only data used in the execution of the code
    ■ .rwdata — where read/write variables and pointers are stored
    ■ heap — where dynamically allocated memory is located
    ■ stack — where function call parameters and other temporary data is stored

21. 怎樣在NIOS II中操作PIO,提供一種參考方法。
    答:hello_led.c是這樣寫IO口的:
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led);
首先在altera_avalon_pio_regs.h找到定義
#i nclude <io.h>
#define IORD_ALTERA_AVALON_PIO_DATA(base) IORD(base, 0)
#define IOWR_ALTERA_AVALON_PIO_DATA(base, data) IOWR(base, 0, data)
因此在NIOSII中可以調用#i nclude <io.h>庫函數IORD/IOWR來操作PIO。
在smallsoftwarehello_led_0_syslibDebugsystem_des cription下的system.h
中,有以下內容:
#define LED_PIO_TYPE "altera_avalon_pio"
#define LED_PIO_BASE 0x00004000
其中LED_PIO_BASE(IO寄存器地址?)為0x00004000同SopcBuilder中設置一致!
(其實在SopcBuilder中有關NiosII的配置,就是通過system.h來傳送給IDE的!)
最後用IOWR(0x00004000, 0, led);替代
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led);編譯,下載到開發板上,運行成功!

22.怎樣讓SDRAM和FLASH,SRAM的地址公用?
    答: sdram可以和sram,flash共用數據匯流排和地址匯流排.在sopc builder中添加SDRAM控制器時,在其share pins via tristate選擇項上勾上Controller shares dq/dqm/addr IO pins選項,這樣sdram可以和sram,flash共用數據匯流排和地址匯流排.但是ATERA不推薦這樣做,因為這樣會降低SDRAM控制器的性能,在FPGA晶元管腳資源比較緊張的時候迫不得已才這樣做。
23.怎樣使用DE2板上的數碼管,綁定管腳時需要注意什麼?請舉一個例子說明。
    答: DE2板上的數碼管只用了7位,小數點位默認為高電平。例如,在做常式count_binary時,需要用到兩個數碼管,以實現00到FF的計數,在 SOPC添加一個16位的PIO SEVEN_SEG[15..0],綁定管腳時注意:使SEVEN_SEG[0..6]幫定到數碼管HEX0[6..0]位,SEVEN_SEG[8.. 14]綁定到數碼管HEX1[6..0]位,SEVEN_SEG[7]和SEVEN_SEG[15]直接接VCC,這樣才能讓兩個數碼管正常顯示並計數。

24. 在NIOS II IDE 中調試,編譯通過的軟體時,出現了下面的提示,是什麼原因?
Using cable "ByteBlasterII [LPT1]", device 1, instance 0x00
Processor is already paused
Downloading 00000000 ( 0%)
Downloaded 57KB in 1.2s (47.5KB/s)
Verifying 00000000 ( 0%)
Verify failed
Leaving target processor paused
    答: Verify failed這個問題說明板子的複位電路可能有問題,或裝載程序的外部SRAM或SDRAM和CPU 的連接或時序有問題,也有可能是軟體偶爾的錯誤。若是軟體偶爾的錯誤,可以先複位一下CPU,然後再下載程序;或者斷電后重新下載.sof和NIOS II 程序

25.在練習C:alterakits ios2_51examplesverilog niosII_cycloneII_2c35的工程時,裡面有很多元件DE2板上都沒有對應的管腳,比如網路元件lan91c111,使用的IP核,還有 24位的ext_flash,而DE2板上的FLASH只有22位。是不是SOPC中只能讓DE2板上有對應管腳的元件存在,其它的只能刪除?
    答:這個目錄下的example是針對altera自己的板子的,和DE2硬體不能對應,只能作為參考,或者做一些修改後用。

26.在SOPC中加了一個200KB的onchip_memory ,為什麼在Quartus II 編譯時出現這個錯誤?
Error: Selected device has 105 RAM location(s) of type M4K RAM. However, the current design needs more than 105 to successfully fit
    答:SOPC中的onchip_memory和M4K RAM根本就不是一個概念。Quartus II中編譯出現這個錯誤,是由於設計中用到了太多的M4K。

27. 關於sopc-builder 中reset address 的設置,一直搞得不是很明白。
    答:SOPC中的reset address 指定的是最終全部軟體程序代碼下載到的地方,並且程序從reset address 啟動。
SOPC 中的exception address 指定的是系統異常處理代碼存放的地方。如果exception address 和reset address 不一樣,那麼程序從reset address 啟動后將把放在reset address 處的系統異常處理代碼拷貝到exception address 。
NIOS II軟體中的text address指定的是程序運行的地方。如果text address和reset address 不一樣,那麼程序從reset address 啟動后將把放在reset address 處的普通只讀程序代碼拷貝到text address 。NIOS II軟體中的rodata address指定的是只讀數據的存放地方。如果rodata address和reset address 不一樣,那麼程序從reset address 啟動后將把放在reset address 處的只讀數據拷貝到rodata address 。
NIOS II軟體中的rwdata address指定的是可讀寫數據的存放地方。如果rwdata address和reset address 不一樣,那麼程序從reset address 啟動后將初始化rwdata address 處的可讀寫數據。

28. 如何提高NIOS II系統的性能?
    答:主要可以從這幾個方面入手:
    1、使用fast CPU類型。
    2、提高系統主頻。
    3、優先在SRAM中運行程序,SDRAM次之,最後選擇FLASH中運行。
    4、使用片內RAM作為數據緩衝,片外SRAM次之,最後選SDRAM。
    5、IO數據傳輸儘可能採用DMA。
    6、對能并行處理的數據考慮使用多CPU協同處理。
    7、典型演算法做成用戶指令,有256條可以做,足夠你用的。
    8、能用HDL模塊來完成工作嗎?能,就用HDL模塊做成外設來完成吧
    9、採用C2H。

29.如何優化NIOS II里的應用工程?
    答:Optimize your Nios II application design!
    1.Creat an Blank Project:Select Altera Nios II " C/C++ Application"
    2. In main.c[your main fuctional c/c++ file]:
#i nclude "system.h"
#i nclude "alt_types.h"
#......
int main (void) __attribute__ ((weak, alias ("alt_main")));
int alt_main (void)
{
......
return 0;
}
    3."System Library Properties" Options
Select "Clean EXIT"
Select "Small C Library"
Select "Reduced Device Drivers"
Spicify linker s cript position, to ext_flash, ext_ram or on-chip-ram

30. 關於verify failed的總結
    1. SDRAM的時序不對
    有時候不正確的pll clock phase shift for sdram_clk_out就會導致SDRAM不能正常工作:
    2. SDRAM的連線不對,物理板子的連線問題
    3. 在調試的時候,程序下載的空間不是非易丟失存儲器(non-volatile memory)或者存儲器的空間不夠也會導致這個錯誤
    4. QuartusII的默認設置導致的錯誤
    QuartusII默認將所有沒有使用的IO口接地,這種時候可能導致某些元器件工作不正常;最好將不用的IO口設置為三態
    5. USB-blaster壞了,或者JTAG通信的信號雜訊太大
    JTAG的埠需要一個弱上拉電阻來抗干擾
    6. 確保你的sdram既連接到CPU的指令匯流排也連接到CPU的數據匯流排

31.關於DMA傳輸的幾點說明:
    1.memory 到 外設的傳輸,調用alt_dma_txchan_ioctl()時,有一個參數為alt_dma_tx_only_on等
    2.調用alt_dma_txchan_send函數時,在傳輸結束前就返回一個值,如果此值為負的話,說明發送請求失敗。正確傳輸結束后,調用done函數。
    3. 接收函數alt_dma_rxthan_prepare類似上面的1和2
    4.傳輸結束,有兩種可能:數據傳完或者end of packet(要預先使能)
    5.Sopc builder中例化時要制定哪些可以訪問DMA的主埠,DMA的avalon slave埠要接cpu。實際傳輸的最大數可以幫助確定設置的位數
    6.alt_dma_txchan_ioctl用於控制dma的一些工作性質,使用多的話可以用信號量等來“搶佔”
    7.dma傳輸最小應該傳4字或者其倍數。

32. 1. 建立CPU時,下面的那個HardWare Multiply裡面可以選①Embedded Multipliers,②Logic Elements,③None,這三個選項有什麼區別呀?
    答: ①Embedded Multipliers,使用專門的內嵌硬體乘法單元(不可編程,僅能做乘法,且乘法速度最快),不是RAM。 ②Logic Elements,使用邏輯單元也就是FPGA中的查找表(速度較慢)。③None,那就是不要聲長硬體乘法器了,這是只能通過軟體模擬乘法,速度最慢。

33.下載是出現“not responding”錯誤的又一點發現:
    答:在設計的過程中,經常使用板子上內部的兩個晶振作為CPU或者有些信號的時鐘,而且習慣用osc_27和osc_50命名。在綁定管腳時又經常導入一個 CSV文件,沒有手動一一綁定,而在那個CSV文件中晶振管腳名分別為CLOCK_27,CLOCK_50,這樣系統的CPU根本就沒有綁定管腳,不出錯才怪。把名稱改為CLOCK_27,CLOCK_50,重新編譯下載就可以了。

34. 安裝了nios2linux-1.4之後,為什麼在New->Project時並沒有出現Microtronx NIOS II選項呢?
    答:這個問題好像難倒過很多人,其實在運行nios2linux-1.4安裝的第一步,裡面有個提示:
Information Regarding the Installation Procedure
IMPORTANT: Please ensure that you specify the correct path for the Altera Nios II Kit installation directory and the Cygwin root directory. The typical Altera Nios II Kit directory is:c:alterakits ios2
The typical Cygwin root directory is:
c:alteraquartus50incygwin
問題的關鍵就是上面的路徑不正確。對於Nios 5.1和6.0的路徑分別為nios_51和nios_60,都不是nios2,所以安裝后找不到模板工程很正常。但它的一些必要文件又確實是安裝在了 nios_51或nios_60中。我也遇到了過同樣的問題,想到了一個簡單的方法可以解決:
    1.把文件夾nios_51或nios_60改為nios2,啟動Nios II,就可以看到所需模板工程。
    2.退出Nios II,把文件夾名還原。
    3.再次啟動Nios II,你會發現模板工程依然還在。

35.Nios II漢化解決方案
    答:NIOS II IDE實際上是在eclipse平台上的一個應用插件,而Eclipse 是一個開放源代碼的軟體開發項目,專註於為高度集成的工具開發提供一個全功能的、具有商業品質的工業平台。可訪問如下網站:
    1.Eclipse官方網站http://www.eclipse.org/
    2.中國Eclipse社區 http://www.eclipseworld.org/bbs/index.php

    下面介紹如何漢化NIOS II(實際上只是漢化了eclipse)
    1.打開NIOS II,點help->about NIOS II IDE,會看到有關NIOS的版權信息。可以看到NIOS II 5.1的版本上的Eclipse版本是Eclipse 3.0.1
    2.在Eclipse官方網站上找到Eclipse 3.0.1多國語言包NLpack-eclipse-SDK-3.0.x-win32.zip
    3.在NIOS II的安裝目錄中,你可以找到一個eclipse目錄,如:C:alterakits ios2ineclipse,在這個目錄下新建2個文件夾language和links
    4.將NLpack1-eclipse-SDK-3.1.1a-win32.zip解壓到language目錄下
    5.在links文件夾下用記事本新建一個文件,取名為link.link(必須是此擴展名)
    6.在language.link 里輸入代碼如下: path=c:/altera/kits/nios2/bin/eclipse/language 保存此文件。
    7.漢化完成。
    說明,這種方法只是漢化了eclipse,對NIOS II沒有漢化,但這個軟體已經大部分為中文了,因為NIOS II 只是eclipse一個插件。對於我們新手來說這還是必要的。


[admin via 研發互助社區 ] NIOS II 開發常見問題已經有9197次圍觀

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