精華區beta Electronics 關於我們 聯絡資訊
先謝謝在我上一篇文章給意見的板友 :) ---- 我先把 NIOS 的地位簡單的說一下, 如下圖 NIOS ---- Avalon BUS ----+--- HW Accelerator1 | +--- HW Accelerator2 | +--- other peripherals 以通訊系統而言, 假設前端的 ADC 跑 10Mhz PHY (實體層) 信號處理用 CPU 去算, 大概來不及算, 一般會用 HW 直接做 MAC 需要的彈性大, 適合跑 SW 而不用 HW 直接合成 HW 的部分, 就是上圖的 Accelerator (加速器) 輸出再透過 NIOS 做進一步的處理 所以在系統裡放一顆 NIOS, 等於同時有 HW 和 SW 可用, 用適當的設備做適當的事 一般的產品也是用 ARM + HW-Accelerators 或 MIPS + HW-Accelerators 這類架構 ---- 不過話說回來... 把 NIOS 單獨當作一顆 MCU 來玩, 還真的不錯玩 ^^" 我手邊的板子是 Altera 出的 NIOS 實驗板 上面的 FPGA 是 Stratix EP1S40 玩了幾個禮拜, 我把我的所見所聞跟大家分享 ---- 0. Document 先抓開發板的文件, 看手邊是哪一張, 全部抓回去 http://www.altera.com/support/ip/processors/kits/ips-nios2-dev-kits.html Altera 也提供了很豐富的文件, 有個包成 .zip 的, 直接抓回去 http://www.altera.com/literature/lit-nio2.jsp 這些文件真的寫得不錯 幾乎所有的問題都可以在文件上找到答案 ---- 1. Quartus II NIOS 裝好以後, 我需要一個簡單的程式, 來讓我熟悉整個環境 我選的範例是下面的, 全功能的好像比較厲害 C:\altera\71\nios2eds\examples\verilog\niosII_stratix_1s40\full_featured 裡頭是一個 Quartus II 的 project, 一打開來會有個 readme.txt 他提到說, 這個 project 會展示所有炫麗的功能 建議把這個檔案讀一讀, 然後把 SOPC Builder 打開來看看 看不懂沒關係, 反正以後會常常打開 這個 project 可以編譯, 編譯出來的檔案叫 NiosII_stratix_1s40_full_featured.sof 編譯有點久, 不過是該跑一次流程看一看... 這個檔案請 download 到 FPGA 上 ---- 2. NIOS II IDE (Hello World) 就像寫第一個 C 程式一樣, 從 Hello World 出發總是好事 NIOS II 提供寫好的 Hello World 範例 想辦法建立這個 project 並且執行吧 畫面的左手邊, 應該會有兩個 project: hello_world_0 hello_world_0_syslib hello_world_0_syslib 底下的 Debug/ system_description Device Drivers [NIOS II] Device Drivers [Sopc Builder] 這三個以後會常常打交道, 看看底層的 library 是怎麼寫的 在 Hello World 的程式裡, 有個 #include "system.h" 請到 hello_world_0_syslib 裡面找這個檔案, 看看寫些什麼 ---- 3. GPIO -- LED 玩 MCU 一定會跟周邊打交道, 我最喜歡 GPIO + LED, 因為最簡單 剛好 NIOS 也附送了一份 LED 的範例程式, 把他跑起來玩看看吧 LED 程式的說明我覺得不錯, 裡面描述 NIOS 的開機流程, 下面是我的 note 首先開機會先執行 <NiosII-Kit-Install-Dir>/components/altera_nios2/HAL/src/crt0.S 裡面有一行... call alt_main 所以 alt_main() 是一個很重要的程式 at syslib/ Device Driver [Nios II]/ altera_hal/ HAL/ src/ alt_main.c alt_irq_init (ALT_IRQ_BASE); // initialize interrupt ALT_OS_INIT(); // initialize OS alt_sys_init(); // initialize system _do_ctors (); // C++ constructors main (alt_argc, alt_argv, alt_envp); // 呼叫 main() 值得注意的是 alt_sys_init() at syslib/ Debug/ system_description/ alt_sys_init.c 看一下裡面寫什麼, 以後玩到對應的 device 也看一下 總結一下, 開機流程是 crt0.S -> alt_main() -> alt_sys_init() -> main() ---- 4. GPIO -- LED (CONT) 前面的範例裡, 有示範怎麼控制 LED, 不過那樣實在有點不夠 正確的態度應該是 LED 控制和 NIOS 之間的關連摸清楚... 1. 把前面抓的文件打開, 在 Schematic 裡找出 LED 連到 FPGA 哪根腳 在該電路下, FPGA 輸出 H/L, LED 分別是亮暗? 2. 打開 Quartus II, 看一下 pin-assignment, 裡面有沒有這根腳 ? Quartus II 是怎麼命名這根腳的 ? 3. 打開 SOPC Builder, 找到 LED_PIO, 原來 LED 控制模組是用 PIO 來實作 在 LED_PIO 上點兩下, 閱讀 data sheet 4. 上述的 Data sheet 從下面這份文件裡出來的... Quartus II V7.1 Handbook, Volumn 5: Embedded Peripheral 在前面抓的文件裡也有, 裡面的內容相當多, 原來 NIOS 有很多周邊可以玩 5. 另外還有一份文件也很有用, 也是下載回來的 NIOS II Software Developer's Handbook 有個東西叫 HAL, 這東西值得閱讀他的 source 看裡面在做什麼 6. 在 system.h 裡, 找到 LED 相關的設定 7. 閱讀下面程式碼 syslib/ Device Driver [Sopc Builder]/ altera_avalon_pio/ inc/ altera_avalon_pio_regs.h syslib/ Device Driver [Nios II]/ altera_nios2/ HAL/ inc/ io.h 第一個檔案可以熟悉 Altera 控制 register 的 style 把他對著 data sheet一起看, 看看在做什麼 第二個檔案有底層的 IO 控制函數, 把 IORD 和 IOWR 看一看 8. 上面是所有和 LED 控制相關的東西 分析一下範例程式的code, 到底執行時做了哪些事 ---- 5. Other Peripherals 下面是一些我玩過的周邊(按順序), 我習慣挑簡單的周邊玩起 如果有板友也正在玩, 下面這份清單也許可以幫得上忙 SystemID Core JTAG_UART UART BUTTON (IRQ Architecture -> Button PIO) LCD-display Timer (sys_clk_timer, 底層的 API 怎麼寫徹底追蹤) DMA ---- TODO. 想試試看 uC/OS-II 這樣的 OS 看看在 embedded system 跑 OS 是怎麼回事 有沒有板友知道什麼資料, 適合初學者看的 麻煩介紹一下, 謝謝 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.236.184
MasterChang:推...寫這種文章最麻煩了... 08/11 21:33
luckyBF:我也推這篇~我最近在弄~麻煩死了orz 08/11 21:54