目錄
- 一、認識Nios II
- 二、使用Quartus II 18.0Lite搭建Nios II硬件部分
- 三、軟件部分
- 四、運行項目
一、認識Nios II
- Nios II軟核處理器簡介
Nios II是Altera公司推出的一款32位RISC嵌入式處理器,專門設計用于在FPGA上運行。作為軟核處理器,Nios II可以通過硬件描述語言在FPGA內部實現,這使得它具有極高的靈活性和可定制性。Nios II處理器能夠滿足各種應用對32位嵌入式微處理器的需求,用戶可以根據自己的系統需求選擇合適的處理器型號,以達到性能和成本的最佳平衡。
- Nios II的特點和優勢
Nios II處理器的最大特點是它是運行在FPGA上的軟核處理器。與傳統的硬核處理器相比,軟核處理器可以根據需要進行裁剪和定制,提供了更大的靈活性。Nios II支持使用專用指令,允許用戶增加硬件模塊來執行復雜運算任務,從而為時序要求緊張的軟件提供加速算法。此外,Nios II系列支持60多個外設選項,使得開發者能夠選擇合適的外設,獲得最合適的處理器、外設和接口組合。
- Nios II系列的分類
Nios II系列包括三種產品型號:Nios II/f(快速)、Nios II/s(標準)和Nios II/e(經濟)。這三種產品型號都具有32位處理器的基本結構單元,包括32位指令大小、32位數據和地址路徑、32位通用寄存器和32個外部中斷源。它們使用相同的指令集架構(ISA),并且100%二進制代碼兼容,這意味著設計者可以根據系統需求的變化更改CPU型號,而不會影響已有的軟件投入。
二、使用Quartus II 18.0Lite搭建Nios II硬件部分
-
新建一個名為
Nios_II
的項目文件。
-
選擇與DE2-115板子上相同型號的芯片
EP4CE115F29C7
并點擊Finish完成配置。
-
點擊
Plateform Designer
,開始搭建硬件部分
-
在左上角搜索框輸入NIOS,單擊選擇Embedded目錄下的
Nios II Processor
-
如果Quartus II是Lite版本的要把Nios II Core選為
Nios II/e
,因為Lite版本不支持高性能的Nios II,編譯的時候會報錯,若想使用Quartus需要標準版及以上版本,如果是標準及以上版本就可以選擇NIos II/f。其余配置默認即可,點擊Finish完成該部分配置。然后再將其更名為cpu。
-
添加JTAG_UART接口,選擇Interface目錄下的JTAG UART,配置默認即可,點擊finish并更名為jtag_uart。
-
配置片上存儲器 On-Chip Memory,選擇Basic目錄下的On-Chip Memory,并將總存儲大小改為40k,完成配置,然后改名為onchip_ram。
-
添加PIO接口,默認即可,更名為pio_led。
-
添加System ID,默認即可,更名為sysid。
-
根據下圖進行連接,并在pio_led的external處添加名為
out_led
的輸出端口。
-
雙擊cpu在Vectors中進行如圖配置,如果找不到
onchip_ram.s1
應該檢查連線是否正確,點擊System => Assign Base Address,使Base欄不出現重復的地址。點擊File => Save保存該項目。
-
點擊Generate => Generate HDL開始生成,等待其生成完畢,關閉Plateform Designer。
-
新建BDF(Block Diagram/Schematic File)文件,按照圖中順序添加kernel
-
右鍵單擊kernel選擇
Generate Pins for Symbol Ports
為其添加管腳。并將clk_clk管腳更名為clk,out_led_export[7:0]管腳更名為pio_led[7:0],reset_reset_n管腳更名為reset_n。
15.添加kernel.qip后保存bdf文件為Nios_II.bdf進行語法編譯,芯片引腳設計保持默認即可。
-
點擊Pin Planner,參考DE2-115管腳圖開始配置管腳
-
完成針腳配置后關閉Pin Planner,完全編譯項目,編譯通過即表示硬件部分設計完成。
三、軟件部分
- 點擊 Tools => Nios II Software Build Tools for Eclipse 打開 Nios II SBT for Eclipse,把默認目錄更改到這個項目目錄。
- 創建新的軟件應用,點擊File => New => Nios II Application and BSP from Template。選擇項目目錄下的.sopcinfo文件,并將其命名為hello_led,點擊finish開始生成Template。
- 打開hello_led文件夾下單hello_world.c文件,并對.c文件內容進行更改以實現Console輸出以及流水燈。
代碼尚有不完善的地方,比如難以分辨新的輸出語句“Hello from Nios II!\n",可在后面添加變量n加以分辨,原始代碼如下:
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include <stdio.h> // 新增標準輸入輸出頭文件,用于printf/** "Hello World" example.** This example prints 'Hello from Nios II' to the STDOUT stream. It runs on* the Nios II 'standard', 'full_featured', 'fast', and 'low_cost' example* designs. It runs with or without the MicroC/OS-II RTOS and requires a STDOUT* device in your system's hardware.* The memory footprint of this hosted application is ~69 kbytes by default* using the standard reference design.** For a reduced footprint version of this template, and an explanation of how* to reduce the memory footprint for a given application, see the* "small_hello_world" template.**/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;// 融合后的新增功能:打印Nios II啟動信息
// printf("Hello from Nios II!\n");while (1) {if (count == 7) {count = 0;} else {count++;printf("Hello from Nios II!\n");}led = led_data[count];IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);// 保留原有的延時邏輯i = 0;while (i < 500000) {i++;}}return 0; // 理論上無法執行到這里,但保持代碼完整性
}
應該修改的代碼為此:
printf("Hello from Nios II!\n",n);
理論修改后的10個循環內的輸出如下:
第 1 次:Hello from Nios II! 1
第 2 次:Hello from Nios II! 2
第 3 次:Hello from Nios II! 3
第 4 次:Hello from Nios II! 4
第 5 次:Hello from Nios II! 5
第 6 次:Hello from Nios II! 6
第 7 次:Hello from Nios II! 7
第 8 次:無輸出(count 重置為 0,未執行 printf)
第 9 次:Hello from Nios II! 1
第 10 次:Hello from Nios II! 2
四、運行項目
- . 右鍵單擊hello_led目錄再單擊Build Project ,完成編譯后點擊右上角的Nios II => Quartus Prime Programmer;點擊Add File添加.sof文件,將其下載到DE2-115板子上,如果出現管腳連接錯誤,可能是SW19開關在PROG上,切換到RUN即可下載。
- 在Eclipss中點擊右上角的Run => Run As Nios II Hardware;點擊Target Connection => Refresh Connections出現接口即可先后按下Apply和Run開始運行項目。
- 運行視頻
studio_video_1745415137269