【小梅哥SOPC學習筆記】Altera SOPC嵌入式系統設計教程

Altera SOPC嵌入式系統設計教程

第1章 概述

SOPC(System On Programmable Chip,可編程的片上系統)是Altera公司提出來的一種靈活、高效的SOC解決方案。它將處理器、存儲器、I/O口、LVDS、CDR等系統設計須要的功能模塊集成到一個可編程器件上,構成一個可編程的片上系統。ios

1.1 SOPC及其技術

現今,可將SOPC視爲是基於FPGA解決方案的SOC。與ASIC的SOC解決方案相比,SOPC系統及其開發技術具備更多的特點,也有多種途徑可構成SOPC方案。算法

1.1.1基於FPGA嵌入IP硬核的SOPC系統

基於FPGA嵌入IP硬核的SOPC系統是指在FPGA中預先植入處理器。目前最經常使用的嵌入式處理器大可能是採用含有ARM32位知識產權處理器核的器件。爲了達到通用性,必須爲常規的嵌入式處理器集成諸多通用和專用的接口,但這樣無疑會增長芯片的成本和功耗。若是將ARM或其餘處理器核以硬核方式植入FPGA中,利用FPGA的可編程邏輯資源,按照系統功能需求來添加接口功能模塊,既能實現目標系統功能,又能下降系統的成本和功耗。 這樣就使得FPGA靈活的硬件設計與處理器的強大軟件功能有機地結合在一塊兒,高效地實現 SOPC系統。編程

1.1.2基於FPGA嵌入IP軟核的SOPC系統

將IP硬核直接植入FPGA的解決方案存在如下不足:瀏覽器

(1)因爲此類硬核多來自第三方公司,FPGA廠商一般沒法直接控制其知識產權費用,從而致使FPGA器件價格相對偏高。緩存

(2)因爲硬核是預先植入的,設計者沒法根據實際須要改變處理器的結構,如總線規模、接口方式、指令形式,更不可能將FPGA邏輯資源構成的硬件模塊以指令的形式嵌入硬件加速模塊(如DSP)。安全

(3)沒法根據實際設計須要在同一 FPGA中集成多個處理器。網絡

(4)沒法根據須要裁剪處理器硬件資源以下降FPGA成本。數據結構

(5)只能在特定的FGPA中使用硬核嵌入式處理器。多線程

若是利用軟核處理器,就能有效地彌補上述不足。併發

目前最有表明性的軟核處理器分別是Altera公司的Nios II核,以及Xilinx公司的Mi-croBlaze核。特別是Nios II核,能很好的解決上述五方面問題。

Altera的Nios II核是用戶可隨意配置和構建的32位嵌入式處理器IP核,釆用Avalon 總線結構通訊接口;包含由First Silicon Solution(FS2)開發的基於JTAG的片內設備(OCI) 內核(這爲開發者提供了強大的調試功能)。在把Nios II植入FPGA前,用戶能夠根據設計要求,利用Quartus II和Qsys,對Nios II及其外圍設備進行構建,使該嵌入式系統在硬件結構、功能特色、資源佔用等方面全面知足用戶系統設計的要求。Nios II核在同一FPGA中的植入數量沒有限制,只要FPGA資源足夠便可。

另外,在開發工具的完備性方面,Nios II具備很大的優點。Altera不只提供了強大的 HAL系統庫支持,還提供了嵌入式操做系統和TCP/IP協議棧的支持。

就成本而言,因爲Nios II是由Altera公司直接提供而非第三方廠商產品,故用戶一般無須支付知識產權費用,Nios II的使用費用僅僅是其佔用的FPGA邏輯資源的費用。所以,用戶選用的FPGA越便宜,則Nios II的使用費就越低。

特別值得一提的是,經過Matlab和DSP Builder,用戶能夠爲Nios II處理器設計各種硬件數字處理器,並以指令的形式加入Nios II的指令集。例如,用戶能夠根據設計項目的具體要求,爲所欲爲地構建本身的DSP處理器系統,而沒必要拘泥於其餘DSP公司已上市的有限款式的DSP處理器。

圖片1

1.2 NiosII軟核處理器

1.2.1 Nios II軟核處理器簡介

繼第一代可配置嵌人式軟核處理器Nios以後,2004年6月,Altera公司又推出了性能更好的Nios II嵌入式軟核處理器。它與2000年上市的原產品Nios相比,最大處理性能提髙了3倍,而CPU內核部分的面積最大可縮小1/2。在2013年末,Altera公司又推出了NIOS II嵌入式軟核處理器GEN2版本,並將以前的NIOS II嵌入式軟核處理器改名爲NIOS II Classic。GEN2版本與Classic相比,有類似的尺寸和性能,用戶只須要作很小的改動,就可以把Classic版本上的軟件移植到GEN2版本上來。

Nios II系列32位RISC嵌入式處理器具備超過200 DMIP的性能,在低成本FPGA中實現成本只有35美分。因爲處理器是軟核形式,具備很大的靈活性,能夠在多種系統設置組合中進行選擇,知足成本和功能要求。採用Nios II處理器進行設計,能夠幫助用戶將產品迅速推向市場,延長產品生命週期,防止出現處理器逐漸過期的狀況。

Nios II開發包含有一套通用外設和接口庫,部分IP和接口如表1.2所列。

圖片2

利用Qsys軟件中的用戶邏輯接口嚮導,用戶還能夠生成本身的定製外設,並將其集成在Nios II處理器系統中。使用Qsys,用戶能夠在Altera FPGA中,組合實現現有處理器沒法達到的嵌入式處理器配置,獲得用戶所需的結果。

Nios II系列嵌入式處理器使用32位的指令集結構(ISA),創建在第一代16位Nios處理器的基礎上,定位於普遍的嵌入式應用。Nios II Classic處理器系列包括3種內核:快速的(Nios II/f)、經濟的(Nios/e)和標準的(Nios II/s)內核。更新版的Nios II GEN2處理器系列則取消了標準型內核,保留了經濟型和快速型。。每一型號都針對價格和性能進行了優化。使用 Altera 的 Quartus II 軟件、Qsys 工具以及Nios II集成開發環境(IDE),用戶能夠輕鬆地完成基於Nios II處理器的嵌入式系統開發。

表1.3列出了 Nios II系統的3種內核及特性。

表1.4列出了 Nios II處理器的特性。

圖片3

圖片4

1.2.2可配置嵌入式軟核處理器的優點

嵌入式處理器開發人員面對的一個最大挑戰就是如何選擇一個知足其應用要求的處理器。如今已有數百種嵌入式處理器,每種處理器都具有一組不一樣的外設、存儲器、接口和性能特性,用戶很難作出一個合理的選擇:要麼爲了匹配實際應用所需的外設和接口要求而不得不選擇在某些性能上多餘的處理器;要麼爲了保持成本的需求而達不到原先預計的理想方案。

採用Nios II處理器,用戶將不會侷限於預先製造的處理器技術,而是根據本身的要求定製處理器,按照須要選擇合適的外設、存儲器和接口。此外,用戶還能夠輕鬆集成本身專有的功能(如DSP,用戶邏輯),建立一款「完美」的處理器,如圖1.1所示,使用戶的設計具備獨特的 競爭優點。

圖片5

 

用戶所須要的處理器,應該可以知足當前和從此的設計性能需求。因爲從此發展具備不肯定性,所以,設計人員必須可以更改其設計,加人多個CPU,定製指令集及硬件加速器,以達到新的性能目標,而Nios II處理器能知足以上要求。

採用Nios II處理器,用戶能夠根據須要設置功能,在低成本Altera器件中實現。在單個 FPGA中實現處理器、外設、存儲器和I/O接口功能,能夠下降用戶的系統整體成本。

不管是外設、存儲器接口、性能特性,仍是成本。這些優點的體現都藉助於在Altera的FPGA上建立一個定製的片上系統,或者更精確地說,建立一個可編程單芯片系統。

1.提供合理的性能組合

使用Altera Nios處理器和FPGA,用戶能夠建立一個在處理器、外設、存儲器和1/0接口方面的完美方案。選擇以下:

Ø 3種處理器內核——Nias II開發人員能夠選擇一種或如下任意3種內核的組合:具有髙性能的快速的內核(Nios II/f),具有低成本的經濟的內核(Nios II/e),性能和尺寸折中的標準的內核(NiosII/s)。

Ø 超過60種Qsys配備的內核——用戶能夠建立一組適合本身應用的外設、存儲器和I/O接口。

Ø 無限制的DMA通道組合——直接存儲器存取(DMA)能夠鏈接到任何外設,從而提升系統的性能。

Ø 可配置的硬件及軟件調試特性——軟件開發人員具備多個調試選擇,包括基本的JTAG的運行控制(運行、中止、單步、存儲器等)、硬件斷點、數據觸發、片內和片外跟蹤、嵌入式邏輯分析儀。這些強大的工具能夠在開發階段使用,一旦調試經過後就能夠去掉。

2.提高系統的性能

在嵌入式開發中,設計人員一般都會選擇一個比實際所需的性能要高的處理器(意味着更髙的成本),從而爲設計保留一個性能上的安全餘量。Nios II系統的性能是能夠根據應用來裁剪的,相比固定的處理器,在較低的時鐘速率下,具有更高的性能。Nios II的特性能夠在如下幾個方面來提高系統的性能:

Ø 多CPU內核一Nios II開發者能夠選擇最快的內核(Nios II/f)以得到高性能,還能夠經過添加多個處理器來得到所需的系統性能。

Ø FPGA系列—Nios II處理器能夠工做在Altera推出的全部Cyclone系列、MAX10系列、Arria系列和Stratix系列的FPGA上。尤爲是在Stratix V器件上,Nios II/f內核超過350 DMIPS的性能,僅佔用1800個邏輯單元(LE)。能夠說用戶幾乎是免費獲得一個200 DMIPS性能的處理器。

Ø 多處理器系統——開發人員能夠在FPGA內部實現多個處理器內核。經過將多個 Nios II/f內核集成到單個器件內,能夠得到極高的性能而不用從新設計印刷電路板。Nios II的IDE支持這種多處理器在單一 FPGA上的開發,或多個FPGA共享一條JTAG鏈。

Ø 定製指令—定製指令是一種擴展處理器指令的方法,最多能夠定製256個用戶指令 (見圖1.2)。定製指令是處理器處理複雜的算術運算和加速邏輯的最佳途徑。例如,將一個在64K字的緩衝區實現的循環冗餘碼校驗(CRC)的邏輯塊做爲一個定製的指令,要比用軟件實現快27倍。

Ø 硬件加速—經過將專用的硬件加速器添加到FPGA中做爲CPU的協處理器,CPU就能夠併發地處理大塊的數據。例如上面提到的CRC例子,經過硬件加速器處理一個64K字的緩衝區,比用軟件快530倍。Qsys設計工具中包含一個嚮導,用戶能夠用此嚮導來將加速邏輯和DMA通道添加到系統中。

 

圖片6

 

3.下降系統成本

嵌入式設計人員老是堅持不懈地尋找下降系統成本的方法。然而,選擇一款處理器,老是存在性能、特性與成本的衝突,最終結果老是以增長系統成本爲代價。利用Nios II處理器能夠經過如下途徑來下降成本:

Ø 更大規模的系統集成—將一個或更多的Nios II處理器組合,選擇合適的一組外設、 存儲器、I/O接口,這些方法可下降電路板的成本、複雜程度以及功耗。

Ø 優化FPGA/CPU的選擇—Cyclone系列的FPGA提供可行的、低成本的嵌入式方案。經濟型的內核(Nios II/e)只佔用不到35美分的Cyclone器件資源,僅佔用600個邏輯單元,給其餘片外的器件保留了更多的邏輯資源。Nios II/e內核定位於低成本、須要低處理性能的系統。佔用不多的邏輯資源還使得在單個的FPGA芯片上嵌入多個處理器成爲可能。

Ø 更好的庫存管理—嵌入式系統一般包含了來自多個生產商的多種處理器,以應付多變的系統任務。當一種器件多餘而另外一種短缺的時候,管理這些處理器的庫存即是個問題。可是使用標準化的Nios II軟核處理器,庫存的管理將會大大簡化,由於經過將處理器實如今標準的FPGA器件上,減小了處理器種類的需求。

4.延長產品的生命週期

開發人員但願快速將產品推向市場並保持一個較長的產品生命週期,避免更新換代。基於Nios II的系統在如下幾個方面能夠幫助用戶實現此目標:

Ø 縮短產品的上市時間—FPGA可編程的特性使其具備最快的產品上市速度。許多的設計經過簡單的修改均可以被快速地實現到FPGA設計上。Nios II系統的靈活性和快速上市的特性源於Altera提供完整的開發套件、衆多的參考設計、強大的硬件開發工具(Qsys)和軟件開發工具(Nios II IDE)。用戶能夠藉助Nios II開發套件所帶的設計,在幾個小時內就完成本身的設計原型。因爲將Nios II處理器放置於FPGA內部就能夠驗證外部的存儲器和I/O組件,電路板設計速度顯著加快。

Ø 創建有競爭性的優點—維持一個基於通用硬件平臺的產品的競爭優點是很是困難的。而包含一個或多個Nios II處理器,具有硬件加速、定製指令、定製的可裁剪的外設等的SOPC系統,具有了競爭的優點。

Ø 延長了產品的生存時間—使用Nios II處理器的SOPC產品帶來的一個獨特優點就是可以對硬件進行升級。即便產品已經交付給客戶,仍能夠按期升級。這些特性能夠解決不少問題:

l 延長產品的生存時間,隨着時間的增長,能夠不斷將新的特性添加到硬件中。

l 減少因爲標準的制定和改變而帶來的硬件上的風險。

l 簡化了硬件缺陷的修復和排除。

l 避免處理器的過期。嵌入式處理器供應商一般提供一個很寬的配置選擇範圍以適應不一樣的客戶羣。不可避免的是,某個或多個處理器有可能會由於生產計劃等緣由而中止供應或很難尋找。Nios II設計人員擁有在Altera FPGA上使用和配置基於 Nios II設計的永久許可。一個基於Nios II的設計能夠容易地被從新移植到新系列的FPGA器件中,從而保護了對應用軟件的投資。

Ø 在產品產量增長的狀況降低低成本—旦一個FPGA的設計被選定,而且打算進行大批量的生產,能夠選擇將它移植到Altera的HardCopy(—種結構化的ASIC系列) 中,從而下降了成本並提高性能。Altera還能夠提供Nios II處理器的ASIC製造許可,用戶能夠將包含Nios II處理器、外設、Avalon交換式總線的設計移植到基於單元的ASIC中。

第2章 SOPC開發流程簡介

2.1 SOPC開發流程

SOPC設計包括以Nios II軟核處理器爲核心的嵌入式系統的硬件配置、硬件設計、硬件仿真、IDE環境的軟件設計、軟件調試等。SOPC系統設計的基本軟件工具包括Quartus II,用於完成Nios II系統的分析綜合、硬件優化、適配、配置文件編程下載以及硬件系統測試等;Qsys,它是Nios II軟核處理器的開發包,用於實現Nios II系統配置、生成以及與 Nios II系統相關的監控和軟件調試平臺的生成;ModelSim,用於對Qsys生成的 NiosII的HDL描述語言程序進行系統功能仿真;Matlab/DSP Builder,用於生成Nios II系統的硬件加速器,進而爲Nios II系統定製新的指令;Nios II IDE,用於完成基於Nios II系統的軟件開發和調試,並可藉助其自帶的Flash編程器完成對Flash以及EPCS的編程操做,此外Nios II IDE還包括一個指令集成模擬器、Microc/OS - II實時操做系統、文件系統以及小型 TCP/IP 協議棧。

SOPC的開發過程當中要使用到Quartus II、Qsys以及Nios II IDE,三者之間關係如圖2. 1所示。

SOPC的開發流程一般包括2個方面:基於Quartus II、Qsys的硬件設計,基於 Nios II IDE的軟件設計。對於比較簡單的Nios II系統,一我的即可執行全部設計;對於比較複雜的系統,硬件和軟件設計能夠分開進行。

 

圖片7

 

2.1.1硬件開發

硬件開發使用Quartus II和Qsys。硬件設計工做以下:

(1)用Qsys軟件從Nios II處理器內核和Nios II開發套件提供的外設列表中選取合適的CPU、存儲器以及各外圍器件(如片內存儲器、PIO、定時器、UART、片外存儲器接口等),並定製和配置它們的功能;分配外設地址及中斷號;設定復位地址;最後生成系統。用戶也能夠添加用戶自身定製指令邏輯到Nios II內核以加速CPU性能,或添加用戶外設以減輕CPU的任務。

(2)使用Qsys生成Nios II系統後,將其集成到整個Quartus II工程中。能夠在 Quartus II工程中加入Nios II系統之外的邏輯,大多數的SOPC設計都包括NioslI系統之外的邏輯,這也是SOPC系統的優點所在。用戶能夠集成自身定製的硬件模塊到SOPC設計,或集成從Altera或第3方IP供應商中獲得的其它現成知識產權設計模塊。

(3)使用Quartus II軟件來選取具體的Altera FPGA器件型號;而後爲Nios II系統上的各I/O口分配引腳,另外還要根據要求進行硬件編譯選項或時序約束的設置;最後編譯Quartus II工程,在編譯過程當中Quartus II將對Qsys生成系統的HDL設計文件進行佈局佈線,從HDL源文件綜合生成一個適合目標器件的網表,生成FPGA配置文件(.sof)。

(4)使用Quartus II編程器和Altera下載電纜(如USB Blaster),將配置文件(用戶定製的Nios II處理器系統的硬件設計)下載到目標板上。當校驗完當前硬件設計後,可將新的配置文件下載到目標板上的非易失存儲器裏(如EPCS器件)。下載完硬件配置文件後,軟件開發者就能夠將此目標板做爲軟件開發的初期硬件平臺進行軟件功能的開發驗證了。

2.1.2軟件開發

軟件開發使用Nios II IDE。它是一個基於Eclipse IDE構架的集成開發環境,包括:

Ø GNU開發工具(標準GCC編譯器、鏈接器、彙編器和makefile工具等);

Ø 基於GDB的調試器,包括軟件仿真和硬件調試;

Ø 提供用戶一個硬件抽象層HAL(Hardware Abstraction Layer);

Ø 提供嵌入式操做系統MicroC/OS-II和LwTCP/IP協議棧的支持;

Ø 提供幫助用戶快速入門的軟件模板;

Ø 提供 Flash 下載支持(Flash Programmer 和 Quartus II Programmer)

熟悉Linux下GNU開發工具的開發者基本上能夠毫無困難地使用Nios II IDE。

使用Nios II IDE,可完成Nios II處理器系統的全部軟件開發任務。使用Qsys 生成系統後,能夠直接使用Nios II IDE開始設計C/C+ +應用程序代碼。Altera提供外設驅動程序和硬件抽象層(HAL),使用戶可以快速編寫與低級硬件細節無關的Nios II程序。除了應用代碼,用戶還能夠在Nios II IDE工程中設計和使用定製庫。

若是沒有軟件開發的目標板,能夠經過Nios II指令集仿真器(ISS)運行和調試代碼;ISS 可仿真處理器、存儲器和stdin/stdout/stderr流,使用戶能夠檢驗程序流和算法正確性。一旦有一個目標板,用戶就可使用下載電纜(如USB Blaster)下載軟件到目標板進行調試/ 運行。

2.1.3 SOPC基本幵發流程簡介

在開始進行SOPC設計前,讓咱們先了解一下SOPC系統的基本開發流程。圖2.2所示爲基於Nios II系統的SOPC開發流程。

圖片8-1

圖片8-2

參照圖2.2說明SOPC基本的開發流程以下:

1) 在進行SOPC開發以前,首先必須肯定系統的需求,如應用系統須要的計算性能、帶寬和吞吐量、接口類型以及是否須要多線程的軟件等。完整的基於Nios II的SOPC系統是一個軟硬件複合的系統。在開發時,可分爲硬件和軟件兩個部分,但在實際設計過程當中,有時候所須要的功能既能夠用軟件也能夠用硬件來實現。具體採用什麼方式,要根據系統設計要求來權衡。通常來講,用軟件實現時,在設計上容易修改或者增刪,査錯也比較容易,又幾乎不增長佔用的邏輯資源,但執行速度較慢。因此,在設計規劃時,在知足性能的前提下,優先考慮軟件實現。

2) 每一個開發過程開始時都應創建一個工程,Quartus II是以工程的方式對設計過程進行管理的。在工程中創建頂層模塊文件.bdf,其將整個工程的各個模塊包容在裏面,編譯的時候就將這些模塊整合在一塊兒。這個頂層文件至關於傳統電路設計中的電路板(PCB)。

3) 在Qsys中添加須要的功能模塊(Nios II及其標準外設模塊),完成後生成一個系統模塊。若是須要,用戶能夠定製指令和外設邏輯。由Qsys最終生成的系統模塊至關於傳統的單片機或ARM。

4) 若是須要,可使用Altera公司提供的LPM功能模塊。Quartus II包含了大量經常使用功能模塊(如計數器、累加器、比較器、譯碼器等),使用這些模塊能大大加快開發的速度。通常來講,一個設計只有不多部分的模塊須要本身從零設計。LPM功能模塊至關於傳統設計中除處理器之外的邏輯芯片(如74系列)。

5) 若是須要,創建本身的功能模塊。當設計中現有的模塊功能不能知足設計要求時,要求用戶本身設計。能夠用硬件描述語言,也能夠用原理圖的輸入方法來設計本身的功能模塊。設計本身的功能模塊時,能夠做爲一個獨立的工程來設計,並生成模塊符號(Symbol),而後將源文件(實現該模塊的原理圖或HDL文件)拷貝到頂層模塊所在的工程目錄下,這樣在頂層模塊中就可使用這個自定義模塊的符號。使用自定義功能模塊,至關於在傳統設計中,市面上買不到某種芯片而去定作芯片。

6) 在頂層模塊中,分別將Qsys生成的系統模塊、LPM功能模塊以及用戶自定義功能模塊添加到頂層模塊中,而後將各個功能模塊用連線連起來組成系統功能原理圖。這個過程相似傳統電路設計中,將全部要使用到的芯片焊接到電路板上,而後經過PCB上的連線將各個芯片鏈接起來,組成電路系統。

7) 爲系統功能原理圖選擇芯片載體併爲各個輸入/輸出信號分配芯片的引腳。

8) 設置編譯選項,從而讓編譯器按照用戶設定來進行編譯。

9) 編譯系統,生成硬件系統的配置文件.sof和.pof。編譯系統是一個很是複雜的過程,包括優化邏輯的組合、綜合邏輯、適配FPGA、佈線以及時序分析等步驟。

10) 打開Nios II IDE軟件進行用戶程序開發。固然這1步也能夠在Qsys生成系統模塊後當即進行。這個過程與傳統嵌入式系統的軟件開發相似, 惟一的不一樣在於,軟件所運行的嵌入式系統是本身定製的、裁剪過的,所以可能受硬件的侷限會小一些。

11) 對用戶軟件進行編譯,生成可執行文件.elf。

12) 能夠在IDE的指令集仿真器(ISS)上仿真軟件和運行/調試軟件。

13) 將配置文件.sof下載到FPGA,將可執行文件.elf下載到RAM(外部或內部)。

14) 在目標板上調試軟件,直到硬件和軟件設計都達到設計要求。

15) 利用IDE的編程工具將配置文件燒寫到FPGA的配置芯片或Flash。將可執行文件 .elf 編程到 Flash。

2.2 簡單SOPC實例開發任務及步驟

【任務】創建一個基於NIOS II處理器系統來控制一個LED燈閃爍。

【步驟】根據2.1.3小節,本節指導讀者完成SOPC實例開發流程,主要步驟有:

(1) 分析系統需求;

(2) 啓動Quartus II軟件和新建實例設計工程;

(3) 啓動新的Qsys系統;

(4) 在Qsys工具中定義並生成系統;

(5) 集成Qsys系統到Quartus II工程;

(6) 分析和綜合系統並分配引腳;

(7) 設置編譯選項並編譯硬件系統;

(8) 下載硬件設計到目標FPGA;

(9) 使用NIOS II Software Build Tools For Eclipse開發用戶程序;

(10) 調試用戶程序;

(11) 運行程序;

2.3 分析系統需求

每個SOPC系統開發以前,都應該仔細分析系統需求。例如:對所設計系統的運行性能 有什麼要求?系統要處理的帶寬有多大?應用要求哪一種類型的接口?應用要求多線程的軟件嗎?基於這些問題,用戶可肯定具體的系統要求,例如:

使用哪一種Nios II處理器內核:比較小的仍是比較快的?

Ø 設計要求什麼外設及其數量是多少?

Ø 功耗有何要求?

Ø 使用哪一種實時操做系統(RTOS)?

Ø 硬件加速邏輯在哪些方面可大大提髙系統性能?例如:增長一個DMA外設能釋放 CPU在進行數據複製時所佔用的資源嗎?定製的指令能取代DSP算法嗎?

本章實例的開發任務是:

Ø 展現可用於控制LED閃爍的簡單Nios II處理器系統。

Ø 利用最通用和有效的方法來創建實際的定製Nios II系統。

Ø 整個系統僅使用片內資源,且不依賴於目標板。

Ø 析任務能夠知道FPGA內硬件系統組成應包含:

Ø 帶有2 KB指令高速緩存的Nibs II/s處理器核;

Ø 2 KB片內ROM存儲器(Onchip_ROM)用於存儲程序代碼以及程序運行空間;

Ø 1 KB片內RAM存儲器(Onchip_RAM)用於變董存儲(R/W數據)、Heap、stack;

Ø 1位輸出I/O (PIO)引腳來控制LED;

Ø 系統識別外圍設備(SystemlD)(關於SystemID的功能見4.1.2小節)。

說明:因爲控制LED燈閃爍的用戶程序代碼很小,因此可將代碼固化在片內ROM來執行,變量、堆棧 等空間使用片內RAM,而不使用任何片外存儲器。使用片內存儲器能得到很是高的執行性能。

整個系統的框圖如圖2. 3所示。

圖中,其餘邏輯與NiosII系統同樣可存在於FPGA中。事實上,大多數帶有Nios II系統 的FPGA設計也包括其餘邏輯。Nios II系統可與其餘的片內邏輯相互做用,這取決於整個系統的須要。爲了簡單說明,本章的實例設計在FPGA內不包括其餘邏輯。

假定讀者具備如下的軟件:

Ø Altera Quartus II軟件版本13.0或更高的版本——軟件必須被安裝在符合Quartus II 最低要求的Windows計算機上。

Ø Nios II開發套件版本13. 0或更髙的版本。

不管是否擁有一塊開發板,讀者均可以按照本章所述來進行實例設計。若是沒有目標板,

 

圖片9

 

圖2.3控制LED閃爍的系統框圖

讀者仍然可使用本章所述內容,但不能目擊實例設計在硬件上運行。取而代之,用戶將能夠在Nios II指令集仿真器(ISS)上仿真軟件運行。若是讀者擁有開發板以及USB Blaster下載電纜,用戶將能目擊實例設計在硬件上運行及LED燈的閃爍。

2.4使用Quartus II創建工程

每一個開發過程開始時都應創建一個Quartus II工程,Quartus II以工程的方式對設計過程進行管理,Quartus II工程包括建立FPGA配置文件須要的全部設置和設計文件。

2.4.1 打開Quartus II軟件並創建工程

雙擊Quartus II圖標打開Quartus II 15.1軟件,如圖2.4所示。

選擇【file】【New】【New Quartus Prime Project】來新建一項工程。新建工程想到說明對話框如圖2.5所示。

在新建工程嚮導說明對話框中能夠了解在新建工程的過程當中咱們要完成哪些工做,這些

工做包括:

Ø 指定項目目錄、名稱和頂層實體;

Ø 指定項目設計文件;

Ø 指定該設計的Altera器件系列;

Ø 指定用於該項目的其餘EDA工具,如仿真使用的Modelsim工具

Ø 項目信息報告。

 

圖片10

圖片11

任何一項設計都是一項工程(Project),必須首先爲此工程創建一個放置與此工程相關的全部文件的文件夾,此文件夾將被Quartus II默認爲工做庫(Work Library)。一般,不一樣的設計項目最好放在不一樣的文件夾中,而同一工程的全部文件都必須放在同一文件夾中。

不要將文件夾設在計算機已有的安裝目錄中,更不要將工程文件直接放在安裝目錄中。文件夾所在路徑名和文件夾名中不能用中文,不能用空格,不能用括號(),可用下劃線「 _」。

圖2. 6第一欄用於指定工程所在的工做庫文件夾;第二欄用於指定工程名,工程名能夠取任何名字,也能夠直接用頂層文件的實體名做爲工程名(建議使用)第三欄用於指定頂層文件 的實體名。本例工程的路徑爲E:\easysopc_class\01_CoreCourse_GHRD文件夾,工程名與頂層文件的實體名同名爲CoreCourse_GHRD。

這裏解釋下CoreCourse_GHRD的意思,CoreCourse是芯航線的意思,GHRD叫作黃金設計頂層,GHRD是Altera首先提出的一個基於Qsys的HPS硬件參考設計工程,通常由板商提供的最基本的HPS硬件工程,開發人員能夠根據要求在此基礎上添加或者刪除FPGA端 IP器件,也可使能或者失能HPS的部分外設,配置HPS DDR3的時鐘參數。這裏咱們將這個概念引入到咱們的開發板中,做爲咱們板子的一個黃金設計頂層。固然,這一個實驗中,這個黃金設計頂層只是一個框架,並無晚上,咱們將在後續的實驗中逐步完善這個工程,當咱們全部實驗結束後,整個工程將是一個複雜且完整的,具備參考和實用價值的設計工程,成爲真正意義上的黃金設計頂層。

(4)單擊圖片12進入圖2.7所示對話框。

 

圖片13

 

這裏爲選擇建立工程類型,可選項包括建立空工程(Empty Project)和使用工程模版(Project Template),因爲工程模版須要在Altera官方網站下載,並且不必定適合咱們,所以這裏咱們直接選擇空工程便可。點擊圖片14進入下一步。

 

圖片15

因爲是新建工程,暫無輸入文件,因此直接單擊圖片16,進入圖2.8所示對話框。要根據實際使用的FPGA來選擇目標器件,這裏指定爲Cyclone IV系列的EP4CE10F17C8。

 

圖片17

 

在圖2. 8右邊的過濾器選項區域中,設計者能夠經過指定封裝、引腳數以及器件

速度等級來加快器件査找的速度。 v

指定完器件後,單擊圖片18進入圖2. 9所示對話框,選擇EDA工具。

本章所述實例是利用Quartus II的集成環境進行開發,不使用任何EDA工具,基於Verilog的數字邏輯教程中經常使用的設置仿真工具爲modelsim(altera),因爲本實驗暫不涉及到用戶邏輯的開發,無需使用modelsim仿真,所以這裏 不做任何設置和改動。

(7) 單擊圖2. 9中圖片19進入圖2. 10所示對話框。從圖2. 10中,設計者能夠看到工程文件配置信息報告。單擊圖片20按鈕(圖中未畫出),完成新建工程的創建。

圖片21

圖片22

固然,工程創建完成後,也是能夠根據設計中的實際狀況,經過選擇【Assignments】【Settings】來對工程進行從新設置。

2.4.2 創建頂層模塊

頂層模塊用於將整個工程的各個模塊包含在裏面,Quartus II編譯時將這些模塊整合在 一塊兒。頂層文件至關於傳統電路設計中的電路板(PCB),用於將各類功能的芯片焊接在上面。

頂層文件的實現方式有兩種,第一種是比較傳統的使用原理圖文件(.bdf),將全部的模塊生成原理圖符號,相似於一個一個的集成電路芯片,而後使用畫線的方式將各個模塊對應的端口鏈接起來,另外一種是世界使用Verilog或者VHDL語言進行例化,將每一個模塊在一個Verilog文件中例化並將相關的信號名爲相同的名字以實現鏈接。這兩種方式各有優缺點。原理圖方式進行頂層工程設計的優點是模塊間關係一看便知,邏輯清晰,可是缺點是不易維護,尤爲是在須要例化的模塊愈來愈多的時候,這種方式不管是從實現效率和可移植性上,都有很是大的侷限性,所以近些年來,使用的人已經愈來愈少。HDL文件直接例化的方式,雖然在邏輯關係上看着不如原理圖方式清晰,可是卻擁有無可匹敵的可移植行和便捷的修改特性,所以近些年來,愈來愈多的工程師開始選擇使用HDL文件來設計工程頂層。這裏,咱們也強烈推薦你們使用HDL的方式來設計頂層文件,儘可能不要使用原理圖的方式。

依次點擊【File】【New】【Verilog HDL File】來建立一個新的Verilog文件,並點擊【File】【Save As】將文件保存爲CoreCourse_GHRD.v

圖片23

24

對話框,如圖2. 13所示。

在圖2. 13中接受默認的文件名,而後點擊保存便可。至此,完成了頂層模塊的創建。在2.6.1小節中將講述怎樣將QSYS生成的模塊加人到頂層模塊中。

2.5 使用 Qsys建立 Nios II 系統

2.5.1 Qsys簡介

Qsys包含在Quartus II軟件中,它爲創建SOPC設計提供了圖形化環境,是早期Quartus II軟件中SOPC Builder版本的升級,在保持基本功能不變的前提下,增長了系統建設的靈活性。 SOPC由CPU、存儲器接口、標準外設和用戶自定義的外設等組件組成。Qsys容許選擇和自定義系統模塊的各個組件和接口。利用Qsys,用戶能夠很方便地將處理 器、存儲器和其它外設模塊鏈接起來,造成一個完整的系統。Qsys中已經包含了 Nios II處理器以及一些經常使用的外設IP模塊,用戶也能夠設計本身的外設IP。用戶在Qsys中定義Nios II系統的硬件特性,例如使用哪一個Nios II內核,系統中包括什麼外設。 Qsys不定義軟件操做,例如存儲器中哪裏存儲指令或哪裏發送stderr字符流,這些 工做在Nios II HDE中完成,見2. 9. 2小節。

Avalon總線和外設的配置是在Qsys的圖形用戶界面(GUI)中指定的。用戶 在GUI界面中指定各類參數和選項,這些參數和選項會存入一個系統qsys文件。qsys文件是一個文本文件,它完整地定義瞭如下內容:

(1) Avalon總線模塊結構與功能參數;

(2) 每一個外設結構與功能參數;

(3) 每一個外設的主/從角色;

(4) 每一個外設提供的端口信號;

(5)每一個可被多個主端口訪問的從端口的仲裁機制。

從內部來看,Qsys包含兩個主要部分:圖形用戶界面(GUI)和系統生成程序。 圖形用戶界面提供管理IP模塊、配置系統和報告錯誤等功能。用戶經過圖形用戶界面設計系統時,全部的設置都保存在一個以系統命名的qsys文件中,因此圖形用戶界面實際上就是qsys文件的專用編輯器。用戶經過圖形用戶界面完成設計以後,單擊Generate將啓動系統生成程序。系統生成程序完成大量的功能,建立了幾乎全部的Qsys輸出文件(HDL邏 輯文件、C程序的頭文件和庫文件、模擬仿真文件等)。

qsys文件是圖形用戶界面和系統生成程序之間的惟一交互渠道。對大部分用戶來講,僅僅瞭解qsys文件是由圖形用戶界面產生,而且系統生成程序要讀取qsys文件的內容就足夠 了。髙級用戶可使用文本編輯器來修改qsys文件編輯本身的設計,而不是使用圖形用戶界面。qsys文件傳遞給HDL生成器,用來建立系統模塊實際的寄存器傳輸級(RTL)描述。

當用戶使用Qsys建立一個新的系統時,Qsys自動生成一個以系統名 命名的系統qsys文件,全部的設計信息都保存在該qsys文件中。當使用Qsys從新打開一個已有的系統時,qsys文件是Qsys工具讀取該系統具體設計信息的惟一來源。系統qsys文件的內容隨着用戶吐信用戶界面對系統的編輯而改變。

當Qsys完成一個系統的搭建並生成了系統以後,會在工程文件夾下生成以下若干文件或文件夾。例如將Qsys系統保存爲mycpu.qsys,則工程文件夾下將會生成以下的文件或文件夾。

mycpu.qsys:Qsys系統文件(.qsys)——用於描述系統的硬件結構。

mycpu.sopcinfo:Sopc信息文件(.sopcinfo),Nios II IDE使用.sopcinfo文件來信息來爲目標硬件編譯軟件程序。

mycpu文件夾:mycpu下包含了整個Qsys系統生成的各類詳細文件,包括整個系統的例化文件(mycpu_inst.v)以及Qsys中使用到的全部組件的硬件描述語言(HDL)文件(在synthesis文件夾中), QuartusII符號模塊文件(.bsf)——該文件中的符號(Symbol)用於在使用原理圖設計頂層時添加到Quartus II工程頂層文件,使用Verilog設計頂層的方式不使用。

 

圖片24

全部Qsys的菜單命令如表2.1所列。:

在下一小節中,將以一個實例來說述Qsys的使用,讀者將執行下列步驟:

1) 啓動 Qsys;

2) 指定目標FPGA和時鐘設置;

3) 增長Nios II內核,片內存儲器和其它外設。

4) 指定基地址和中斷請求(IRQ)優先級。

5) 指定更多的Nios II設置。

6) 生成 Qsys 系統。 •

Qsys設計過程不須要按固定的順序進行,本節所述的設計步驟是經常使用的,便於讀者理解。然而,讀者可以使用不一樣的順序來執行Qsys設計步驟。

表2.1 Qsys菜單命令列表

圖片25-1圖片25-2

圖片26圖片27

圖片28

2.5.2 啓動 Qsys

打開Quartus II軟件。在Quartus II中選擇【Tools】->【Qsys】選項來啓動Qsys,建議首先新建一個Quartus II工程,而後再打開Qsys,如圖2. 14所示。 .. ,

Qsys啓動後,將自動建立好一個名爲unsaved.qsys的工程,該項目中僅僅包含了一個時鐘管理單元,以下圖所示:

圖片29

圖 2. 14 啓動 Qsys

這個時候咱們點擊【File】【Save】便可保存當前項目,這裏咱們將項目命名爲mysystem.qsys

圖片30

圖 2. 15 保存項目對話框

在圖2.15中輸入項目名稱。在本例中項目名爲mysystem。

特別注意,項目名稱不能與2.4. 2小節中創建的頂層HDL文件名同名,否則在後期Quartus II編譯該工程時將會報錯。

圖片31

圖 2. 16 Qsys 界面

2.5.3指定系統輸入時鐘頻率

Qsys工具打開後,clk_0是自動添加進來的,該元件是用來對輸入的時鐘和復位信號進行處理的。咱們雙擊該元件的名稱(clk_0),將會在右側彈出時鐘設置對話框,這裏咱們能夠設置輸入時鐘頻率,由於系統默認爲50MHz,而咱們芯航線FPGA開發板上使用的也是50MHz的晶振,即與系統默認一致,所以,這裏咱們不須要修改。當讀者在使用本身的目標板時,就須要根據本身的目標板實際狀況進行設置。須要注意的是,所設置的頻率必定要與系統實際運行的時鐘頻率相匹配。不然一些涉及到精確時序參數的外設(定時器、UART、SPI等等)可能沒法正常工做。

2.5.4添加Nios II處理器內核

執行下面的步驟,添加Nios II/s內核到系統:

圖片32

在圖2. 16所示IP Catlog欄,搜索框中輸入nios,在搜索結果中選中Nios II Processor,雙擊或者點擊Add按鈕打開NiOS II 處理器配置窗口。這裏分別對該設置窗口中的一些參數進行介紹。

main:選擇NIOS II處理器的內核類型。從main選項卡能夠看到,Nios II系列支持兩種類型的CPU,並給出了其支持的相關功能特性,詳細內容見3. 10節所列。根據應用要求和目標FPGA中的器件約束(邏輯資源)條件,選擇適合的CPU核。因爲芯航線FPGA學習套件上使用的FPGA器件(EP4CE10)的邏輯資源比較充足(10K),所以本實例選擇快速型CPU核Nios II/f,若是用戶使用的是邏輯資源有限的器件,如EP4CE6,則使用快速型內核比較緊張,建議選擇經濟型內核。這也是咱們選擇EP4CE10這款器件的緣由,爲了給用戶學習和使用NIOS II處理器留出至關的邏輯資源。

圖片33

Vectors:設置CPU的復位向量(Reset Vevtor)、異常向量(Exception Vector)和快速TLB命中異常向量(Fast TLB Miss Exception Vector)。

Reset Vevtor:復位向量用於設置CPU復位後從何處啓動,例如咱們在調試系統時,爲了方便,常設置CPU的復位向量爲SDRAM或SRAM,而當咱們的系統開發完成後,則將CPU的復位向量設置於FLASH,例如EPCS存儲器。這樣系統便可上電後自動從FLASH中複製程序代碼到內存中並運行。該選項只有當CPU的存儲器系統就緒後方可配置,所以,當咱們添加NIOS II CPU時,由於此時CPU的存儲器組件並未就緒,所以此項沒法配置,只有等咱們後續爲NIOS II添加好存儲器組件後,再回頭來進行修改。

Exception Vector:異常向量用於存放CPU處理異常事件的代碼,例如中斷處理代碼。在一個典型的系統中,該向量應該指向一個低延遲的存儲器,例如SDRAM、SRAM、或者片上存儲器(On Chip RAM)。

Fast TLB Miss Exception Vector:快速TLB命中異常向量主要與MMU協做,管理存儲器,本書所講解的知識贊不涉及到MMU方面的內容,所以此部份內容暫不作介紹。

 

圖片34

 

Caches and Memory Interfaces Tab:本選項卡主要設置CPU的數據和指令緩存部件。

Instruction cache:指令緩存用於緩存NIOS II處理器的各類指令,以提升CPU的運行效率。該緩存的大小從512字節到64K字節用戶可自定義設置,,固然也能夠不使用指令緩存。當選擇不使用指令緩存時,NIOS II處理器的指令總線將會被移除,所以,咱們必需要包含一個緊耦合型指令存儲器(tightly-coupled instruction memory)。關於此部分的深刻應用,須要用戶紮實掌握NIOS II處理器的知識後,再來深刻研究,剛開始接觸時,在芯片資源充足的狀況下,使用默認設置便可。

Data cache:數據緩存用於存放數據,

Data cache數據緩存選項用於指定緩存的大小。該緩存的大小從512字節到64K字節用戶可自定義設置,固然也能夠不使用指令緩存。關於此部分的深刻應用,須要用戶紮實掌握NIOS II處理器的知識後,再來深刻研究,剛開始接觸時,在芯片資源充足的狀況下,使用默認設置便可。

圖片35

Arithmetic Instructions:該選項卡用來設置NIOS II處理器實現算術指令的方式,這裏咱們能夠經過選擇Divide Hardware來設置NIOS II處理器是否支持硬件除法運算。也能夠選擇乘法、移位等運算的實現方式。

 

圖片36

JTAG Debug選項卡

爲了方便調試,爲CPU加人JTAG調試模塊。JTAG調試模塊要佔用較多的邏輯單元,若是整個系統已經調試完畢了,能夠選用取消勾選Include JTAG Debug,以減小系統佔用資源。JTAG調試模塊根據功能的不一樣可設置是否使用硬件斷點,使用數據觸發,跟蹤類型和跟蹤存儲等

 

圖片37

其餘選項爲用戶在實際的應用狀況中根據本身的需求合理設置,這裏不作過多的介紹。

在本實例中,咱們選擇使用Nios II/f型內核,不使用硬件除法器,指令緩存默認設置爲4K字節,數據緩存默認設置爲2K字節。Jtag Debug默認,其餘設置不變。點擊Finish按鈕便可完成NIOS II處理器的添加。

添加完成後,系統自動將該NIOS II處理器命名爲nios2_gen2_0,咱們能夠選中更名字,點擊鼠標右鍵選擇rename以對處理器進行重命名,這裏咱們不作改變,使用默認名。

注意,你們在給Qsys中建立的各個組件重命名是,名字最前面應該使用英文字母。能使用的字符只有英文字母、數字和「_」,不能連續使用「_」符號,在名字的最後也不能使用「_」。

2.5.5添加片內存儲器

衆所周知,處理器系統至少要有一個存儲器用於數據和指令。本章實例設計一個4KB 片內ROM存儲器(Onchip_ROM),用於存儲程序代碼以及程序運行空間;4KB片內RAM存 儲器(onchip_RAM)用於變童存儲(R/W數據)、Heap、stack等。

執行下列步驟來添加存儲器:

(1) 如圖,在IP Catalog中,輸入onchip來進行過濾,在搜索結果中選擇並雙擊On-Chip Memory (RAM or ROM),彈出片內存儲器配置嚮導對話框,如 圖2. 21所示。

 

圖片38

(2)在Memory Type選項區域中選中ROM (read-only),即指定爲ROM型。FPGA內部其實 並無專用的ROM硬件資源,實現ROM的思想是對RAM賦初值,並保持該初值,使其爲只讀的。ROM的內容在對FPGA進行配置時,一塊兒寫入FPGA。

圖片39

(3) 在Total Memory Size文本框中輸入4096,即指定4 KB的存儲容量。

(4) 不要改變其它任何默認設置。

(5) 單擊圖片40,在激活元件窗口中出現名稱爲onchip_memory2_0的片內存儲器。

(6) 右擊激活元件窗口中〇nchip_memory_0,而後選擇Rename將onchip_memory_0重命名爲onchip_ROM,如圖2. 22所示。

圖片41

(7)更改了ROM的名稱後,咱們在此雙擊onchip_ROM以對其參數進行編輯或查看,在最底部能夠看到Memory will be initialized from mysystem_onchip_ROM. hex,即onchip_ROM存儲器在上電時將使用mysystem_onchip_ROM. hex文件進行初始化。mysystem_onchip_ROM.hex在Quartus II工程目錄下,該文件能夠由用戶編輯生成,也能夠由IDE編譯生成,見2. 9. 3小節。在本實例中,將使用onchip_rom來存儲用戶程序,mysystem_onchip_ROM. hex將由IDE編譯生成,文件的內容即用戶程序。

圖片42

使用與添加onchip_RAM相同的方法,添加一個4KB的onchip_RAM。添加步驟中不

同之處在於:

(1) 在第(2)步中,Memory Type選項區中選中RAM(writeable),即指定爲RAM型;

(2) 在第(3)步中,Total Memory Size文本框中輸人4096,即指定4 KB的存儲容量。

(3) 在第(6)步中,重命名爲onchip_RAM。

2.5.6 添加 PIO

PIO爲Nios II處理器系統接收輸人信號以 及輸出信號提供了一種簡易的方法。本實例設計使用1個PIO來驅動1個LED。

執行下列步驟添加PIO:

(1) 如圖,在IP Catalog中,輸入PIO來進行過濾,在搜索結果中選擇PIO (Parallel I/O)並雙擊彈出PIO配置嚮導對話框,如 圖2. 23所示。

圖片43

(2) 在Width選項區的文本框中輸人1,將 PIO的寬度改成1位;在Direction選項區選擇 Output,即僅輸出模式。Output Port Reset Value處修改值爲1,即設定PIO復位時爲1。這裏設置爲1主要是爲了使系統復位後LED處於熄滅狀態。

圖片44

(3) 單擊圖片45,在激活元件窗口中出現名稱爲 pio_0 的 PIO。

(4) 右擊激活元件窗口中pio_0,選擇Rename將pio_0重命名爲pio_led。給出硬件外設的描述名稱是一種良好的習慣。這樣會方便咱們在分配引腳和編寫軟件程序時對外設的理解。

注意:在Nios II IDE的用戶程序中,將使用PIO_LED(NIOS II IDE中不論組件名的大小寫,統一使用大寫字母,無需用戶強制使用大寫字母命名)這個名稱來訪問外設,因此在這裏推薦將PIO命名爲pio_led固然,用戶也能夠命名爲其餘的名稱,只是要在IDE的用戶程序中,使用相應的名稱來訪問PIO便可,因爲考慮到是第一個實例,爲了儘可能減小學習者的出錯概率,這裏仍是強烈建議你們直接使用PIO_LED或者pio_led來命名。

關於PIO的更多細節,請參見4. 1節。

2.5.7添加系統ID外設

若是系統包括系統ID外設,則當Qsys生成Nios II系統時,將爲該Nios II系統生成一個標識符(ID號)。該標識符會被寫入SYSTEM ID寄存器中,供IDE編譯器和用戶辨別所運行的程序是否與目標系統匹配。在IDE中,若是用戶程序不是基於對應的Nios II系統的,那麼調試時,Nios II IDE將阻止用戶下載程序到Nios II系統,固然,咱們也能夠在調試時選擇忽略系統ID的核對來跳過這個校驗。具體操做見後續軟件開發部分

在IP Catalog中,輸入」 system id」來進行過濾,在搜索結果中選擇System ID Peripheral並雙擊彈出System ID配置嚮導對話框,在這裏,咱們能夠在「32 bit System ID」處手動的輸入一個ID做爲系統標識符,本實例咱們設置0x00000008。

圖片46

圖片47

單擊圖片48,在激活元件窗口中出現名稱爲sysid_qsys_0的System ID Peripheral。

右擊激活元件窗口中sysid_qsys_0,選擇Rename將sysid_qsys_0重命名爲sysid。

關於系統ID外設的更多細節,請見4. 12節。

2.5.8鏈接各外設到Avalon MM總線上

經過以上步驟,咱們完成了添加實現點亮LED燈所需的全部外設組件,然而,這些組件當前都仍是各自獨立的,與系統核心NIOS II CPU並無關聯起來。所以咱們須要使用Avalon MM總線或Avalon ST總線來將這些組件鏈接起來,由於本實例中不存在數據流組件,所以不涉及到Avalon ST總線的鏈接。

本系統中,總共涉及到Avalon MM總線的指令總線、數據總線、時鐘網絡、復位網絡和中斷網絡。一個完整的系統由至少一個主設備和至少一個從設備構成,本實例中NIOS II CPU爲主設備,sysid和PIO_LED爲從設備。onchip_ROM和onchip_RAM爲存儲器設備。咱們鏈接時,首先將存儲器設備的slave(s1)同時和NIOS II CPU的數據總線(data master)和指令(instruction master)總線鏈接,而後將pio_led和sysid的slave(s1)與NIOS II CPU的數據總線(data master)相連,不要將s1與指令總線相鏈接。鏈接總線的方法很簡單,將兩個須要鏈接到一塊兒的總線交叉處的空心圓圈點擊一下,便可實現兩個網絡的鏈接。

關於何時須要鏈接指令總線,何時不須要,這裏給出一個鏈接技巧:凡是不涉及到存儲CPU 指令的外設,如串口,定時器,SPI等非存儲器外設,只須要將s1鏈接到CPU的data master便可。而對於須要存儲CPU程序指令的存儲器,如EPCS、onchip_ROM、SDRAM等,須要將s1和CPU的data master 和instruction master同時鏈接。固然,一些明確不會存儲指令的存儲器,也不須要鏈接instruction master。鏈接完成的網絡以下圖所示:

 

圖片49

以上完成了全部組件的數據總線和指令總線的鏈接,接下來還須要完成時鐘網絡和復位網絡的鏈接。本實例中只有一個時鐘網絡,所以將全部組件的時鐘網絡鏈接到一塊兒便可,鏈接時鐘網絡的系統以下圖所示:

圖片50

接下來咱們須要鏈接全局復位網絡,鏈接復位網絡有兩種方式,第一種方式和鏈接時鐘網絡同樣,手動一個一個的去點擊交叉點鏈接。第二種方式就是直接點擊菜單欄【System】 【Create Global Reset Network】來鏈接復位網絡,這裏推薦初次接觸Qsys的用戶使用第二種方式,以減小出錯的機率。

因爲本系統中沒有添加可以產生中斷請求的組件,所以沒有中斷網絡須要鏈接。關於中斷網絡的鏈接和中斷號的分配,咱們將在後續章節講解中斷的使用的時候進行講解。

全部總線鏈接完成後的系統以下圖所示。

圖片51

2.5.9指定基地址和中斷請求優先級

在添加和完成組件間的總線網絡鏈接後,咱們就須要爲每一個外設分配基地址和中斷請求優先級,因爲本實例中全部外設都不含有中斷,因此無需進行中斷優先級分配。

Qsys提供Assign Base Addresses和Assign Interrupt Numbers命令,以下圖所示,這兩個命令能夠分別簡單的實現分配外設基地址和中斷優先級。

圖片52

對於許多系統,包括本實例設計,Assign Base Addresses能知足要求。固然,用戶能夠本身調整基地址和中斷優先級來知足系統的需求。NIOS II處理器的內核可尋址31位地址範圍(2G),用戶必須分配0x00000000~0x7fffffff之間的基地址。NIOS II程序使用宏定義的符號常量來訪問外設,基地址的改變不會形成程序的修改。

因爲Qsys只是搭建系統,並不處理軟件操做,所以它不能作出關於最好的IRQ分配的有根據猜想,所以建議用戶不採用自動分配的方式,而是本身根據系統結構手動分配中斷優先級。

這裏,咱們要分配系統基地址,可使用自動分配的方式,直接點擊【System】【Assign Base Addresses】便可。

2.5.10設置NIOS II復位和異常地址

雙擊nios2_gen2_0組件,在打開的選項卡中,點擊Vectors切換到向量設置選項卡。本實例,系統上電後,從內部ROM開始運行,因此Reset Vector的Reset Vector memory選擇onchip_ROM.s1,offset爲0x00000000。異常向量表放在內部RAM裏面,因此,Exception Address選擇onchip_RAM.s1,Offset地址爲0x00000020。

注意:Reset Address和Exception Address的Offset只有在多處理器的系統中才進行設置,且其值必須爲0x20的倍數,若是地址設置違反規則,信息窗口會給出錯誤提示。

2.5.11設置須要引出到Qsys系統頂層的信號

在最終造成的FPGA系統中,Qsys所建立的組件是以一個子模塊的形式添加到Quartus II工程中的,而做爲子模塊,就存在相應的輸入輸出,在Qsys系統中,當系統組件添加完成後,還須要手動的將系統中各個組件對應的信號導出到頂層,這樣才能正常的加入到Quartus II工程中。

那麼具體有哪些信號是須要導出到模塊頂層的呢?在本例中clk_0模塊的clk_in和clk_in_reset信號是須要導出到頂層的,可是這兩個信號在系統建立之時就自動存在並導出到頂層了,所以不須要咱們手動再去操做。

圖片53

而onchip_ROM、onchip_RAM、systemID等外設僅與CPU進行交互,沒有須要導出到系統頂層與其餘模塊或引腳鏈接的信號,所以不用鏈接。pio_led做爲一個輸出引腳,最終是經過引腳鏈接到開發板上的LED燈的控制角,所以須要導出到頂層。每個模塊,若是有須要導出到系統頂層的信號,則有一個名爲external_connection的總線名,其屬性爲Conduit。所以,對於剛接觸Qsys系統的用戶,只須要認準這種屬性的信號,即爲須要導出到頂層的信號。

圖片54

導出這個信號,只須要在該信號的export一欄雙擊,並輸入你但願命名的信號名稱便可。例如,本實例中,咱們雙擊Double-click to便可輸入信號名,這裏咱們雙擊並經信號名修改成pio_led便可。以下圖所示:

圖片55

至此,咱們整個系統就搭建完成了,接下來點擊【File】->【Save】保存當前系統,而後便可開始生產該系統對應的HDL文件了。

2.5.12 生成NIOS II系統

使用Qsys生成NIOS II系統,執行如下步驟:

一、 點擊【Generate】->【Generate HDL】打開Generation對話框。

二、 默認輸出路徑不變

三、 點擊Generate按鈕,系統生成開始。

在系統生成過程當中,Qsys會執行一系列操做,Qsys會爲添加的全部部件生成Verilog HDL源文件,並生成每一個硬件部件以及鏈接部件的片內總線結構、仲裁和中斷邏輯。Qsys會爲系統生成NIOS II IDE軟件開發所需的硬件抽象層(HAL)、C以及彙編頭文件。這些頭文件定義了存儲器映射、中斷優先級和每一個外設寄存器空間的數據結構。這樣的自動生成過程有助於軟件設計者處理硬件潛在的變化性。若是硬件改變了,Qsys會自動更新這些頭文件。Qsys也會爲系統中現有的誒個外設生成定製的C和彙編函數庫。若是添加了片內存儲器,Qsys還將爲片內ROM、RAM生成其初始化所使用的HEX文件(空白文件)。在生成階段的最後一步,Qsys建立適合於系統部件的總線結構,並把全部部件鏈接在一塊兒。

生成過程時間隨計算機的性能而不一樣,通常須要幾分鐘。生成結束後,顯示Finished: Create HDL design files for synthesis,點擊Close便可。而後關閉Qsys工具。

圖片56

這時,在Quartus II工程中會彈出如下窗口提示,點擊OK便可。此時,咱們一個基於NIOS II處理器的系統就搭建完成了。

NIOS II系統生成後將產生下列文件:

Qsys系統文件:mysystem.sopcinfo,它定義了Qsys生成完整系統必須的詳細信息,該文件存儲NIOS II系統的硬件內容,NIOS II IDE須要使用該文件信息來爲目標硬件編譯軟件程序。詳細內容見2.9.1小節。

硬件描述語言(HDL)文件——mysystem.v以及各外設的HDL文件,這些文件是描述NIOS II系統硬件設計文件。Quartus II軟件將使用這些HDL文件來編譯整個FPGA設計。這些文件位於E:\easysopc_class\01_CoreCourse_GHRD\mysystem\synthesis路徑下。

至此,已經完成NIOS II處理器系統的建立。生成系統結束後,要將系統集成到Quartus II硬件工程並使用NIOS II IDE來開發軟件,能夠先使用NIOS II IDE進行軟件開發,也能夠先將系統集成到Quartus II。固然,若是是多人合做開發,二者可同時進行。

2.6集成NIOS II系統到Quartus II工程

在2.4.2小節中已經創建好了Quartus II頂層模塊,本節的內容是將剛生產的NIOS 系統添加到頂層模塊中。

2.6.1添加NIOS II系統模塊到Quartus II頂層模塊

添加NIOS II系統模塊到Quartus II頂層模塊,須要先將生成的.qsys文件添加到工程中。

點擊【Project】->【Add/Remove Files in Project】

圖片57

在打開的窗口中點擊瀏覽文件按鈕圖片58,選擇mysystem.qsys文件,而後點擊Add添加。最後點擊【Apply】【OK】便可。

圖片59

接着將NIOS II系統例化到工程頂層文件中,這裏能夠直接打開E:\easysopc_class\01_CoreCourse_GHRD\mysystem目錄下的mysystem_inst.v文件,而後複製其中的內容,粘貼到頂層文件CoreCourse_GHRD.v中。

圖片60

最後咱們完成完整頂層文件的其餘部分設計。首先編寫端口列表,本實例系統比較簡單,僅有時鐘(clk)、復位(reset_n)兩個輸入以及一組LED輸出。所以編寫端口列表以下:

61

接着咱們將NIOS II系統的各個信號鏈接到整個系統的輸入輸出管腳上。clk_clk鏈接clk50M,reset_reset_n鏈接reset_n,pio_led_export鏈接到鏈接以下所示:

 

圖片61

最終,整個頂層文件的代碼以下所示:

圖片62

2.6.2選擇器件型號

每種型號的FPGA芯片的引腳可能都不相同,所以在進行引腳分配以前,都應該選擇相應目標FPGA芯片新號。這一步其實在2.4.1小節中已經完成,這裏只是讓讀者瞭解,在Quartus II工程建立好後仍然能夠選擇並修改器件型號。

在Quartus II菜單欄中依次點擊【Assignments】->【Device】打開器件選擇對話框,以下圖所示。在該對話框中,指定所需的目標器件型號,本實例爲芯航線FPGA學習套件主板上使用的FPGA芯片EP4CE10F17C8。

圖片63

2.6.3分配FPGA引腳

本實例中各引腳的命名以及與目標FPGA板卡上對應功能引腳標號以下表所示,注意,此處要根據不一樣的目標板進行調整。通常板卡商都會提供相應的引腳分配說明表。

分配FPGA引腳的位置,執行下面步驟:

要進行引腳分配,須要先對工程進行分析和綜合,當分析和綜合完成後,將會自動的分析獲得工程中的各個端口信號。點擊鍵盤組合鍵Ctrl + K,對工程啓動分析和綜合。

分析和綜合完成後,在Quartus II菜單欄中依次點擊【Assignments】->【Pin Planner】打開引腳分配對話框,以下圖所示。

圖片64

能夠看到,引腳分配窗口中已經自動從咱們的工程中提取出了須要分配引腳的信號。

按照下表,在Location欄中輸入對應的引腳名稱便可。

圖片65

最終引腳分配結果以下圖所示:

圖片66

其中前四個信號爲Jtag接口相關信號,僅在針對JTAG接口有特殊應用時才須要進行引腳分配,通常狀況無需分配。

分配完成後,直接關閉引腳分配對話框便可(關閉即自動保存)。

2.7編譯系統

經過Quartus II編譯器,能夠檢查設計錯誤,綜合邏輯,而且爲模擬、時序分析及器件配置生成輸出文件。

2.7.1設置編譯選項

在下圖中,能夠經過選擇相應的設置選項進行設置。來決定對當前工程的各類編譯選項。本實例採用默認的編譯設置,不進行任何修改。若要進行編譯選項設置,請參考Altera的Quartus II Handbook。

圖片67

2.7.2編譯硬件系統

在編譯過程當中,編譯器定位並處理全部工程文件,生成與編譯相關的消息與報告,建立SOF文件及任何可選配置文件。

選擇Processing—>Start Compilation進行全編譯,也能夠直接點擊圖片67-1按鈕或者直接按鍵盤組合鍵Crtl + L來啓動全編譯。在編譯系統是,狀態窗口顯示整個編譯進程及每一個編譯階段所用的時間。編譯結果顯示在Compilation Report窗口中,整個編譯時間爲幾分鐘到幾十分鐘,具體耗時取決於計算機性能以及編譯選項設置。

在編譯過程當中,若是添加了內部存儲器,會使用onchip_ROM.hex文件對onchip_ROM進行初始化。

在編譯過程當中,可能產生不少警告信息,但這些不會影響設計結果。

2.7.3查看編譯報告

編譯結束後,在Compilation Report窗口顯示編譯結果,包括編譯報告,綜合報告,適配報告,時序分析報告等。因爲本設計比較簡單,器件適配,靜態時序等狀況很容易知足要求,因此在此不詳細分析這些報告。

2.8下載硬件設計到目標FPGA

成功編譯硬件系統後,將產生CoreCourse_GHRD.sof的FPGA配置文件輸出。本節簡單介紹將 SOF文件下載到目標FPGA器件的步驟9

(1)經過USB Blaster下載電纜鏈接目標板和主計算機,接通目標板電源。

(2)在Quartus II軟件中選擇【Tools】->【Programmer】,打開編程器窗口並自動打開配置文件(CoreCourse_GHRD.sof),以下圖所示。若是沒有自動打開配置文件,則須添加須要編程的配置文件,點擊Add File,而後選擇output files文件夾下的CoreCourse_GHRD.sof文件,選擇open便可。

(3)確保編程器窗口的Hardware Setup欄中硬件已經安裝。

(4)確保Program/Configure下的方框選中。

(5)單擊Start 按鈕,開始使用配置文件對FPGA進行配置,Progress欄顯示配置進度

圖片68

本節只講述了將配置文件下載到FPGA中,掉電後FPGA中的配置數據將丟失,能夠將配置文件寫人掉電保持的EPCS器件。在上電時使用EPCS對FPGA進行配置,詳細內容見《芯航線FPGA數字系統設計教程+實例解析》中第一部分「11、芯航線FPGA學習套件配置文件固化教程」內容。

2.9 使用NIOS II IDE創建用戶程序

本節中,將啓動Nios II集成開發環境來創建和編譯一個簡單的LED燈閃爍的C語言程序。

針對NIOS II軟核,要開發一個可以正常運行在目標板上的程序,須要同時具有用戶應用工程(Application Project)和板級支持包工程(BSP Project)。

其中板級支持包工程(BSP Project)是一個與硬件系統緊密聯繫的工程,其使用咱們建立Qsys系統時生成的.sopcinfo文件。BSP工程建立時會根據.sopcinfo文件中定義的NIOS II系統的硬件信息,生成對應的設備驅動(drivers)、HAL庫(HAL)以及硬件信息頭文件(System.h)。

2.9.1建立一個新的C/C+ +應用工程

啓動一個新的C/C++應用工程時,Nios II IDE須要使用Qsys系統文件 (.sopcinfo)。在目標硬件上運行和調試應用工程以前,軟件設計者須要先使用FPGA配置文件(.sof)配置FPGA。

IDE可產生下面列出的幾個輸出,但不是全部的工程都要求這些輸出。

> System.h文件——爲系統中的硬件信息進行宏定義,幫助軟件設計者處理硬件潛在的變化性,軟件設計者可使用這些宏定義而不是具體的硬件信息(如地址值、中斷號等)。該文件也可用於査閱系統中的硬件。建立一個新板級支持包(BSP)工程時,1DE自動生成該文件。

>可執行的鏈接文件(.elf)—是編譯C/C+ +應用工程的結果,可直接將它下載到 Nios II處理器。

>存儲器初始化文件(.hex)——若是添加的片內存儲器,片內存儲器可在上電時預約義存儲器的內容。IDE可生成片內存儲器的初始化文件,該存儲器支持初始化的內容。

> Flash編程數據——IDE包括Flash編程器,利用IDE的Flash編程器能夠寫程序到 Flash存儲器。用戶也可使用Flash編程器來寫任意二進制數據到Flash存儲器。

本章僅討論直接下載.elf文件到Nios II系統。關於使用IDE中Flash編程器進行編 程的詳細內容請參考本書相關章節(待定)。

執行下面的步驟來建立一個新的C/C+ +應用工程:

(1) 在Quartus II軟件菜單欄中,依次點擊【Tools】->【Nios II Software Build Tools for Eclipse】啓動Nios II IDE。

 

圖片69

(2)在彈出的Workspace Launcher對話框中,單擊圖片70按鈕,設置工做空間爲Quartus II工程的文件夾(E:\easysopc_class\01_CoreCourse_GHRD),如圖2.41所示,這樣便於管理。而後點擊OK進入Nios II IDE編輯界面。

圖片71

(3)在該界面中選擇 File—New—Nios II Application and BSP from Template(圖 2. 42),打開新建工程嚮導,如圖2.43所示。

圖片72

圖2. 42打開新建C/C+ +工程嚮導

(4)單擊SOPC Information File name選項區中的圖片73.按鈕,打開選擇文件對話框,選擇當前工程目錄下的mysystem.sopcinfow文件,(注意,必定要覈對當前sopcinfo文件的路徑是否正確,軟件會默認記錄上次打開的sopcinfo文件路徑,若是不注意這一點,會常常容易出錯)。選擇完成後,軟件會自動識別當前硬件系統中的CPU名稱,以下圖所示:

 

圖片74

圖2.44選擇硬件目標文件

(5)選擇Project Template 列表框中的 Hello World。並在Project Name 欄中輸入hello_led_0,選中Use Dafault Location複選框,單擊圖片76按鈕,完成工程建立。

嚮導中的Select Project Templates—欄中是已經設計好的軟件工程,用戶能夠選擇其中的一個,把它看成模板來建立本身的工程。固然也能夠選擇Blank Project(空白工程),徹底由 用戶寫全部的代碼。本例中選取了 Hello World工程,而後在此基礎上進行適當的修改,通常狀況下這比空白工程更加容易,也更方便。

 

圖片77

圖2.45完成設置後的工程嚮導

建立工程後,在Nios II IDE主界面左側的C/C++ Projects選項卡中顯示兩個新的工程:hello_led_0 和 hello_led_0_BSP。hello_led_0 是 C/C+ +應用工程,而 hello_led_0_BSP是描述CoreCourse_GHRD系統硬件細節的系統庫。

Nios II IDE中每一個工做界面都包括一個或多個窗口,每一個窗口都有其特定的功能。在工做界面中包括的主要窗口有編輯器窗口和一個或多個瀏覽器。編輯器可用於打開並編輯一個工程。瀏覽器用於對編輯器提供各類支持,可由用戶根據須要進行選擇。

用戶能夠同時打開多個編輯器,但在同一時刻只能有一個編輯器處於激活狀態。在工做界面上的主菜單和工具條的各類操做只對處於激活狀態的編輯器起做用。在編輯區中的各個

標籤上是當前被打開的文件名,帶有「*」號的標籤表示這個編輯器中的內容尚未被保存。

在編譯工程前,要養成先對各文件進行保存的好習慣。

未完待續…………………………

相關文章
相關標籤/搜索