摘 要: 設計了一種基于NiosII處理器的片上系統(SoC),集成了Nios II處理器IP、PCI接口IP、網絡接口IP以及基于Wishbone總線的串行接口IP核、 CAN接口IP核等。系統具有可重配置、可擴展、靈活、兼容性高、功耗低等優點,適合于片上系統開發與應用。本設計使用Verilog HDL硬件描述語言在QuartusII環境下進行IP軟核設計、綜合、布局布線,在Model Sim下完成功能、時序仿真,在SoPC下完成系統的定制與集成,在NiosII IDE環境下完成片上系統軟件程序的開發,最后在FPGA器件上實現了智能多接口功能的片上系統。
隨著超大規模片上系統需求的日益增多,基于傳統IC芯片的微電子應用系統設計技術正在轉向基于知識產權IP(Intellectual Property)核的片上系統技術發展[1]。因此,基于資源IP核的復用設計方式已開始逐漸成為國內外微電子系統設計的一項支撐技術。從應用功能角度劃分IP核有三大類:微處理器IP核(如8位8051核、32位NiosII、Microblaze核等)、各種接口IP核(如SDRAM控制器、 PCI總線接口、CAN總線接口、串行總線接口IP核等)和專用算法IP核(圖形編解碼H.264、加密核等)。使用IP核復用技術,將IP集成到 FPGA芯片上,可縮小PCB板體積,降低功耗;還可以根據需要進行功能的升級、擴充和裁減。本文以Altera公司的NiosII為主處理器并集成PCI接口、串行接口、CAN接口、網絡接口設計為例,說明片上系統的設計方法。
1 設計原理
采用片上系統設計的智能多接口模塊一般可以不需要外部主處理器操作系統的干預,其典型結構如圖1所示。在工作時,片上系統收到的信號經過本板上Nios II處理器處理轉換后,即可將數據信號送出或做其他處理。信號轉換、處理工作全部由片上系統完成,不增加外主處理器操作系統的軟件開銷,因而對整個系統的負擔更小。也可以要通過接入的PCI等系統總線,以中斷提請等方式向外部主處理器提請訪問,可完成與外主處理器的數據交換[4]。
在開源OpenCores組織的網站上,可以獲取大量共享IP核, 但是大多數是未被驗證的,或者由于是不同人撰寫的,其代碼風格也不盡相同。其接口信號定義為標準Wishbone總線形式,Wishbone著重定義IP 核的接口信號和總線周期標準來實現IP核的重用。通過對IP軟核代碼的分析,在原代碼的基礎上可通過修改IP核的部分邏輯功能(如增加內嵌數據收發 FIFO深度),優化部分接口邏輯;通過對異步信號同步采樣一次,可以去干擾,消除亞穩態以及虛假的Glitch;可通過增加復位狀態寄存器等實現優化設計。最終完成基于Wishbone總線的IP軟核設計。下面以串行接口IP核設計為例說明,其他類型的IP核也可以通過類似方法獲得。串行接口IP設計是以異步串行控制器16C550為原型的。
2.1.1 波特率發生器設計
波特率發生器通過兩個8位的分頻寄存器實現,它提供發送數據和接收數據的基準時鐘。波特率發生器產生的時鐘是串行數據波特率的16倍。上電復位后兩個分頻寄存器都為00H,不使能所有的I/O操作。
2.1.2 數據收發
數據發送主要由線控制寄存器、計數器、FIFO控制器、發送FIFO、發送移位寄存器等實現。在波特率設置好后,計數器統計幀數據的位數,確保發送的幀數據包括起始位、有效數據位、奇偶校驗位、停止位。發送FIFO可以暫存總線接口發送過來的數據,數據從發送FIFO移入到輸出移位寄存器,每16個時鐘時間向外發送一位數據,先發送起始位,有效數據從移位寄存器的高位逐位移出,最后輸出奇偶檢驗位和終止位。當發送FIFO內的數據低于FIFO設置觸發深度時,會觸發發送FIFO空中斷。
數據接收由線控制寄存器、計數器、接收FIFO和輸入移位寄存器等組成。接收數據的線控制寄存器、計數器功能同發送模塊。接收器始終監視著串行輸入端,將8位串行數據逐位接收進來。數據接收后會通過移位寄存器暫存在接收FIFO中, FIFO深度可支持1 B、32 B、64 B、128 B等。
2.1.3 中斷設計
串行接口IP核中包含一個8位的中斷使能寄存器(IER)和一個8位的中斷識別寄存器(IIR)。中斷使能寄存器可以使能5種中斷源,分別是:接收線狀態中斷、發送線狀態中斷、時間溢出中斷、發送寄存器空中斷、Modem狀態中斷等,共4個優先級。上電復位時默認狀態為全部中斷屏蔽。上電復位時IIR為 C1H,通過讀取IIR數值可獲取相應的4路中斷狀態信息。
2.2 總線轉換橋接邏輯設計
為了實現Wishbone和Avalon總線協議之間的協議轉換, 根據兩種片上總線的特性, 通過狀態機的使用來實現總線協議的轉換, 并使用軟件仿真的方法建立模型來驗證總線轉換橋的可用性。 Wishbone到Avalon總線轉換橋的總體組成原理如圖3所示。
Wishbone到Avalon總線轉換橋的基本功能是使得符合Wishbone總線體系結構的IP核可以在采用Avalon總線的NiosII 固核處理器片上系統中集成,從而實現對定制外設的訪問。接口支持32位總線操作。總線轉換橋由相對獨立的Avalon主從端口單元和Wishbone主從端口單元組成,每個單元都有一套完整的功能來支持Avalon總線和Wishbone端口上所掛載的IP核之間的交易,讀寫數據實行分開存儲,由配置和狀態寄存器控制操作模式和數據的輸入輸出。Avalon總線接口邏輯與Wishbone接口邏輯兩側都包含本地狀態機及其他控制邏輯,并且總線橋接口邏輯還包括地址譯碼、命令譯碼、接口控制狀態機、數據輸出MUX、奇偶校驗輸出、地址溢出檢查等功能模塊。
2.3 片上系統集成設計
基于NiosII固核處理器的片上系統集成是在SoPC Builder環境下完成的。片上系統集成主要完成對片上系統的定制、片上系統的資源分配、總線交換操作、中斷處理等幾個點關鍵技術點。
2.3.1 片上系統定制設計
片上系統的定制設計主要是完成片上系統集成所需要的處理器IP和外設IP的選型,是集成設計的第一步,設置系統主頻,同時可選配指令、數據Cache大小、外部數據指令、硬件乘法器、流水線支持、浮點運算支持等特性,并設置NiosII的Cache和CPU直接相連的存儲器。外設IP主要包括PCI總線接口IP、外部SRAM接口IP、外部Flash接口IP、外部GPIO接口IP、外部網絡接口IP、自定制的基于OpenCore的串行接口IP核、 CAN總線接口IP軟核等。
2.3.2 片上系統資源分配
SoPC為各IP自動分配了一個默認地址。考慮到資源有效利用,還需要對系統資源進行重配置,主要包括:對Boot Loader的存儲器選擇和設置Boot Loader在存儲器中的偏移;存放異常向量的存儲器選擇及其偏移量;各外設在Avalon總線上的偏移地址、中斷號的分配;PCI總線對片上 Avalon總線上設備的Memnry或I/O的空間以及地址映射;DMA傳輸配置;消息寄存器(Mailbox)雙口RAM的使用等。具體分配如下:
(1)考慮到可以通過PCI到Avalon總線的地址映射,從PCI通過BAR端口直接訪問兩路UART、CAN、GPIO等設備,根據各接口IP地址特性,其他外設在Avalon端地址分配不沖突的前提下,有效分配Avalon地址資源,并可以在PCI端直接使用BAR2/BAR3以及Memory或 I/O訪問此類外設。
(2)可以通過Auto Bass Address操作,解決外設的地址分配沖突問題。通過調整其他外設地址避免與Flash地址的沖突。
(3)可通過手動方式修改各個外設的中斷號,也可以通過Auto Assign IRQs 操作,自動分配中斷號(最低為0,最高31)。
2.3.3 總線數據交換操作
PCI總線與Avalon總線實現互相訪問,須先確定PCI核的資源配置,然后根據資源配置選擇總線數據操作方式。從PCI總線方向看PCI軟核主要有以下幾個部分:寄存器組、BAR0~BAR3、DMAC、PCI訪問端口。帶有PCI核的整體架構如圖4所示。
對于含PCI總線接口IP的片上系統總線操作,可以分為DMA方式和非DMA方式。非DMA方式即PCI總線通過PCI核的BAR空間訪問Avalon總線設備,而不經過DAMC的控制。非DMA方式的操作共分為4類,其中數據類操作兩類:PCI總線讀取Avalon總線設備的數據(支持連續數據)、 PCI總線將數據寫入Avalon總線設備(支持連續數據);配置類操作兩類:PCI總線讀取Avalon總線設備的寄存器、PCI總線寫入Avalon 總線設備的寄存器。數據類操作與配置類操作沒有本質上的區別,只是數據類操作支持連續數據操作,數據通道是雙口RAM,而配置類操作只支持單次操作,數據通道是MailBox組。PCI核的寄存器組包含兩類MailBox寄存器組:P-A MBR和A-P MBR,每類MailBox組含8個32位寄存器。
3 軟件設計
NiosII EDS(嵌入式開發包)基于開放式、可擴展Eclipse IDE的工程以及Eclipse C/C++開發工具提供了統一的開發平臺,適用于所有NiosII處理器。 NiosII EDS為基于NiosII的系統自動生成板級支持包(BSP),包括硬件抽象層(HAL)、可選的RTOS以及設備驅動。BSP提供了C/C++運行環境,可以避免與硬件直接打交道。所有軟件開發任務都可以在Nios II IDE下完成,包括編輯、編譯和程序調試。
基于NiosII固核處理器的片上系統的BSP(板級支持包)設計主要以開發板源碼為基礎進行修改移植。系統通過bootloader進行引導,采用 Altera的集成開發環境NiosII 7.2 IDE進行操作系統?滋C/OSII的開發。在開發過程中采用軟件模塊化、通用化的編程思想進行設計,具體實現的驅動包括NiosII的驅動、PCI驅動、串行驅動、CAN接口驅動等。首先創建IDE的管理工程,然后選擇目標硬件,IDE會建立系統庫,根據向導就可以創建一個NiosII C/C++應用工程。最后是建立C的源文件和頭文件,對C源文件和頭文件編輯好后可對工程進行編譯,編譯中出的錯誤與警告IDE都會給出提示。
4 仿真與驗證
為了驗證串行接口IP核設計功能,需進行仿真測試與驗證,其功能仿真如圖5所示。
在Quartues II環境下完成該IP核編輯、編譯、綜合布局布線,并完成IP核相應的Testbench測試源代碼的編輯、編譯,在Model Sim環境下進行功能與時序仿真。對IP核的測試可以分別對Wishbone總線接口核和內部功能核兩部分進行測試來完成。首先要對接口核部分測試,以確保能夠正常進行讀寫操作,然后對功能核的每個功能模塊和寄存器進行測試驗證。結果證明其IP功能齊備,符合設計要求。
本文詳細介紹了基于NiosII處理器的智能多接口片上系統設計與實現,采用Altera公司Cyclonell系列FPGA芯片EP2C35F672I8實現設計時,占用芯片資源小于50%。
隨著超大規模片上系統的設計需求不斷增加,其對IP核的性能、功能、可重用性以及靈活性等方面的要求將越來越高,而目前Xilinx、Altera等公司都已經推出了工作頻率更高、布線時延更小、容量更大的新型FPGA芯片。可以將處理器核、總線接口核和專用算法核等集成在頻率更高、性能更強大的 FPGA芯片上。
評論
查看更多