《FPGA與SOPC設計教程》課件第3章_第1頁
《FPGA與SOPC設計教程》課件第3章_第2頁
《FPGA與SOPC設計教程》課件第3章_第3頁
《FPGA與SOPC設計教程》課件第3章_第4頁
《FPGA與SOPC設計教程》課件第3章_第5頁
已閱讀5頁,還剩194頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第3章SOPC技術3.1SOPCBuilder

3.2Avalon交換架構3.3NiosⅡ軟核處理器3.4NiosⅡ軟核處理器軟件開發(fā)3.5SOPC系統(tǒng)設計實例3.6DE2開發(fā)板描述及組件庫3.1SOPCBuilder3.1.1Altera的SOPC技術

SOPC是可編程芯片系統(tǒng)的縮寫,就是在一個可編程芯片上實現(xiàn)一個電子系統(tǒng)的技術。SOC技術已經(jīng)成為半導體行業(yè)的技術主流,在SOPC出現(xiàn)之前,業(yè)界廣泛使用ASIC技術實現(xiàn)SOC。ASIC和FPGA不同的技術特征造就了它們應用于不同的市場:ASIC被用于大批量的專用產(chǎn)品,以盡可能攤薄高額的設計與制造成本,實現(xiàn)良好的性價比;FPGA雖單價昂貴,但由于其可編程的靈活性而廣受小批量應用的青睞。但近年來半導體市場發(fā)生了顯著的變化,打破了二者之間的平衡,產(chǎn)品面市時間的壓力以及市場對產(chǎn)品設計的快捷性和靈活性要求的提升,使得FPGA的發(fā)展勢頭強勁。Altera公司于2000年提出了SOPC概念,在可編程器件上實現(xiàn)SOC技術,并同時推出了相應的開發(fā)軟件QuartusⅡ。目前Xilinx也利用自己在FPGA方面的優(yōu)勢,積極發(fā)展可編程芯片系統(tǒng)產(chǎn)品。SOPC是可編程邏輯器件和基于ASIC的SOC技術融合的結果,目前0.13?mm的ASIC產(chǎn)品制造價格仍然相當昂貴,而集成了硬核或軟核CPU、DSP、存儲器、外圍I/O及可編程邏輯器件的SOPC芯片在應用的靈活性和價格上有極大的優(yōu)勢。

SOPC結合了SOC和可編程邏輯器件各自的優(yōu)點,一般具備以下基本特征:

(1)至少包含一個嵌入式處理器內(nèi)核。

(2)具有小容量片內(nèi)高速RAM資源。

(3)豐富的IPCore資源可供選擇。

(4)足夠的片上可編程邏輯資源。

(5)處理器調(diào)試接口和FPGA編程接口。

(6)包含部分可編程模擬電路。

(7)單芯片、低功耗、小封裝。

Altera公司于2000年發(fā)布了Nios軟核處理器,Nios軟核處理器是一款RISC處理器,是業(yè)界第一款專為可編程邏輯優(yōu)化的可配置處理器。NiosⅡ軟核處理器兼容Nios軟核處理器的指令集,是Altera公司最新的軟核處理器。Altera把可編程邏輯器件固有的優(yōu)勢集成到嵌入式處理器的開發(fā)流程中,定義了處理器之后,可以在Nios處理器的體系結構之上開始設計軟件原型。硬件工程師將CPU周邊的專用硬件邏輯逐漸集成到系統(tǒng)中去,在每個階段軟件都能夠進行測試并解決遇到的問題,因而軟件工程師能對系統(tǒng)的結構提出更合理的建議,以改善代碼效率和處理器性能。

Altera公司的SOPCBuilder為建立SOPC設計提供了標準化的圖形環(huán)境,SOPCBuilder包含在QuartusⅡ軟件中。SOPCBuilder可以幫助設計者以與傳統(tǒng)SOC設計方法相比非常短的時間來完成由處理器、存儲器和外設等組件組成的SOPC系統(tǒng)。傳統(tǒng)的SOC設計方法中,設計者需要手工編寫將系統(tǒng)中各個組件連接起來的頂層HDL設計文件。而SOPCBuilder則幫助設計者自動完成系統(tǒng)集成的工作,SOPC提供了直觀的圖形用戶界面(GUI),幫助設計者添加和配置系統(tǒng)所需的外設(包括存儲器、定制外設和IP模塊),根據(jù)設計者的要求將這些外設與處理器連接在一起,并自動完成外設和存儲器的地址映射、中斷控制和總線控制等工作。

完成系統(tǒng)配置之后,SOPCBuilder根據(jù)要求生成VHDL或VerilogHDL的系統(tǒng)級設計代碼,并自動生成部分外設的硬件抽象層(HAL)代碼和底層硬件驅(qū)動代碼,為軟件開發(fā)做好準備。圖3.1所示為一個由SOPCBuilder生成的系統(tǒng)的例子。這個系統(tǒng)中有3個主組件和5個從組件,各自完成不同的功能,組件之間的通信通過Avalon交換架構來實現(xiàn)。圖3.1由SOPCBuilder生成的系統(tǒng)示例

SOPCBuilder中提供了一系列的組件庫,可供用戶直接使用,這些組件包括:

(1)?NiosⅡ等處理器。

(2)微控制器外設。

(3)定時器。

(4)UART、SPI等串行通信接口。

(5)通用輸入輸出口(GPIO)。

(6)存儲器接口。

(7)總線和總線橋。

(8)數(shù)字信號處理(DSP)內(nèi)核。在SOPCBuilder中構建系統(tǒng)時,可以選擇用戶自定義組件或組件庫中提供的組件。SOPCBuilder可以導入或提供用戶定義邏輯塊的接口。SOPCBuilder系統(tǒng)與用戶定義邏輯配合使用時具有以下四種機制:簡單PIO連接、系統(tǒng)模塊內(nèi)例化、外部邏輯總線接口以及發(fā)布本地SOPCBuilder組件。

SOPCBuilder提供的可用于下載的組件庫,包括NiosⅡ處理器、UART、定時器、PIO、Avalon三態(tài)橋、多個簡單存儲器接口和OS/RTOS內(nèi)核。此外,還可以從MegaCore功能列表中選擇包括支持OpenCorePlus硬件評估的功能等。可以使用SOPCBuilder的SystemContents頁面來定義系統(tǒng)。在組件庫中選擇組件,將組件添加到系統(tǒng)中成為系統(tǒng)的組件,所添加的組件在組件列表中列出??梢允褂肧ystemContents頁面提供的工具來定義以下組件選項:

(1)系統(tǒng)組件和接口。

(2)主端口與從端口連接。

(3)系統(tǒng)地址映射。

(4)系統(tǒng)IRQ分配。

(5)共享從端口的仲裁優(yōu)先級。

(6)多時鐘域工作。

SOPCBuilder生成的系統(tǒng)包含一個系統(tǒng)說明文件(.ptf文件),該文件中保存了所有在SOPCBuilder中輸入的設置、選項和參數(shù)。此外,每個組件具有相應的.ptf文件,在系統(tǒng)生成期間,SOPCBuilder使用這些文件為系統(tǒng)生成源代碼、軟件組件和仿真文件。完成系統(tǒng)定義之后,可以使用SOPCBuilder的SystemGeneration頁面生成系統(tǒng)。SOPCBuilder軟件自動生成所有必要的總線邏輯,用以將處理器、外設、存儲器、仲裁器、IP功能以及系統(tǒng)外邏輯和存儲器接口用Avalon交換架構連接在一起,并建立將組件捆綁在一起的HDL源代碼。

SOPCBuilder還可以建立軟件開發(fā)工具包(SDK)所需的軟件模塊,例如頭文件、通用外圍設備驅(qū)動程序、定制軟件庫和OS/real-time操作系統(tǒng)(RTOS內(nèi)核)等。

SOPCBuilder建立用于仿真的MentorGraphicsModelSim仿真目錄,包括ModelSim工程文件、所有存儲器模塊的仿真數(shù)據(jù)文件、提供設置信息的宏文件、別名和總線接口波形初始設置。SOPCBuilder還建立仿真測試激勵,用于例化系統(tǒng)模塊、驅(qū)動時鐘和復位輸入,并可以例化和連接仿真模型,還可以生成Tcl腳本,用于在QuartusⅡ軟件中設置系統(tǒng)編譯所需的所有文件。3.1.2SOPC系統(tǒng)設計流程

SOPCBuilder系統(tǒng)的設計流程如圖3.2所示,主要分為三個步驟:①從組件庫中選擇組件;②定制組件并集成系統(tǒng);③驗證并構建系統(tǒng)。圖3.2SOPCBuilder設計流程在QuartusⅡ中,每一個SOPCBuilder的系統(tǒng)對應一個QuartusⅡ的工程,可以用Tools>SOPCBuilder菜單啟動SOPCBuilder,也可以用工具按鈕啟動SOPCBuilder。如果工程中沒有SOPCBuilder系統(tǒng),QuartusⅡ會提示使用者輸入SOPCBuilder系統(tǒng)的名稱,并選擇生成VHDL代碼還是Verilog代碼。SOPCBuilder同時只能對一個系統(tǒng)進行操作,但一個QuartusⅡ工程可以包含多個系統(tǒng)。在SOPCBuilder中可以打開一個已有的系統(tǒng),也可以新建系統(tǒng),系統(tǒng)的文件與相關的QuatursⅡ工程存儲在同一個目錄中,每個系統(tǒng)的信息都保存在一個名稱為<系統(tǒng)模塊名稱>.ptf的文件中。

SOPCBuilder的用戶界面按功能分為不同的標簽頁,SOPCBuilder啟動后默認的標簽頁為SystemContents標簽頁。SystemContents標簽頁的主要作用為:①將組件庫中的組件添加為系統(tǒng)組件;②配置組件;③指定組件之間的連接。SOPCBuilder的圖形界面如圖3.3所示。圖3.3SOPCBuilder的圖形界面在SOPCBuilder中,一個系統(tǒng)是由多個組件(Component)組成的,這些組件按照一定的規(guī)則設計,能夠被SOPCBuilder識別并可以自動連接到系統(tǒng)中去。SOPCBuilder將多個組件連接在一起生成一個頂層設計模塊,稱做“系統(tǒng)模塊”(SystemModule)。圖3.3中,系統(tǒng)組件列表區(qū)域中列出了當前系統(tǒng)中例化的組件,在這個區(qū)域中,可以修改組件的名稱,設定從組件的基地址、時鐘源,如果需要,還可以設定每個組件的中斷優(yōu)先級。所有外設在系統(tǒng)中的管理都是按統(tǒng)一分配的地址進行的,系統(tǒng)組件列表中可以設置每一個外設的基地址,根據(jù)基地址和外設的特性,自動生成結束地址。如果設計者不干預,SOPCBuilder則自動分配各個外設的地址。有效組件列表區(qū)域分類列出了當前有效的組件,包括Altera提供的以及自定義的組件庫,用戶可以從這個列表中選擇自己需要的組件添加到右側(cè)的系統(tǒng)組件列表中,建立用戶自己的系統(tǒng),每個添加到系統(tǒng)中的組件都可能會啟動一個配置向?qū)?,指導用戶配置這個組件。連接面板區(qū)域顯示了組件之間的連接,可以在這個區(qū)域中指定主組件與從組件之間的連接關系以及與多個主組件共享的從組件的總線仲裁器。時鐘設置表用以設置系統(tǒng)的時鐘。3.2Avalon交換架構3.2.1Avalon總線基本概念

Avalon交換式總線是由Altera開發(fā)的一種專用的用以連接SOPC系統(tǒng)主組件與從組件的內(nèi)部連線技術。Avalon交換式總線由SOPCBuilder自動生成,是一種理想的用于系統(tǒng)處理器和外設之間的內(nèi)聯(lián)總線。每當一個新的組件被添加到系統(tǒng)中或是某個外設的優(yōu)先級被改變了,SOPCBuilder就會自動生成一個新的、最佳的交換式總線。用戶可以很容易地修改自己設計的系統(tǒng)以提高性能或增加系統(tǒng)功能。Avalon交換式總線的特性包括以下幾點:

(1)基于向?qū)У呐渲梅绞健?/p>

(2)可以并發(fā)操作的多主設備。

(3)內(nèi)建地址譯碼。

(4)原始的或動態(tài)的位寬可變的外設接口。

(5)支持各種模式的Avalon傳輸。

(6)支持等待時間讀/寫傳輸。

(7)跨時鐘域電路。

Avalon交換式總線使用很少的邏輯資源來支持數(shù)據(jù)總線復用、地址譯碼、產(chǎn)生等待周期、對齊外設地址(支持原始的和動態(tài)的總線尺寸對齊)、指定中斷優(yōu)先級以及高級的交換式總線傳輸。如圖3.4所示的例子中,用Avalon交換架構將多個主組件和多個從組件連接到一起。圖3.4Avalon交換式總線的例子圖3.4中的部分組件使用了多個Avalon端口,由于一個組件可以擁有多個Avalon端口,因此用Avalon交換式架構可以構建非常復雜的總線應用。例如每一個從端口只能有一個中斷請求信號,當一個組件需要多個中斷請求時,只需要為該組件配置多個從端口即可。SOPCBuilder的主要任務就是生成Avalon交換式架構的總線,這個過程是自動完成的,設計者一般不需要與生成的HDL代碼打交道,但了解Avalon交換式架構的實現(xiàn)原理,有助于設計者更好地使用它。Avalon總線的一些基本概念如下。

1.總線周期總線周期是總線傳輸中的基本時間單元,定義為從Avalon總線主時鐘的前一個上升沿到下一個上升沿之間的時間。總線信號的時序以總線周期為基準來確定。

2.總線傳輸

Avalon總線傳輸是指對數(shù)據(jù)的一次讀或?qū)懖僮鳎淮蝹鬏斂赡苄枰粋€或多個總線周期來完成。Avalon總線支持的傳輸寬度包括字節(jié)(8位)、半字(16位)和字(32位)。

3.流傳輸模式流傳輸模式是通過流控信號實現(xiàn)的,流傳輸模式在流模式主外設和流模式從外設之間建立一個開放的通道,以提供連續(xù)的數(shù)據(jù)傳輸。只要存在有效數(shù)據(jù),便能通過該通道在主從端口對之間流動,并且主外設不必為了確定從外設是否能夠發(fā)送或接收數(shù)據(jù)而不斷地訪問從外設的狀態(tài)寄存器。流傳輸模式使得主從端口對之間的數(shù)據(jù)吞吐量達到最大,同時避免了從外設的數(shù)據(jù)上溢或下溢,這對于DMA傳輸特別重要。

4.延遲讀傳輸模式有些同步外設在第一次訪問時需要幾個時鐘周期的延遲,此后每個總線周期都能返回數(shù)據(jù)。對于這樣的外設,延遲讀傳輸模式可以提高帶寬利用率。延遲傳輸使得主外設發(fā)起一次讀傳輸后,盡管上一次讀傳輸?shù)臄?shù)據(jù)還沒有返回,主設備可以發(fā)起下一次讀傳輸或轉(zhuǎn)而執(zhí)行一個不相關的任務,也可等外設準備好數(shù)據(jù)后再接收數(shù)據(jù)。在讀取指令操作(需要經(jīng)常訪問連續(xù)地址)和DMA傳輸中,延遲傳輸是非常有用的。在這兩種情況下,CPU或DMA主外設會預先讀取期望的數(shù)據(jù),從而使同步存儲器處于激活狀態(tài),并減少平均訪問時間。

5.Avalon總線模塊

Avalon總線模塊是系統(tǒng)模塊的主干,是SOPC設計中外設之間通信的主要通道。Avalon總線模塊由各類控制、數(shù)據(jù)和地址信號以及仲裁邏輯組成,它將構成系統(tǒng)模塊的外設連接起來。Avalon總線模塊是一種可配置的總線結構,可以隨著用戶的不同互聯(lián)需求而改變。Avalon總線模塊是由SOPCBuilder自動生成的,系統(tǒng)用戶不需要關心總線與外設的具體連接。大多數(shù)應用中,Avalon總線都是在SOPCBuilder中自動將處理器和其他Avalon總線外設集成到系統(tǒng)模塊中的,因此Avalon總線模塊很少作為分離的單元使用。對于用戶來說,Avalon總線模塊通??梢员豢醋鍪沁B接外設的途徑。Avalon交換式架構為連接到總線上的外設提供以下服務:

(1)數(shù)據(jù)通道復用。Avalon總線模塊中的數(shù)據(jù)選擇器將數(shù)據(jù)從選中的從外設傳送到相應的主外設。

(2)地址譯碼。地址譯碼邏輯為每個外設產(chǎn)生片選信號,外設不必各自對地址線進行譯碼來產(chǎn)生片選信號,從而簡化了外設的設計。

(3)生成等待周期。為適應具有特殊同步要求的外設,加入等待周期可以將總線傳輸延長一個或多個總線周期。當目標從外設不能在一個時鐘周期內(nèi)響應時,總線模塊會加入等待周期使主外設暫停;當讀使能和寫使能信號具有建立時間或保持時間要求時也會加入相應的等待周期。

(4)動態(tài)地址對齊。動態(tài)地址對齊隱藏了寬度不同的外設之間連接的細節(jié)。例如,通過32位的主端口讀傳輸來訪問16位存儲器時,動態(tài)地址對齊會自動執(zhí)行兩次從端口讀傳輸,以便從16位存儲器設備中取出32位數(shù)據(jù)。主外設不必考慮從外設的物理特性,因此這一特性簡化了主外設硬件和軟件的設計。

(5)中斷優(yōu)先級分配。當一個或多個從外設產(chǎn)生中斷時,Avalon總線模塊會將中斷傳遞給相應的主外設,同時傳遞優(yōu)先級最高的中斷請求(irq)信號。

(6)延遲傳輸功能。Avalon總線模塊內(nèi)部包含了在主從端口對之間進行延遲傳輸所需要的邏輯。

(7)流傳輸模式。Avalon總線模塊內(nèi)部包含了在主從端口對之間進行流傳輸所需要的邏輯。

6.Avalon總線外設

Avalon總線的外設可以在片內(nèi),也可以在片外。Avalon總線外設完成一定的功能,并通過Avalon總線與其他的系統(tǒng)組件進行通信。外設是模塊化的系統(tǒng)組件,可以根據(jù)系統(tǒng)的要求在設計時增加或刪除。Avalon外設包括存儲器和處理器,還包括傳統(tǒng)的外設模塊,例如UART、PIO、定時器和總線橋等。任何用戶自定義邏輯只要提供了連接Avalon總線的地址、數(shù)據(jù)和控制信號,就能成為Avalon總線外設,并連接到Avalon總線模塊為其分配的特定端口上。除了Avalon總線信號外,外設還可以擁有自定義的端口,用來連接系統(tǒng)模塊外的用戶自定義邏輯。Avalon外設分為主外設和從外設兩類。能夠在Avalon總線上發(fā)起總線傳輸?shù)耐庠O是主外設。一個主外設至少擁有一個連接到Avalon總線模塊上的主端口,主外設也可以擁有從端口,使得該外設可以響應Avalon總線上由其他主外設發(fā)起的總線傳輸。從外設只能響應Avalon總線傳輸,而不能發(fā)起總線傳輸。從外設,例如存儲器設備和UART,通常只有一個連接到Avalon總線模塊上的從端口。在SOPC環(huán)境中,區(qū)分以下兩類外設是十分重要的,它們均可以是主外設或從外設。第一類外設可以在SOPCBuilder的組件庫中找到,或者用戶指定了用戶自定義外設的設計文件的位置,SOPCBuilder自動將該外設連接到Avalon總線模塊上。這樣的外設是系統(tǒng)模塊內(nèi)部的外設,它們是系統(tǒng)模塊的一部分。這些外設與Avalon總線模塊的地址、數(shù)據(jù)和控制端口的細節(jié)對用戶是透明的,這些模塊上的非Avalon總線的端口作為系統(tǒng)模塊的端口引出到外部,這些端口可以直接連接到物理器件的引腳,也可以連接到其他片上模塊的端口。另一類Avalon總線外設位于系統(tǒng)模塊的外部,在以下幾種情況下,一般將Avalon總線模塊置于系統(tǒng)模塊外部:①外設實際存在于可編程邏輯器件的外部;②需要通過一些時序轉(zhuǎn)換邏輯才能將外設連接到Avalon總線上;③在生成系統(tǒng)模塊時外設的設計尚未完成。在這些情況下,可以把Avalon總線模塊信號作為系統(tǒng)模塊的端口引出,連接在外部外設上。

7.主端口主端口是主外設在Avalon總線上發(fā)起傳輸?shù)囊唤M信號。主端口直接連接到Avalon總線模塊上。一個主外設可以擁有一個或多個主端口,也可以擁有從端口。這些主端口和從端口之間的相互關系取決于外設的設計,而在這些端口上的單個總線傳輸必須符合Avalon總線規(guī)范。主傳輸是指從主端口的角度描述的Avalon總線傳輸。

8.從端口與從傳輸從端口是外設接收來自另一個Avalon外設主端口的總線傳輸?shù)囊唤M信號。從端口直接連接到Avalon總線模塊上。主外設也可以擁有從端口,使得它能夠響應來自Avalon總線上其他主外設的總線傳輸。從傳輸是指從從端口的角度描述的Avalon總線傳輸。

9.主從端口對主從端口對是指通過Avalon總線模塊連接到一起的一個主端口和一個從端口的組合。在結構上,這些主端口和從端口連接到Avalon總線模塊的相應端口上。主端口的控制和數(shù)據(jù)信號穿過Avalon總線模塊,與從端口進行交互。在SOPCBuilder中指定主端口和從端口之間的連接,即建立主從端口對。

10.PTF文件與SOPCBuilder參數(shù)和選項

Avalon總線和外設的配置是在SOPCBuilder的圖形用戶界面中指定的。用戶在圖形用戶界面中指定各種參數(shù)及選項,SOPCBuilder將這些參數(shù)和選項存入一個系統(tǒng)PTF文件。PTF文件是一個文本文件,其中包括以下內(nèi)容:

(1)?Avalon總線模塊結構與功能的參數(shù)。

(2)每個外設結構與功能的參數(shù)。

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

(4)每個外設提供的端口信號,例如讀使能、讀數(shù)據(jù)、寫使能、寫數(shù)據(jù)。

(5)每個可被多個主端口訪問的從端口的仲裁機制。SOPCBuilder將PTF文件傳遞給HDL生成器,來創(chuàng)建系統(tǒng)模塊實際的寄存器傳輸級(RTL)描述。3.2.2Avalon總線信號

Avalon總線是一種同步總線接口,由主設備提供總線時鐘。在總線時鐘的上升沿發(fā)起一次總線傳輸,而在下一個時鐘的上升沿或上升沿之前完成傳輸。Avalon總線上的數(shù)據(jù)必須保證在總線時鐘的上升沿是穩(wěn)定的,如果有片外異步外設連接到Avalon總線上,則該外設必須保證在總線時鐘上升沿到來之前輸出達到穩(wěn)定。

Avalon總線規(guī)范定義了主端口和從端口之間通過Avalon總線模塊傳輸數(shù)據(jù)所需的信號和時序。構成Avalon總線模塊和外設之間接口的信號隨著傳輸模式的不同而不同。首先,主傳輸與從傳輸?shù)慕涌诓煌?,使得主端口與從端口的信號定義也不同。此外,通過系統(tǒng)PTF文件的設置,所需信號的確切類型與數(shù)量也是可變的。當討論Avalon總線傳輸時,必須要注意討論的是總線的哪一側(cè),是主端口接口還是從端口接口。由主端口輸出的信號與輸入到目標外設的從端口的對應信號可能會有較大的差別。從端口的信號活動總是主外設發(fā)起總線傳輸?shù)慕Y果。但是,實際的從端口輸入信號并非直接來自主端口。Avalon總線模塊傳遞來自主端口的信號,并對信號進行裁剪(例如插入等待周期,在主端口間進行仲裁等),以滿足從外設的需要。由于以上原因,對Avalon總線傳輸?shù)慕榻B將分為主傳輸類型和從傳輸類型兩個部分。大多數(shù)用戶只關心從傳輸,因為他們設計的用戶自定義外設一般都是從外設,這種情況下用戶只需考慮Avalon總線模塊和用戶自定義外設之間的信號,只有當用戶創(chuàng)建主外設時才涉及到主傳輸。因為Avalon總線由HDL文件綜合而來,所以在連接Avalon總線模塊和Avalon外設時需要一些特別的考慮。對于傳統(tǒng)的片外總線結構,所有外設都共享一組固定的、預先設計的線路。而Avalon總線與此不同:SOPCBuilder必須準確地了解每個外設提供了哪些Avalon端口,以便連接外設與Avalon總線模塊;它還需要了解每個端口的名稱和類型,這些信息保存在系統(tǒng)PTF文件中。

Avalon總線規(guī)范不要求Avalon外設必須包含哪些信號。它只定義了外設可以包含的各種信號類型(例如地址、數(shù)據(jù)、時鐘等)。外設的每一個信號都要指定一個有效的Avalon信號類型,以確定該信號的作用。信號也可以是用戶自定義的,在這種情況下,SOPCBuilder不會將該端口與Avalon總線模塊連接。Avalon信號分為主端口信號和從端口信號兩類,外設使用的信號類型由端口的主/從角色來決定,每個單獨的主端口或從端口使用的信號類型由外設的設計決定。例如,設計一個只有輸出的PIO從外設,只需定義用于寫傳輸(從外設向Avalon總線模塊方向)的信號,而不需定義用于讀傳輸?shù)男盘?。盡管從端口允許使用中斷請求(irq)信號,但也不是必須使用的。

Avalon總線規(guī)范未規(guī)定Avalon外設信號的命名規(guī)則,不同類型信號的作用是預先定義的,而信號的名稱則是由外設決定的,信號可以按照它的信號類型來命名,也可以遵照系統(tǒng)級的命名規(guī)范采用不同的名稱。在下面的章節(jié)中討論Avalon總線傳輸時會涉及到一些Avalon信號,例如readdata信號和irq信號,在這里將信號類型的名稱作為信號名稱,但外設信號的實際名稱可以與此不同。表3.1列舉了部分Avalon從端口可用的信號類型,信號的方向是從外設的角度來定義的。例如時鐘信號clk(方向為in)對于從外設來說是輸入信號,而對于Avalon總線模塊來說是輸出信號。表3.1中列舉的信號類型都是高電平有效。Avalon總線還提供了各信號類型的反向形式,在PTF聲明中,在信號類型名稱后面添加“_n”,便可將對應的端口聲明為低電平有效,這對許多使用低電平有效邏輯的片外外設非常有用。不論外設是在系統(tǒng)模塊的內(nèi)部還是外部實現(xiàn),Avalon總線信號及其操作都是相同的。在內(nèi)部實現(xiàn)的情況下,SOPCBuilder自動將外設的主端口或從端口連接到Avalon總線模塊;在外部實現(xiàn)的情況下,用戶必須手工地將主端口或從端口連接到系統(tǒng)模塊。在任何情況下,Avalon總線信號的行為都是相同的。

Avalon總線允許多個主端口連接到Avalon總線模塊,而且實現(xiàn)Avalon總線的并發(fā)多主端口功能時,Avalon總線模塊不需要額外的特殊信號。當多個主外設試圖同時訪問同一個從外設時,Avalon總線模塊用內(nèi)部的從端口仲裁邏輯來解決沖突。仲裁機制對于Avalon總線外設是完全透明的,因而,不論是否使用了仲裁,應用于主端口和從端口的Avalon總線傳輸協(xié)議是相同的,換句話說,從端口不會意識到有多個主外設同時請求總線傳輸。類似地,被仲裁邏輯強制等待的主外設也不會意識到另一個獲勝的主外設的存在,主端口只是簡單地發(fā)現(xiàn)它的等待請求信號被置為有效,并一直等待,直到目標從外設準備好處理總線傳輸。將仲裁的細節(jié)隱藏在Avalon總線模塊內(nèi)部極大地簡化了外設的設計,任何Avalon外設都可以在單主端口和多主端口結構中使用。

Avalon三態(tài)接口用于將片外設備通過可編程邏輯器件的I/O引腳直接連接到Avalon總線模塊上。用PTF參數(shù)Bus_Type=“valon_tristate”指定一個片外外設時使用了Avalon三態(tài)接口,大多數(shù)系統(tǒng)都需要使用片外存儲器設備。片外存儲器設備一般會在PCB上共享地址和數(shù)據(jù)總線線路,與這些設備連接需要使用三態(tài)雙向數(shù)據(jù)接口,以便其他外設也能夠驅(qū)動數(shù)據(jù)線而不會引起信號競爭。Avalon三態(tài)接口就是通過可編程邏輯器件的I/O引腳連接簡單的片外從外設,如FLASH存儲器、SRAM以及同步SRAM(SSRAM)等。有些Avalon傳輸模式不支持片外設備。Avalon三態(tài)接口僅限于片外從外設,片外從外設可以使用外設控制的等待周期或是固定的建立時間、保持時間和等待周期。外設可以使用固定的延遲傳輸,但不能使用可變的延遲傳輸;不能用Avalon三態(tài)接口擴展片外主外設,用戶可通過創(chuàng)建一個片上的用戶自定義外設來連接片外主外設,這一外設用作Avalon接口和片外設備通信協(xié)議之間的橋。這種橋比較復雜且旨在特殊場合中使用,因此Avalon總線規(guī)范不包括這些情況。表3.2列舉了片外從外設與Avalon總線模塊之間接口的信號類型,信號的方向是從外設的角度定義的。外設提供的端口由外設的設計和PTF文件中的端口定義來決定,不需要提供全部的信號類型。同非三態(tài)的Avalon接口一樣,所有的信號類型在添加了“_n”之后便成為低電平有效的形式,例如chipselect_n和write_n。

Avalon三態(tài)接口使用雙向端口data代替分離的readdata和writedata端口。data端口是雙向的,從外設和Avalon總線模塊只能在特定的時間驅(qū)動data信號線。在寫傳輸期間,Avalon總線模塊驅(qū)動data端口,從設備捕獲data;在讀傳輸期間,從設備驅(qū)動data端口,Avalon總線模塊捕獲data。

Avalon三態(tài)接口引入了共享端口的概念。共享端口在將Avalon總線連接到外部設備時能夠減少所需的外部引腳數(shù)量,PTF參數(shù)Is_Shared用于聲明一個端口是共享的。一個特定類型的共享端口可以連接到多個片外從設備,并由它們共享。數(shù)據(jù)端口總是共享的,例如,當Avalon總線模塊的data端口連接到可編程邏輯器件的I/O引腳時,這些data引腳可以連接到多個片外外設,其他端口例如address、read和write根據(jù)需要也可以共享。如果一個或多個其他外設使用了一個同樣類型的端口,并且這些外設的端口也都聲明為共享,那么SOPCBuilder就會將這些共享端口復用到相同的設備I/O引腳上,Avalon三態(tài)從外設根據(jù)chipselect和outputenable的定義,在特定時間響應共享信號。使用Avalon三態(tài)接口的外設必須使用chipselect端口。片外從外設只能在它的chipselect信號有效時接受傳輸。chipselect不是共享信號,每個片外外設都由獨立的chipselect信號驅(qū)動。

Avalon三態(tài)接口為從端口讀傳輸引入了outputenable信號類型。為避免data線上的信號競爭,片外從外設只能在outputenable有效時驅(qū)動它們的data輸出引腳。outputenable主要用于具有延遲的片外存儲器設備,例如SSRAM在發(fā)起讀傳輸后的幾個時鐘周期之后驅(qū)動data信號線。3.2.3Avalon總線傳輸類型及時序

Avalon總線是一個同步總線接口,由Avalon總線主時鐘提供定時。所有總線傳輸?shù)男盘柖寂cAvalon總線時鐘同步。同步總線接口并不意味著所有的Avalon總線信號都是鎖存的,例如,Avalon的chipselect信號便是由組合邏輯產(chǎn)生的,其輸入是同步于Avalon總線時鐘的寄存器的輸出,因此,外設不能使用Avalon信號的邊沿,因為Avalon信號在達到穩(wěn)定之前會變化多次。就像所有同步設計一樣,Avalon總線外設只能在時鐘上升沿對穩(wěn)定的信號作出響應,輸出信號也必須在時鐘上升沿到來之前達到穩(wěn)定。

Avalon總線模塊也可以連接異步外設,例如片外異步存儲器。但設計時需要考慮一些額外因素:由于Avalon總線模塊的同步操作,Avalon信號只能以Avalon總線時鐘周期為間隔進行變化,此外,如果異步外設的輸出直接連接到Avalon總線模塊,用戶則必須保證輸出信號在時鐘上升沿到來之前達到穩(wěn)定。

Avalon總線規(guī)范并沒有定義在時鐘上升沿之間的信號如何變化,信號的變化由Avalon總線時鐘觸發(fā),信號只要在捕獲時鐘上升沿之前達到穩(wěn)定就可以了,因此總線規(guī)范的Avalon總線時序圖中不會描繪精確的時間信息。在時鐘上升沿之間的信號是可變的,它取決于用于實現(xiàn)系統(tǒng)的Altera可編程邏輯器件的特性。類似地,Avalon總線沒有規(guī)定固有的最高性能,系統(tǒng)模塊在特定的器件上綜合布線之后,用戶必須對系統(tǒng)模塊進行標準的時序分析,以確定Avalon總線傳輸能達到的最高速度。不同Avalon總線端口的傳輸能力并不一致,基本的Avalon總線傳輸只能實現(xiàn)一次總線傳輸中在一對主設備和從設備之間傳遞一個數(shù)據(jù)單元。在基本的Avalon總線傳輸基礎上,通過增加以下幾種特性中的的一種或多種,對總線傳輸作以擴展,可以派生出能夠適應所有外設的傳輸模式,這些特性包括:①插入固定長度的或可變長度的等待狀態(tài);②固定延遲或可變延遲的流水線傳輸模式;③建立和保持時間;④突發(fā)傳輸;⑤流控信號;⑥三態(tài)驅(qū)動。例如在傳輸中增加等待狀態(tài)可以適應低速外設,而使用流控信號實現(xiàn)的流模式傳輸以及多主傳輸則可以適應對帶寬要求較高的外設。主端口的基本傳輸模式是所有Avalon主傳輸?shù)幕A。以下對常用的幾種Avalon總線傳輸?shù)臅r序加以說明,本書中只涉及到Avalon總線模塊與從外設之間的傳輸。

1.Avalon總線基本從讀(SlaveRead)傳輸

Avalon總線基本從讀傳輸,是所有Avalon從讀傳輸?shù)男盘枙r序都源自從端口的基本傳輸模式?;緩淖x傳輸(FundamentalSlaveReadTransfer)是在一個總線時鐘周期內(nèi),由Avalon總線從外設向Avalon總線模塊傳輸一個全數(shù)據(jù)總線寬度的數(shù)據(jù),基本從讀傳輸由Avalon總線模塊發(fā)起。

Avalon總線基本從讀傳輸時序如圖3.5所示。從讀傳輸從第一個總線時鐘clk的上升沿開始,到下一個總線時鐘的上升沿結束。在第一個clk的上升沿中,Avalon總線模塊將address、byteenable和read信號傳輸給從端口,Avalon總線模塊在內(nèi)部對address解碼產(chǎn)生從端口的片選信號chipselect,chipselect有效后,從端口以最快的速度將輸出數(shù)據(jù)送到數(shù)據(jù)總線信號readdata上,Avalon總線模塊在下一個時鐘周期的上升沿讀取readdata。圖3.5Avalon總線基本從讀傳輸時序

Avalon總線基本從讀傳輸只適用于異步從外設,比如異步存儲芯片等。為了在一個總線時鐘周期內(nèi)完成傳輸,從端口必須在chipselect信號有效后,立即將數(shù)據(jù)送到數(shù)據(jù)總線上,而且在下一個時鐘上升沿到來之前達到穩(wěn)定。對輸入寄存的同步從外設必須使用等待狀態(tài)屬性或流水線狀態(tài)屬性才能夠完成Avalon總線傳輸。等待狀態(tài)的加入,擴展了從讀傳輸?shù)男阅?,可以給從外設一個或多個時鐘周期以捕獲地址信號并輸出數(shù)據(jù)信號,但會影響從端口數(shù)據(jù)的吞吐量。如果不加入等待狀態(tài),每個周期完成一次數(shù)據(jù)傳輸;加入一個時鐘周期的等待狀態(tài),則每兩個周期完成一次數(shù)據(jù)傳輸,數(shù)據(jù)吞吐量降低一半;如果加入更多的等待狀態(tài),則數(shù)據(jù)傳輸速率會更低。有兩種向從讀傳輸中加入等待狀態(tài)的方法,即加入固定時鐘周期數(shù)的等待狀態(tài)和加入可變時鐘周期數(shù)的等待狀態(tài)。固定時鐘周期數(shù)等待狀態(tài)的從讀傳輸與基本從讀傳輸所使用的信號一樣,區(qū)別僅在于從chipselect信號有效至readdata有效之前需要等待多長時間,比如插入一個時鐘周期的等待狀態(tài)的從讀傳輸,在chipselect有效后,Avalon總線模塊等待一個時鐘周期之后才去捕捉readdata信號。圖3.6是帶一個時鐘周期的等待狀態(tài)的Avalon總線從讀傳輸時序。在第一個時鐘周期中,Avalon總線模塊先提供有效的address、byteenable、read及chipselect信號,插入等待狀態(tài)后,外設不必在第一個周期內(nèi)提供有效數(shù)據(jù),而在第二個總線時鐘周期內(nèi)將有效數(shù)據(jù)輸出到readdata上即可,在第三個時鐘周期的上升沿,Avalon總線模塊從readdata上捕獲數(shù)據(jù),完成總線傳輸。圖3.6帶一個時鐘周期的等待狀態(tài)的Avalon總線從讀傳輸時序可變時鐘周期數(shù)等待狀態(tài)的從讀傳輸與基本從讀傳輸相比,需要為從端口增加一個waiterequest信號。可變時鐘周期數(shù)等待狀態(tài)的Avalon總線從讀傳輸時序如圖3.7所示。在第一個時鐘周期中,Avalon總線模塊先提供有效的address、byteenable、read及chipselect信號,從端口在第一個時鐘周期內(nèi)提供有效的waitrequest信號以停止Avalon總線模塊,此時Avalon總線模塊保持地址信號和控制信號不變并停止從readdata捕捉數(shù)據(jù)。從端口將數(shù)據(jù)準備好之后,取消waitrequest信號,在下一個時鐘信號的上升沿,Avalon總線模塊從readdata上捕獲數(shù)據(jù),完成總線傳輸。需要注意的是,Avalon總線模塊停止之后,一般相應的也會停止一個相關的Avalon總線主外設,Avalon總線模塊并不提供停止之后的超時處理機制,因此在設計從外設時,要確保從模塊不會無限期停止Avalon總線模塊,進而永久性終止了一個相關的主外設的運行。圖3.7可變時鐘周期數(shù)等待狀態(tài)的Avalon總線從讀傳輸時序

2.Avalon總線基本從寫(SlaveWrite)傳輸

Avalon總線基本從寫傳輸是所有Avalon總線從寫傳輸?shù)幕A,它不包括Avalon總線規(guī)范定義的所有傳輸特性。

Avalon總線基本從寫傳輸由Avalon總線模塊發(fā)起,在一個總線時鐘周期內(nèi),向總線從外設傳輸一個單元的數(shù)據(jù)。如果數(shù)據(jù)總線寬度超過一個字節(jié),byteenable信號將確定向哪一個字節(jié)寫入數(shù)據(jù),如果沒有byteenalble信號,則表示向數(shù)據(jù)總線上的所有字節(jié)寫數(shù)據(jù)。圖3.8是Avalon總線基本從寫時序。圖3.8Avalon總線基本從寫時序

Avalon總線模塊提供有效的address、writedata、byteenable及write信號,avalon總線模塊內(nèi)部完成地址解碼并提供有效的從端口片選信號chipselect,在下一個時鐘周期的上升沿,從端口捕捉到地址、數(shù)據(jù)及控制信號,完成總線傳輸。

Avalon總線基本從寫傳輸只適用于能夠在一個時鐘周期內(nèi)捕捉數(shù)據(jù)的片上同步外設,對于不能在一個總線時鐘周期內(nèi)捕捉數(shù)據(jù)的外設則需要增加等待狀態(tài)。與從讀傳輸一樣,有兩種向從寫傳輸中加入等待狀態(tài)的方法:加入固定時鐘周期數(shù)的等待狀態(tài)和加入可變時鐘周期數(shù)的等待狀態(tài)。在從讀傳輸時序中加入等待狀態(tài),也一樣會降低寫數(shù)據(jù)的吞吐量。固定時鐘周期數(shù)等待狀態(tài)的從寫傳輸與基本從寫傳輸所使用的信號一樣,區(qū)別僅在于從Avalon總線模塊提供了有效地址、數(shù)據(jù)及控制信號開始至從端口捕獲數(shù)據(jù)之前所需要等待的時間。比如插入一個時鐘周期的等待狀態(tài)的從寫傳輸,Avalon總線模塊將提供有效地址、數(shù)據(jù)及控制信號并保持穩(wěn)定直至傳輸完成,在第一個時鐘周期內(nèi),Avalon總線模塊先提供有效的address、byteenable、writedata及write信號,在等待期間,這些信號保持不變,在固定長度的等待狀態(tài)之后,從設備讀取數(shù)據(jù),完成傳輸,Avalon總線模塊也立即釋放地址、數(shù)據(jù)及控制信號線??勺儠r鐘周期數(shù)等待狀態(tài)的從寫傳輸允許從外設停止Avalon模塊來捕捉writedata,這種傳輸模式適用于需要可變時間長度來讀取數(shù)據(jù)的從外設,與基本從讀傳輸相比,需要為從端口增加一個waiterequest信號??勺儠r鐘周期數(shù)等待狀態(tài)的Avalon總線從寫傳輸時序如圖3.9所示。在第一個時鐘周期中,Avalon總線模塊先提供有效的address、writedata、byteenable、write及chipselect信號,如果從端口需要額外的時間來捕捉數(shù)據(jù),則必須在第一個時鐘周期內(nèi)提供有效的waitrequest信號以停止Avalon總線模塊,此時Avalon總線模塊保持地址信號和控制信號不變。從端口捕捉數(shù)據(jù)之后,取消waitrequest信號,完成總線傳輸。圖3.9可變時鐘周期等待狀態(tài)的Avalon總線從寫傳輸時序同樣需要注意的是,Avalon總線模塊停止之后,一般相應地也會停止一個相關的Avalon總線主外設,Avalon總線模塊不提供停止之后的超時處理機制,因此在設計從外設時,要確保從模塊不會無限期停止Avalon總線模塊,進而永久性終止了一個相關的主外設的運行。還有一點需要注意:如果要對一個從端口可讀也可寫,而且其中讀或?qū)懶枰迦肟勺冎芷跀?shù)的等待狀態(tài),則讀/寫都必須插入可變周期數(shù)的等待狀態(tài)。

3.流水線傳輸模式針對需要多個時鐘周期才能返回第一個數(shù)據(jù),之后則每個周期都可以返回數(shù)據(jù)的同步從外設,使用Avalon流水線從讀傳輸模式可以增加數(shù)據(jù)傳輸?shù)膸?。使用流水線傳輸,主端口可以在捕獲前一個readdata之前啟動下一個傳輸。流水線讀傳輸過程可以分為地址段和數(shù)據(jù)段兩個獨立的階段。主端口通過在地址段提供有效地址來發(fā)起一次傳輸,從端口通過在數(shù)據(jù)段發(fā)送數(shù)據(jù)完成傳輸,下一次傳輸?shù)牡刂范慰梢栽谇耙淮蝹鬏數(shù)臄?shù)據(jù)段結束之前開始。這種傳輸方式會導致一個等待時間,即從一次傳輸?shù)牡刂范谓Y束至數(shù)據(jù)段結束之間的時間,也就是數(shù)據(jù)段的延遲時間,這個延遲稱做流水線潛伏期(Latency),流水線潛伏期可以是固定的,也可以是變化的。地址段的持續(xù)時間決定了端口的吞吐率,即地址段持續(xù)的時間越長,端口的吞吐率越低。在流水線傳輸模式中,Avalon總線流水線傳輸從外設從Avalon總線模塊捕獲地址及控制信號后,需要一個或一個以上的時鐘周期來產(chǎn)生輸出數(shù)據(jù)。從端口捕獲地址之后,Avalon總線模塊即使沒有捕獲有效數(shù)據(jù),也可以馬上發(fā)起一次新的傳輸,這樣,流水線從設備可能在任何時候都會有多個傳輸被掛起。固定等待時間的流水線從讀傳輸使用的從端口信號與基本從讀傳輸?shù)囊粯?,區(qū)別只在于地址段與數(shù)據(jù)段的時序。除readdata信號之外,其他信號在地址段與基本從讀傳輸也相同。在地址段,從端口可以使用等待狀態(tài),地址段在等待狀態(tài)(如果有必要的話)結束后的下一個總線時鐘的上升沿結束時,從端口不需要在地址段提供這次傳輸?shù)膔eaddata信號,Avalon總線模塊在地址段結束后可以發(fā)起下一次傳輸。在數(shù)據(jù)段,外設在多個時鐘周期之后,將有效數(shù)據(jù)送到readdata上,如果外設固定的等待時間周期數(shù)為N,從端口則必須在地址段結束之后的第N個總線時鐘信號clk的上升沿到來之前提供有效數(shù)據(jù)。如果N=1,則從端口應該在捕獲地址及控制信號之后的下一個時鐘周期的上升沿向readdata提供有效數(shù)據(jù)。圖3.10為一個等待周期數(shù)可變而潛伏期為二個時鐘周期的流水線從讀傳輸時序。圖3.10等待周期數(shù)可變而潛伏期為二個時鐘周期的流水線從讀傳輸時序可變潛伏時間的流水線從讀傳輸允許從端口在可變潛伏時間之后返回有效數(shù)據(jù)。這種情況下,從端口需要一個額外的readdatavalid信號向Avalon總線表明從端口何時提供有效數(shù)據(jù),如果使用了這個輸出信號,則說明該從設備是可變潛伏時間的流水線從讀端口??勺儩摲鼤r間的時序在地址段與固定潛伏時間的流水線從讀時序相同。地址段結束后,可變潛伏時間的流水線從端口可以花費任意時間來返回有效的從讀數(shù)據(jù),從外設能夠提供有效數(shù)據(jù)后,同時使readdata和readdatavalid有效,并將這兩個信號保持到下一個總線時鐘的上升沿,Avalon總線模塊在這個時鐘的上升沿捕捉readdata及readdatavalid,數(shù)據(jù)段結束,即傳輸完成。圖3.11是一個可變潛伏期的流水線從讀傳輸時序。圖3.11一個可變潛伏期的流水線從讀傳輸時序

4.流控(FlowControl)傳輸

Avalon流控信號提供了一種從外設控制數(shù)據(jù)傳輸?shù)哪J剑瑐鬏斢蓮耐庠O發(fā)起,當從外設表明其數(shù)據(jù)有效或可以接收數(shù)據(jù)時,傳輸便開始了。由于主端口不需要不斷輪詢從端口,因此流控信號簡化了邏輯設計,另外流控信號也降低了帶寬開銷,適合大量數(shù)據(jù)的傳輸。主、從端口必須都使用流控信號才可以。從端口傳輸?shù)牧骺匦盘栍衦eadyfordata、dataavailable或endofpacket等三個,使用一個或多個流控信號的傳輸就是流控傳輸,流控信號不影響其他信號的時序。從端口通過readyfordata信號標明已經(jīng)準備好接收數(shù)據(jù),取消readyfordata信號則表明如果繼續(xù)向從端口寫數(shù)據(jù)會導致溢出。從端口通過dataavailable表明它已經(jīng)準備好數(shù)據(jù),可以開始從讀傳輸,取消dataavailable則表明繼續(xù)讀取數(shù)據(jù)會導致數(shù)據(jù)斷流??梢杂胑ndofpacket信號表明傳輸?shù)倪吔?。圖3.12是帶流控的從讀傳輸時序。圖3.12帶流控的從讀傳輸時序3.3NiosⅡ軟核處理器3.3.1NiosⅡ軟核處理器概述嵌入式處理器內(nèi)核是SOPC技術的核心。在一個SOPC系統(tǒng)中,如果條件允許,可以用任意一款軟核處理器或硬核處理器作為嵌入式處理器,這個處理器可以非常復雜而且功能強大,也可以非常簡單,這里所說的條件包括硬件和軟件開發(fā)工具、可編程邏輯器件對該處理器的支持以及與外部設備的接口能力等方面。在SOPC的概念逐漸清晰的過程中,有一些不同的處理器被用于完成這一任務。目前市場上使用最多的SOPC系統(tǒng)軟核處理器是Altera公司的Nios與NiosⅡ。

NiosⅡ嵌入式處理器是Nios處理器的升級版本,與Nios處理器采用相同的指令集。NiosⅡ處理器是一種RISC處理器,其主要特性如下:

(1)?32位指令集。

(2)?32位數(shù)據(jù)總線寬度。

(3)?32位地址空間。

(4)?32個通用寄存器。

(5)?32個外部中斷源。

(6)?32×32乘法器和除法器。

(7)可以計算64位與128位乘法的專用指令。

(8)單精度浮點運算指令。

(9)基于邊界掃描測試(JTAG)的調(diào)試邏輯,支持硬件斷點、數(shù)據(jù)觸發(fā)以及片外和片內(nèi)的調(diào)試跟蹤。

(10)最多達256個用戶定義的CPU指令。

(11)軟件開發(fā)工具:NiosⅡ的集成化開發(fā)環(huán)境(IDE),基于GNU的編譯器以及硬件輔助調(diào)試模塊。

(12)與SignalTapⅡ配合,可以實時分析FPGA中的指令和數(shù)據(jù)。

(13)最高可達250DMIPS(250×100萬條指令/秒)的性能。

NiosⅡ系列32位RISC嵌入式處理器在FPGA中的實現(xiàn)成本只有35美分,并且由于處理器是軟核形式,具有很大的靈活性,因此可以在多種系統(tǒng)配置組合中進行選擇,以滿足在性能、特性和成本之間的平衡。

NiosⅡ處理器的最大特點是其可配置性能,即用戶可以根據(jù)自己的標準定制處理器,按照需要選擇合適的外設、存儲器和接口,此外還可以輕松集成自己專有的功能,使設計具有獨特的競爭優(yōu)勢。為了滿足設計升級的需求,對同一設計,NiosⅡ設計人員必須能夠更改其設計,加入多個NiosⅡCPU、定制指令集、硬件加速器,以達到新的性能目標。還可以通過Avalon交換架構來調(diào)整系統(tǒng)性能,該架構是Altera的專有互聯(lián)技術,支持多種并行數(shù)據(jù)通道,可實現(xiàn)大吞吐量的應用。

DE2平臺是學習NiosⅡ系統(tǒng)設計的一個很好的平臺,圖3.13是一個在DE2上實現(xiàn)的NiosⅡ處理器系統(tǒng)的例子。這個系統(tǒng)中包括一個NiosⅡ軟核處理器,通過Avalon總線與FPGA片上及片外的各種外設相連。片上的外設包括片上ROM、兩個定時器Timer1和Timer2;與片外資源相連的外設包括UART、LCD顯示驅(qū)動器、GPIO接口控制器、以太網(wǎng)接口、SD卡接口、SDRAM控制器以及與外部閃存和SRAM存儲器連接的三態(tài)橋。系統(tǒng)中還配置了一個用于調(diào)試軟件的JTAG調(diào)試模塊。

NiosⅡ軟核處理器系統(tǒng)的開發(fā)任務主要包括兩方面:定制NiosⅡ處理器系統(tǒng)和軟件開發(fā)。定制NiosⅡ處理器系統(tǒng)的工作由Altera提供的系統(tǒng)級設計工具SOPCBuilder完成;QuartusⅡ軟件通過SOPCBuilder工具定制NiosⅡ處理器系統(tǒng),在設計中對NiosⅡ處理器系統(tǒng)進行例化,并自動生成該處理器系統(tǒng)的部分底層驅(qū)動程序。圖3.13一個在DE2上實現(xiàn)的NiosⅡ處理器系統(tǒng)的例子3.3.2NiosⅡ軟核處理器的硬件結構可以將NiosⅡ軟核處理器(NiosⅡ?Processor?Core)理解為對NiosⅡ架構的一種實現(xiàn)。NiosⅡ架構是一個指令集架構(InstructionSetArchitecture,縮寫為ISA),NiosⅡ軟核處理器并不包括外設及處理器與外部的連接電路,而只包括實現(xiàn)ISA的電路。

NiosⅡ軟核處理器是實現(xiàn)NiosⅡ指令集架構時對三方面權衡的結果,即在性能與成本之間的權衡,保留或取消某些特性之間的權衡以及用軟件實現(xiàn)還是用硬件實現(xiàn)特定功能之間的權衡。圖3.14是一個NiosⅡ軟核處理器的原理框圖。NiosⅡ架構定義的用戶可見的單元電路包括寄存器文件、算數(shù)邏輯單元(ALU)、與用戶自定義指令邏輯的接口、異??刂破鳌⒅袛嗫刂破?、指令總線、數(shù)據(jù)總線、指令及數(shù)據(jù)緩存、緊密耦合存儲器接口電路及JTAG調(diào)試模塊等。寄存器文件包括32個32位的通用寄存器和6個32位的控制寄存器,NiosⅡ架構允許在未來增加浮點運算寄存器。圖3.14NiosⅡ軟核處理器的原理框圖算數(shù)邏輯單元(ALU)對存儲在通用寄存器中的數(shù)據(jù)進行操作,其輸入為1個或2個寄存器的數(shù)據(jù),操作結果存儲在一個通用寄存器中,NiosⅡ?ALU支持常用的算數(shù)、邏輯、關系及移位操作,軟件通過這些基本操作完成復雜的操作。在一些NiosⅡ的實現(xiàn)中,mul、muli、mulxss、mulxsu、mulxuu、div、divu等指令是不用硬件來實現(xiàn)的,當處理器處理這些指令時,會產(chǎn)生一個異常,異常處理器調(diào)用軟件實現(xiàn)這些指令,因此從處理器使用者的角度看,沒有什么不同。

NiosⅡ架構允許使用最多256條用戶自定義指令,這些指令通過用戶自定義指令邏輯電路來實現(xiàn),對于處理器的使用者,這些指令與其他指令沒有區(qū)別。NiosⅡ支持IEEE754-1985標準規(guī)定的單精度浮點運算指令,這些指令就是通過用戶自定義指令來實現(xiàn)的。

NiosⅡ軟核處理器支持兩個復位信號,全局復位信號reset對軟核處理器進行強制復位,cpu_resetrequest只是復位CPU,而不影響NiosⅡ系統(tǒng)中的其他組件。

NiosⅡ用異??刂破骱椭袛嗫刂破鱽硖幚懋惓r間和中斷。

NiosⅡ處理器對存儲器和外設的管理如圖3.15所示。NiosⅡ處理器架構是哈佛結構,即使用兩個獨立的存儲器模塊分別存儲指令和數(shù)據(jù),每個存儲器模塊都不允許指令和數(shù)據(jù)并存,使用獨立的指令總線和數(shù)據(jù)總線。NiosⅡ處理器的指令和數(shù)據(jù)是存儲在外部存儲器上的,處理器與外部存儲器的數(shù)據(jù)交換通過Avalon交換架構實現(xiàn),外部存儲器作為Avalon交換架構的從設備。處理器作為一個Avalon架構的主設備連接到Avalon總線上以從外部存儲器獲取指令,獲得的指令經(jīng)過指令緩存連接到指令總線上。處理器使用另外一個Avalon主端口從外部存儲器獲得數(shù)據(jù),獲得的數(shù)據(jù)可以通過數(shù)據(jù)緩存連接到數(shù)據(jù)總線上,也可以直接連接到數(shù)據(jù)總線上。對外設的管理也通過Avalon交換架構,將外設映射到Avalon總線上特定的從設備地址來實現(xiàn)。除常規(guī)的數(shù)據(jù)與指令存儲器之外,為了提高對存儲器的存取速度,還可以為處理器配置緊密耦合存儲器(TightlyCoupledMemory,TCM),NiosⅡ處理器與緊密耦合存儲器的連接不經(jīng)過Avalon交換架構而直接相連,緊密耦合指令存儲器直接連接到指令緩存,緊密耦合數(shù)據(jù)存儲器直接連接到數(shù)據(jù)緩存,緊密耦合存儲器一般容量不大,而且只能用FPGA片上存儲器實現(xiàn)。圖3.15NiosⅡ處理器對存儲器和外設的管理3.4NiosⅡ軟核處理器軟件開發(fā)3.4.1HAL系統(tǒng)庫

NiosⅡ軟核處理器的硬件抽象層(HAL)系統(tǒng)庫是個小型運行時環(huán)境,它為NiosⅡ軟核處理器的軟件開發(fā)環(huán)境提供了簡單的硬件驅(qū)動接口,是軟件與硬件之間的橋梁。HAL應用程序接口(API)集成在ANSIC的標準庫中,通過HALAPI可以使用如printf(?)、fopen(?)和fwrite(?)等大家非常熟悉的C語言庫函數(shù)來訪問外設。HAL與SOPCBuilder和NiosⅡIDE緊密地集成在一起,HAL系統(tǒng)庫由SOPCBuilder自動產(chǎn)生,SOPCBuilder生成一個系統(tǒng)時,會自動生成與系統(tǒng)配置相匹配的HAL系統(tǒng)庫,當使用SOPCBuilder改變系統(tǒng)配置,并重新生成系統(tǒng)時,HAL系統(tǒng)庫也會發(fā)生相應的改變,不會因為考慮不周而產(chǎn)生程序錯誤。因此NiosⅡ軟核處理器的軟件工程師可以不用深入了解底層硬件結構即可開發(fā)應用軟件,也保證了NiosⅡ應用軟件具有良好的可移植性。

HAL系統(tǒng)庫提供以下服務:

(1)與NewlibANSIC標準庫結合,提供用戶熟知的庫函數(shù)。

(2)提供設備驅(qū)動,使用戶可以訪問系統(tǒng)中的所有設備。

(3)?HALAPI為用戶提供了與HAL服務統(tǒng)一的標準接口來訪問外設及處理中斷等。

(4)系統(tǒng)初始化:在main(?)函數(shù)之前為NiosⅡ處理器及運行時環(huán)境完成初始化任務。

(5)設備初始化:在main(?)函數(shù)之前例化并初始化系統(tǒng)中的所有設備。圖3.16為基于HAL的系統(tǒng)的分層結構。從圖中可以看出,HAL系統(tǒng)庫將系統(tǒng)硬件與用戶應用程序聯(lián)系在一起。圖3.16基于HAL的系統(tǒng)的分層結構在基于HAL的系統(tǒng)設計中,軟件人員要做的是編寫設備驅(qū)動軟件及應用軟件。HAL已經(jīng)提供了如下幾類基本設備的通用驅(qū)動軟件:

(1)字符模式設備:如UART等可以通過串行接口訪問的設備。

(2)定時器設備:具有定時功能的硬件外設。

(3)文件系統(tǒng)設備:可以按文件系統(tǒng)管理方式存取的設備。

(4)以太網(wǎng)設備:可以通過為Altera的lwIP提供網(wǎng)絡接入的設備。

(5)?DMA設備:可實現(xiàn)不同地址范圍的大量數(shù)據(jù)搬移的設備。

(6)?FLASH存儲器設備。

HAL為每一種設備模型定義了訪問該設備的一組驅(qū)動程序,涵蓋了大多數(shù)的應用場和,如果需要增加新的外設,只需在這些設備的基礎上做一些簡單的修改即可。HAL系統(tǒng)庫調(diào)用設備驅(qū)動訪問硬件,應用程序則調(diào)用ANSIC或HALAPI訪問硬件,而不需要直接調(diào)用設備驅(qū)動。

Newlib是一種專為嵌入式系統(tǒng)開發(fā)的開源標準C語言庫,HAL系統(tǒng)庫中結合了Newlib標準庫,關于Newlib的具體資料請參照/newlib。3.4.2NiosⅡ?IDE

NiosⅡ的軟件開發(fā)環(huán)境稱為TheNiosⅡ?IntegratedDevelopmentEnvironment(IDE),即NiosⅡ集成開發(fā)環(huán)境。NiosⅡ?IDE是在EclipseIDE的基礎上建立的,編譯器采用GNUC/C++編譯器。在NiosⅡ?IDE中可以完成NiosⅡ處理器軟件的編輯、編譯、運行管理、調(diào)試和下載等工作。

NiosⅡ?IDE將HAL系統(tǒng)庫與用戶設計緊密地結合在一起,在NiosⅡ?IDE中每建立一個新的用戶工程,IDE同時也會根據(jù)用戶選擇的NiosⅡ系統(tǒng),建立一個HAL系統(tǒng)庫工程。圖3.17為NiosⅡ?IDE工程的結構。通過SOPCBuilder建立的NiosⅡ處理器系統(tǒng),稱做SOPCBuilder系統(tǒng),其信息保存在.ptf文件中,代表系統(tǒng)的硬件。NiosⅡ?IDE在此基礎上建立了HAL系統(tǒng)庫工程,相當于是對完整的HAL系統(tǒng)庫的一種定制。在HAL系統(tǒng)庫工程中包括應用程序與硬件系統(tǒng)接口所需的所有信息,在NiosⅡIDE中,HAL系統(tǒng)庫工程作為單獨的工程與應用工程并列存在。用戶在HAL系統(tǒng)庫工程的基礎上建立自己的應用工程,用戶應用工程中包含所有用戶自己編寫的代碼以及編譯后的可執(zhí)行文件。圖3.17NiosⅡIDE工程的結構

HAL系統(tǒng)庫中的系統(tǒng)頭文件system.h擔負著連接軟件與硬件的關鍵任務,system.h中定義了NiosⅡ處理器系統(tǒng)中所有外設的名稱、配置、基地址等,如果該外設需要中斷服務,還會定義中斷的優(yōu)先級。應用程序設計者不需要與system.h直接打交道,甚至不需要在自己的工程中直接包含該頭文件。system.h由NiosⅡ?IDE自動產(chǎn)生并維護,用戶不用手工修改,在NiosⅡIDE中對system.h的配置通過SystemLibraryProperties頁面來修改。代碼3.1是3.5節(jié)設計的系統(tǒng)中定時器sys_clk_timer、七段數(shù)碼管顯示seg7_lut_8及sysid等外設在system.h頭文件中的定義。代碼3.1system.h程序摘錄。

/**sys_clk_timerconfiguration**/#defineSYS_CLK_TIMER_NAME"/dev/sys_clk_timer"#defineSYS_CLK_TIMER_TYPE"altera_avalon_timer"#defineSYS_CLK_TIMER_BASE0x00010800#defineSYS_CLK_TIMER_SPAN32#defineSYS_CLK_TIMER_IRQ1#defineSYS_CLK_TIMER_ALWAYS_RUN0#defineSYS_CLK_TIMER_FIXED_PERIOD0#defineSYS_CLK_TIMER_SNAPSHOT1#defineSYS_CLK_TIMER_PERIOD1#defineSYS_CLK_TIMER_PERIOD_UNITS"ms"#defineSYS_CLK_TIMER_RESET_OUTPUT0#defineSYS_CLK_TIMER_TIMEOUT_PULSE_OUTPUT0#defineSYS_CLK_TIMER_MULT0.001#defineSYS_CLK_TIMER_FREQ50000000/**seg7_lut_8_0configuration**/#defineSEG7_LUT_8_0_NAME"/dev/seg7_lut_8_0"#defineSEG7_LUT_8_0_TYPE"seg7_lut_8"#defineSEG7_LUT_8_0_BASE0x00010830#defineSEG7_LUT_8_0_SPAN4#defineSEG7_LUT_8_0_HDL_PARAMETERS""/**sysidconfiguration**/#defineSYSID_NAME"/dev/sysid"#defineSYSID_TYPE"altera_avalon_sysid"#defineSYSID_BASE0x00010828#defineSYSID_SPAN8#defineSYSID_ID2660984649u#defineSYSID_TIMESTAMP1160149925u3.5SOPC系統(tǒng)設計實例3.5.1SOPC系統(tǒng)設計流程

SOPC系統(tǒng)設計流程如圖3.18所示。設計者首先根據(jù)任務要求決定系統(tǒng)需求,然后用SOPCBuilder建立自己的SOPC系統(tǒng),完成這項工作后,硬件工程師與軟件工程師可以開始協(xié)同工作。硬件工程師首先建立一個頂層設計文件,將生成的SOPC系統(tǒng)例化,并設置引腳分配、時序要求及其他設計約束,然后編譯硬件設計并將FPGA設計下載到目標板中。在硬件工程師工作的同時,軟件工程師可以用NiosⅡ?IDE開發(fā)應用軟件,并在NiosⅡIDE中使用NiosⅡ指令仿真器運行并調(diào)試軟件,等硬件工程師將硬件設計下載到目標板中之后,軟件工程師將可執(zhí)行軟件下載到目標板上的NiosⅡ系統(tǒng)中,并在目標板上運行調(diào)試軟件,如果發(fā)現(xiàn)設計不滿足需求,則再改進硬件與軟件的設計。圖3.18SOPC系統(tǒng)設計流程3.5.2SOPC系統(tǒng)設計實例在本部分內(nèi)容中,用SOPC系統(tǒng)在DE2平臺上實現(xiàn)一個計數(shù)器。先在DE2平臺上建立SOPC系統(tǒng)的硬件,這個系統(tǒng)包括一個NiosⅡ/s嵌入式處理器、一個JTAGUART及一個定時器。另外,我們將加入一個自定義組件,實現(xiàn)對DE2平臺上七段數(shù)碼管的控制。

1.建立工程啟動QuartusⅡ軟件,用New>NewProjectWizard…菜單在QuartusⅡ中新建一個工程,本例中將工程的工作目錄設定在C:\de2\niosII_DE2,工程的名稱為niosii_rtos,如圖3.19所示。如果希望使用已有工程的配置,點擊圖3.19中所示的UsingExistingProjectSettings按鈕,顯示如圖3.20所示的界面,建議選用DE2系統(tǒng)光盤中提供的DE2_Top工程的配置。在接下來的向?qū)е?,先不用加入設計文件,器件中選擇EP2C35F672C6,向?qū)瓿珊蟮膮R總界面如圖3.21所示。圖3.19為SOPC系統(tǒng)新建一個工程圖3.20使用已有工程的配置圖3.21新工程匯總界面

2.建立頂層設計文件建立工程之后,需要為工程建立一個頂層設計文件,這個設計文件的名稱應該與工程的名稱完全一致。設計文件可以是QuartusⅡ允許的各種設計輸入格式的文件,如VerilogHDL、VHDL、AHDL及原理圖設計文件等。本例中使用原理圖設計文件。用File>New菜單建立一個新文件,選擇BlockDiagram/SchematicFile文件,文件名稱與工程名稱保持一致,為niosii_rtos。保存新建的文件。

3.用SOPCBuilder建立一個新的SOPC硬件系統(tǒng)單擊工具按鈕或者Tools>SOPCBuilder菜單啟動SOPCBuilder。如圖3.22所示,輸入新系統(tǒng)的名稱為niosⅡ_system,當然也可以輸入其他名稱,但應該注意,所有的名稱中都不能出現(xiàn)空格。TargetHDL選項可以選擇Verilog,也可以選擇VHDL,這里選擇Verilog。按OK按鈕,進入SOPCBuilder的主界面,如圖3.23所示。SOPCBuilder主界面的組成部分在3.1節(jié)中已經(jīng)講述過,這里不再贅述。圖3.22用SOPCBuilder建立一個新系統(tǒng)圖3.23SOPCBuilder主界面

4.向系統(tǒng)中添加NiosⅡ處理器在SOPCBuilder主界面左側(cè)的組件列表中,選中NiosⅡ?Processor,按鼠標右鍵,在彈出的菜單中選擇AddNewNiosⅡ?Processor,顯示如圖3.24所示的NiosⅡ處理器配置界面。選擇NiosⅡ/s作為本設計的處理器,從界面中可以看到,NiosⅡ/s占用約1200~1400個邏輯單元,2個M4K

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論