文章目錄
- 一、創建工程
- 二、系統設計
- 1. 在 “component library” 標簽欄中找到 “Nios II Processor” 后點擊 Add
- 2. 在 ”Component Library” 標簽欄中的查找窗口輸入 jtag 找到 ”JTAG UART ”,然后點擊 Add
- 3. 添加片上存儲器 On-Chip Memory(RAM)核
- 4. 查找窗口輸入 pio 找到 ”PIO” 后點擊Add
- 5. 添加片 System ID Peripheral 核
- 6. 后續工作
- 三、基于NIOS-II軟核流水燈實現
- 四、運行流水燈項目
- 五、串口通信
- 六、參考文章
一、創建工程
接著一路next
二、系統設計
- 打開platform designer
- 啟動 Qsys 后,點擊 File —> save,在文件名中填寫為 kernel,后點擊 OK
- 鼠標放在 clk_0 處點擊右鍵 Edit 或是雙擊 clk_0 元件,對 Clock 進行時鐘設置,設為為 50M
- 添加 CPU 和外圍器件
1. 在 “component library” 標簽欄中找到 “Nios II Processor” 后點擊 Add
- 在 Nios Core 欄中選擇 Nios II/f 選項,其他保持默認選項
- 將 nios2_qsys_0 重命名為 cpu,點擊 ”Rename” 即可重新命名
- 將 cpu 的 clk 和 reste_n 分別與系統時鐘 clk_0 的 clk 和 clk_reset 相連
2. 在 ”Component Library” 標簽欄中的查找窗口輸入 jtag 找到 ”JTAG UART ”,然后點擊 Add
- 在 ”Name” 列中將 jtag_uart_0 重命名為 jtag_uart。
- 連線,進行 clk、reset 以及 master-slave 的連線,進行中斷 irq 連線
3. 添加片上存儲器 On-Chip Memory(RAM)核
在左側 ”Component Library” 標簽欄中的查找窗口輸入 On Chip 找到 ”On-Chip Memory(RAM or ROM)” 后點擊 Add,修改size如圖中的大小。
- 將 onchip_memory2_0 改名為 onchip_ram
- 進行時鐘、數據端口、指令端口的連接
4. 查找窗口輸入 pio 找到 ”PIO” 后點擊Add
確定以下選項:Width 為 8bits,Direction 選擇 output,其余選項保持默認,點擊Finish。
- 返回 ”System Contents” 標簽欄可以看到新加入的 ”PIO” 核。在 ”Name” 列中將pio_0 改名為 pio_led。并在在 Export 欄處雙擊,把輸出口引出來,并命名為 out_led。
- 進行時鐘、數據端口、指令端口的連接
5. 添加片 System ID Peripheral 核
- 在左側 ”Component Library” 標簽欄中的查找窗口輸入 sys 找到 ” System ID Peripheral” 后點擊 Add,保持默認選項,單擊 Finish。
- 將 sysid_qsys_0 改名為 sysid
- 進行時鐘、數據端口的連接
所有的連線如圖所示
6. 后續工作
- 基地址分配:點擊 Qsys 主界面菜單欄中的 ”System” 下的 ”Assign Base Addresses”。
- 分配中斷號:在 ”IRQ” 標簽欄下點選 ”Avalon_jtag_slave” 和 IRQ 的連接點就會為 ”jtag_uart” 核添加一個值為 0 的中斷號。
- 指定 NIos II 的復位和異常地址:從 ”System Contents” 標簽欄雙擊建立好的 cpu 進入 Nios II Processor 的配置界面,配置 Reset Vector 和 Exception Vector 為 ”onchip_ram.s1”,點擊 Finish。
- 點擊 Qsys 主界面菜單欄中的 ”System” 下的 ”Create Global Reset Network”。完成后會自動連接所有復位端口
- 生成 Qsys 系統:點選 ”Generation HDL” 標簽欄中 Generate 按鈕生成 Qsys 系統
- 在 Quartus-II 中新建一個原理圖,然后在該原理圖(BDF)文件中添加 Qsys 生成的系統符號
- 點擊 Assignments-Settings,添加 kernel.qip 文件
- 進行邏輯連接和生成管腳,在 kernel 模塊內點擊鼠標右鍵選取 Generate Pin for Symbol Ports 生成管腳
- 菜單里選擇 Assignments-device,然后如下圖所示點擊 Device pin options
- 進行 unused pin 設置,可能會收到外部信號的干擾,將未用引腳設置為 As
- 編譯工程
- 綁定引腳
完成后關閉 Pin Planner,回到 Quartus Prime 主界面后再次編譯項目。
三、基于NIOS-II軟核流水燈實現
- 在 Quartus-II 界面,點擊Tools,然后點擊 Nios II Software Build Tools for Eclipse 打開 Nios II SBT for Eclipse
- 啟動 Workspace 選擇當前的項目目錄,點 OK
- 創建工程
在 ”SOPC Information File name” 窗口中選擇 kernel.sopcinfo 文件,以便將生成硬件配置信息和軟件應用關聯,CPU 欄會自動選擇”CPU”。在 ”Project name” 輸入 ”helloWorld” ,Project template選擇 Hello World。
- 將 hello_world.c 中的程序修改為流水燈控制程序
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
const alt_u8
led_data[8]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
int main (void) {int count=0;alt_u8 led;volatile int i;while (1){if (count==7){count=0;}else{count++;}led=led_data[count];IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);i = 0;while (i<500000)i++;}return 0;
}
右鍵單擊項目名稱,在彈出的菜單中選擇 Build Project
四、運行流水燈項目
- 啟動下載硬件代碼
- 運行/調試程序,在菜單欄中選擇 Run →Run Configurations
- 配置 Run Configurations,轉到 ”Target Connection” 標簽欄,點擊右側的 Refresh Connections 將 USB-Blaster 加入
- 運行結果
五、串口通信
實現DE2-115開發板串口輸出“Hello Nios-II”字符到筆記本電腦
只需要在這個項目的基礎上修改hello_world.c中的代碼,改為
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include "stdio.h"
const alt_u8
led_data[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
int main (void)
{int count=0;alt_u8 led;volatile int i;while (1){ if (count==7){count=0;}else{count++;}led=led_data[count];IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);i = 0;printf("Hello Nios-II\n");while (i<500000)i++;}return 0;
}
再按照之前的方法燒錄運行即可
運行結果:
六、參考文章
軟核燒錄時遇到報錯參考的這篇文章:
鏈接: NIOS Ⅱ開發常見問題