基于 Nios II 的串口打印和流水灯设计【使用 Quartus 软件】【掌握 SOPC 开发流程】
目錄
- 一、前言
- 二、實驗步驟
- 第一步:硬件部分設計
- 1)建立新項目
- 2)進行 Qsys 系統設計
- 3)完成 Qsys 設計的后續工作
- 4)原理圖設計
- 5)編譯工程及物理針腳分配。
- 第二步:軟件部分設計
- 1)啟動 Nios II SBT
- 2)創建工程
- 3)運行項目
- 三、實驗總結
- 四、參考資料
一、前言
實驗目的
- (1)學習 Quartus II 13.1、Platform Designer、Nios II SBT 的基本操作;
- (2)初步了解 SOPC 的開發流程,基本掌握 Nios II 軟核的定制方法;
- (3)掌握 Nios II 軟件的開發流程,軟件的基本調試方法。
實驗設備
- 硬件:PC 機、DE2-115 FPGA 實驗開發平臺;
- 軟件:Quartus II 13.1、Platform Designer、Nios II SBT(后兩個軟件可以從 Quartus II 13.1 中打開)。
實驗內容
- 使用 FPGA 資源搭建一個簡單 Nios II 處理器系統,具體包括:
- (1) 在 Quartus II 中建立一個工程;
- (2) 使用 PD 建立并生成一個簡單的基于 Nios II 的硬件系統;
- (3) 在 Quartus II 工程中編譯基于 Nios II 的硬件系統并生成配置文件 .sof;
- (4) 在 Nios II SBT 中建立對應硬件系統的用戶 C/C++ 工程,編寫一簡單用戶程序,在 Nios II SBT 中編譯程序生成可執行文件 .elf;
- (5) 將配置文件 .sof 和可執行文件 .elf 都下載到 FPGA 進行調試運行。
實驗原理
- 控制 LED 燈閃爍的用戶程序代碼很小,可將其固化在片內 ROM 來執行。變量、堆棧等空間使用片內 RAM,不使用任何片外存儲器。整個系統的框圖如圖 1 所示。
- 從圖 1.1 控制 LED 閃爍的系統框圖可知,其它邏輯與 Nios II 系統一樣可存在于 FPGA 中。Nios II 系統可與其它片內邏輯相互作用,取決于整個系統的需要。為了簡單起見,本實驗在 FPGA 內不包括其它邏輯。
二、實驗步驟
第一步:硬件部分設計
1)建立新項目
- 使用 Quartus II 新建項目:【File】→【New Project Wizard…】。
- 繼續點擊【Next >】進入如下界面:選擇工程保存路勁及工程名,然后點擊【Next >】。
- 繼續點擊【Next >】進入如下界面:芯片系列選擇【Cyclone IV E】,再選擇【EP4CE115F29C7】后,點擊【Next >】。
- 繼續點擊【Next >】,然后點擊【Finish】即可創建完成。
2)進行 Qsys 系統設計
(1)打開 Qsys。
- 點擊【Tools】→【Qsys】。
(2)保存文件。
- 點擊【File】→【Save】。
- 輸入文件名 kernel ,然后點擊【保存】。
(3)設置時鐘。
- 雙擊或者右鍵 clk_0 元件,點擊【Edit】。
- 時鐘設為 50M Hz,然后點擊【Finish】。
(4)添加 CPU 和外圍器件。
——① 添加 Nios II 32-bit CPU。
- 元件列表內搜索 “ nios ”,選擇【Nios II Processor】,點擊【Add…】。
- 彈出元件配置窗口,保持默認配置即可,點擊右下角的【Finish】完成配置。
- 右擊添加的 Nios II 32-bit CPU 元件,點擊【Rename】,重命名為【cpu】。
說明:
(1)名字最前面應該使用英文;
(2)能使用的字符只有英文字母、數字、下劃線 “ _ ”;
(3)不能連續使用 “ _ ”符號,在名字的最后也不能使用 “ _ ”。
- 將 cpu 的 clk 和 reset_n 分別與系統時鐘 clk_0 的 clk 和 clk_reset 相連,如下圖所示(點擊結點即可連接)。
——② 添加 jtag uart 接口。
jtag uart 接口是 Nios II 嵌入式處理器新添加的接口元件,通過內嵌在 Intel FPGA 內部的 JTAG 電路,可以實現在 PC 主機與 Qsys 系統之間進行串行字符流通信。
- 搜索 “ jtag ” ,選擇【JTAG UART】元件,點擊【Add…】添加。
- 彈出的配置窗口,依然保持默認配置,點擊右下角【Finish】。
- 再重命名為【jtag_uart】。
- 進行 clk、reset、avalon_jtag_slave 的連線,以及中斷 irq 連線,中斷號設為 0。
——③ 添加片上存儲器 On-Chip Memory(RAM)核。
- 搜索框輸入 “ On Chip ”,找到【On-Chip Memory(RAM or ROM)】,點擊【Add…】添加。
- 配置窗口內,設置內存為 40960(40 KB),其余保持默認,再點擊【Finish】。
- 重命名為【onchip_ram】。
- 連接 clk1、s1、reset1 如下圖所示。
——④ 添加 PIO 接口。
- 搜索框輸入 “ pio ”,選擇【PIO (Parallel I/O)】后點擊【Add…】添加。
- 確定 Width 為 8 bits,Direction 選擇 output ,其它保持默認。
- 重命名為 【pio_led】。
- 引出管腳:雙擊 Export 列的 external_connection ,命名為 out_led。
- 連接 clk、reset、s1 如下圖所示。
——⑤ 添加片 System ID Peripheral 核。
- 搜索 “ sys ”,選擇【System ID Peripheral】后,點擊【Add…】添加。
- 保持默認配置,點擊【Finish】。
- 重命名為 【sysid】。
- 再連接 clk、reset、control_slave 如下圖所示。
——⑥ 完整 Qsys 系統設計。
- 所有元件及相關連線情況如下圖所示:
3)完成 Qsys 設計的后續工作
(1)基地址分配。
- 點擊【System】→【Assign Base Addresses】。
- 完成后,【Base】一列不再出現重復的具體的地址。
(2)指定 Nios II 的復位和異常地址。
- 雙擊 cpu 配置屬性,在【Core Nios II】欄。
- 配置 Reset Vector 和 Exception Vector 為【onchip_ram.s1】。
(3)使用 FPGA 資源。
- 點擊【Generate】→【Generate…】。
- 如果提示是否保存 .qsys 文件,選擇保存。
- 點擊【Generate】,再點擊【Save】。
- 點擊【Close】關閉窗口。
- 最后關閉 Qsys 窗口,返回到 Quartus 窗口。
4)原理圖設計
(1)新建原理圖文件
- 點擊【File】→【New…】。
- 選擇【Block Diagram/Schematic File】,再點擊【OK】。
- 點擊元件按鈕,搜索前面創建的【kernel】,放置在原理圖上。
(2)加入 Quartus II IP File 文件。
- 點擊【Assignments】→【Settings】。
- 選擇 kernel.qip 文件,是在 ..\kernel\synthesis 目錄下,選中并打開它。
- 點擊【Add】添加進去。,再點擊【OK】。
(3)進行邏輯連接和生成管腳。
- 右擊 kernel 模塊,點擊【Generate Pin for Symbol Ports】生成管腳。
- 雙擊管腳名,重命名為 clk、reset_n、pio_led[7…0] 即可。
(4)芯片引腳設置。
- 點擊【Assignments】→【Device】。
- 點擊【Device Pin Options】。
- 將未用的引腳設置為【As input tri-stated】。
- 將特殊引腳設置為常規引腳【Use as regular I/O】,最后點擊【OK】。
- 再點擊一次【OK】。
(5)保存原理圖文件。
- 如下圖所示。
5)編譯工程及物理針腳分配。
(1)編譯工程
- 點擊播放按鈕,開始編譯工程。
- 無錯即可。
(2)分配物理針腳
- 點擊【Pin Planner】快捷鍵。
- 按照下圖所示分配針腳:
- 關閉針腳配置界面,回到 Quartus 后再次編譯項目。
- 至此完成項目的硬件設計。
第二步:軟件部分設計
1)啟動 Nios II SBT
- 點擊【Tools】→【Nios II Software Build Tools for Eclipse】。
- 工作空間選擇該項目文件夾。
2)創建工程
- 點擊【File】→【New】→【Nios II Application and BSP from Template】。
- 選擇 kernel.sopcinfo 文件,再輸入工程名,選擇 Hello World ,最后點擊【Finish】即可。
- 打開 hello_world.c 文件,修改為如下代碼。
- 右擊工程名,點擊【Build Project】編譯。
- 編譯完成。
3)運行項目
(1)配置 FPGA。
- 首先連接 JTAG 到開發板,確定 PC 已正確安裝驅動、防火墻不會影響到 JTAG 的正常工作。
- 最后給開發板上電。
- 啟動【Quartus Prime Programmer】。
- 添加下載文件,然后點擊【Start】開始下載,下載成功后關閉,回到 Eclipse 主界面。
(2)運行/調試程序。
- 點擊【Run】→【Run Configurations…】。
- 轉到【Target Connection】標簽欄,點擊右側的【Refresh Connections】將 USB-Blaster 加入,如下圖所示:
- 點擊【Apply】后點擊【Run】。
- 下載完成后,可以看到 Console 里打印信息:Hello World,且開發板上流水燈顯示。
三、實驗總結
- 通過這次串口通信及流水燈實現,大致可以掌握 SOPC 開發流程,以及Qsys 硬核及 Nios II 軟核的搭建方法,也可以了解到流水燈的工作原理,也可以自行修改方向、速度等參數來改變流水燈的狀態。
四、參考資料
[1] 基于Nios II的hello world
總結
以上是生活随笔為你收集整理的基于 Nios II 的串口打印和流水灯设计【使用 Quartus 软件】【掌握 SOPC 开发流程】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 彻底卸载sql sever 2005
- 下一篇: 【操作系统 · 调度】多处理器 实时调