嵌入式SoPC,以太網(wǎng),接口設備
SoC(片上系統)的概念已日益普及,而隨著(zhù)FPGA技術(shù)的迅速發(fā)展,可編程系統芯片(SoPC)作為一種特殊的嵌入式微處理器系統,融合了SoC和 FPGA各自的優(yōu)點(diǎn),并具備軟硬件在系統可編程、可裁減、可擴充、可升級的功能,已逐漸成為一個(gè)新興的技術(shù)方向。SoPC的核心是在FPGA上實(shí)現的嵌入式微處理器核,目前主要有Xilinx公司的32位軟核MicroBlaze、32位PowerPC系列處理器硬核PowerPC 405,以及Altera公司的Nios系列微處理器軟核等。 本文介紹的系統是一個(gè)以PowerPC 405為微處理器,基于VME總線(xiàn)的以太網(wǎng)接口設備,它通過(guò)以太網(wǎng)和 VME總線(xiàn)接口,實(shí)現VME系統與外部局域網(wǎng)的實(shí)時(shí)數據交換。
本文引用地址:http://dyxdggzs.com/article/201809/388468.htm硬件開(kāi)發(fā) 開(kāi)發(fā)采用Xilinx公司的EDK7.1(嵌入式開(kāi)發(fā)套件)和ISE7.1工具軟件。EDK工具包中集成了硬件平臺生成器(Platgen)、軟件平臺生成器(Libgen)、仿真模型生成器(Simgen)、軟件編譯器(Mb-gcc/ppc-gcc)和軟件調試工具(Mb-gdb/ppc-gdb) 等,通過(guò)提供的集成開(kāi)發(fā)環(huán)境XPS,用戶(hù)可以調用上述所有工具,來(lái)完成嵌入式系統開(kāi)發(fā)的整個(gè)流程。
首先在XPS界面環(huán)境下生成硬件系統框架并添加所需的IP核,也可以用文本編輯器直接編寫(xiě)硬件描述文件 (.MHS文件),再調用Platgen將其生成嵌入式處理系統的網(wǎng)表文件(.NGC文件);然后通過(guò)系統生成或手工編輯的軟件描述文件(.MSS文件) 來(lái)設置系統軟件配置,并調用Libgen生成驅動(dòng)層和庫。雖然EDK的IP庫中有一些很有用的功能模塊和外設接口的IP核,如DCM(數字時(shí)鐘管理器)、處理器復位、PLB/OPB總線(xiàn)接口、外部存儲控制器(EMC)、UART、GPIO、中斷控制器、定時(shí)器等,充分利用這些資源就可以構建一個(gè)較為完善的嵌入式微處理器系統,但是對于許多有特殊專(zhuān)用電路的嵌入式計算機系統的應用還是不夠的。
如何將用戶(hù)專(zhuān)用電路設計到EDK系統中,一般有兩種方法,第一種是將EDK工程作為一個(gè)子系統在XPS中用Export to PorjNav生成ISE工程,然后在ISE中將專(zhuān)用電路和處理器子系統(system.vhd)合成為頂層HDL文件 (system_stub.vhd)后,在ISE中完成綜合布線(xiàn),最后在XPS中用Import from PorjNav得到硬件的.bit文件,便可以回到XPS中完成和應用軟件的合成、下載和調試了。第二種方法是將專(zhuān)用電路設計成為用戶(hù)自定義的IP Core,然后直接在系統中調用來(lái)實(shí)現。自定義的IP Core用HDL設計并要滿(mǎn)足EDK的規范,如有專(zhuān)門(mén)目錄結構和處理器外設定義文件(.MPD)、外設分析定義文件(.PAO)等。如果自定義的IP Core要具有軟件驅動(dòng),那設計還要完全符合相應的PLB或OPB總線(xiàn)接口規范。完成了硬件和驅動(dòng)的設計后,就可以在XPS工程中添加應用軟件項目并編寫(xiě)應用軟件,然后調用處理器對應的編譯器編譯并和硬件綜合后生成的.bit文件合成后下載到目標板便可以進(jìn)行調試了。
本系統硬件組成框圖如圖1所示。本設計選用Virtex-II Pro系列FPGA芯片XC2VP40,將系統的程序存儲器和數據存儲器都放在片內用Block RAM來(lái)實(shí)現,在系統中添加DCM模塊,將外部參考時(shí)鐘4倍頻提供給PowerPC 405作處理器時(shí)鐘,并分頻后再送給OPB總線(xiàn)作總線(xiàn)時(shí)鐘,降低慢速外設的總線(xiàn)速度,使系統搭配更合理。
圖1 系統硬件組成框圖
PowerPC 405是此嵌入式系統的核心,它通過(guò)PLB總線(xiàn)實(shí)現和程序存儲器和數據存儲器的快速通道,并通過(guò)PLB-OPB橋實(shí)現了片上的OPB總線(xiàn),然后通過(guò)OPB總線(xiàn)進(jìn)行各種外設的擴展,OPB外設包括一個(gè)RS232串口,一個(gè)OPB_EMC用于擴展以太網(wǎng)控制器芯片,一個(gè)GPIO作以太網(wǎng)控制器輸出的中斷請求,一個(gè)中斷控制器OPB_INTC將GPIO輸入的外部中斷通知PowerPC 405并可以設置優(yōu)先級,還有一個(gè)用戶(hù)自定義的IP Core用于實(shí)現和VME總線(xiàn)的接口電路。 PowerPC 405 是專(zhuān)門(mén)為嵌入式應用而設計的高性能32位PowerPC系列處理器芯核,對于Virtex-II Pro系列FPGA,其實(shí)現型號為PowerPC 405D5。
PLB是處理器本機總線(xiàn),它為指令和數據一側提供獨立的32位地址和64位數據總線(xiàn)。PLB總線(xiàn)架構支持多主從設備,每一個(gè)PLB主控機通過(guò)獨立的地址總線(xiàn)、讀數據總線(xiàn)和寫(xiě)數據總線(xiàn)與PLB連接,有一個(gè)中央判決機構來(lái)授權對PLB的訪(fǎng)問(wèn)以允許主控機通過(guò)競爭來(lái)獲得總線(xiàn)的所有權。OPB是片上外設總線(xiàn),提供分離的32位地址總線(xiàn)和32位數據總線(xiàn),一般用來(lái)訪(fǎng)問(wèn)低速和低性能的系統資源。它是一種完全同步總線(xiàn),但不直接連接到處理器內核,處理器內核通過(guò)“PLB to OPB”橋和OPB總線(xiàn)來(lái)訪(fǎng)問(wèn)OPB接口外設。
網(wǎng)絡(luò )控制器采用Cirrus Logic公司的通用單片10/100M以太網(wǎng)控制器CS8900A,該芯片完全遵從與IEEE 802.3以太網(wǎng)標準,支持完全的全雙工操作。應用EDK的OPB_EMC IP可以很方便地將CS8900A擴展為系統OPB總線(xiàn)上的一個(gè)設備,只要將EMC端口的地址、數據總線(xiàn)以及控制信號分別接到CS8900A的地址、數據總線(xiàn)和控制端口上,并將EMC的時(shí)序參數設置成與CS8900A手冊上要求的一致就可以了。
另外將CS8900A的中斷輸出INTRQ作為一個(gè)GPIO引入系統以實(shí)現以太網(wǎng)的中斷服務(wù)功能。 自定義的IP Core內容如圖2所示,它用FPGA內的Block RAM資源實(shí)現64KB的雙口RAM用來(lái)完成和VME總線(xiàn)上其他設備的通信和數據交換。我們用上述的第二種方法來(lái)實(shí)現將用戶(hù)專(zhuān)用電路嵌入微處理器系統中,自定義的IP主要包括OPB總線(xiàn)接口和用戶(hù)電路兩部分,我們用EDK提供的OPB總線(xiàn)的IPIF模板修改后,作為自定義IP的總線(xiàn)接口,64KB的雙口 RAM和VME總線(xiàn)接口是真正的用戶(hù)電路。
圖2 自定義的IP Core結構 軟件開(kāi)發(fā)
嵌入式開(kāi)發(fā)環(huán)境EDK(Embedded Development Kit)將軟件開(kāi)發(fā)分為兩大部分,一是底層系統軟件的開(kāi)發(fā),主要完成BSP(板級支持包)的功能;另一部分則是用戶(hù)應用軟件的開(kāi)發(fā)(包括用戶(hù)硬件驅動(dòng)及用戶(hù)上層應用軟件)。由于EDK中帶有許多IP核以及相應的驅動(dòng)軟件,因此底層系統軟件的開(kāi)發(fā)大部分可以借助EDK集成開(kāi)發(fā)環(huán)境來(lái)完成的,如操作系統的選擇、設備驅動(dòng)程序的選擇、中斷/異常處理例程的設置、操作系統參數設置等在內的各種系統級軟件參數的設置。而用戶(hù)應用軟件的開(kāi)發(fā)由于有底層驅動(dòng)的隔離,可移植性好。整個(gè)用戶(hù)軟件的開(kāi)發(fā)及調試工作都可以在EDK中完成。
● 底層系統軟件開(kāi)發(fā)
在本設計中,沒(méi)有使用操作系統,使用所謂的standalone模式,即EDK僅提供硬件初始化及引導代碼。此外還需要對GPIO、EMC、RS232、中斷控制器等一些外設生成底層驅動(dòng),這些都可以通過(guò)在EDK集成環(huán)境XPS中選擇菜單Project->Software Platform Settings的對話(huà)框進(jìn)行設置,如圖3所示。其實(shí)質(zhì)是自動(dòng)修改工程的.MSS文件。例如中斷函數的處理例程可在如圖4所示的界面中加以設置。也可以手工編輯.MSS文件如下設置: PARAMETER int_handler = CS8900A_INT_HANDLER, int_port = IP2INTC_Irpt
圖3 在XPS中設置操作系統和驅動(dòng)程序
圖4 在XPS中設置中斷服務(wù)例程
設置完成后在XPS中運行Tools->Generate Libraries and BSPs將調用LibGen自動(dòng)生成驅動(dòng)庫文件,這些CPU和外設驅動(dòng)庫的設置、操作函數實(shí)現或定義可在工程項目根目錄下的以處理器實(shí)例名為名字的目錄下的libsrc目錄下相應的各模塊子目錄中找到,參考其實(shí)現有助于深刻理解事實(shí)上發(fā)生的操作。
例如中斷向量表可在中段向量控制器模塊子目錄(本例中為 intc_v1_00_csrc)下的xintc_g.c文件中找到。
● 用戶(hù)軟件開(kāi)發(fā)
用戶(hù)軟件主要是對網(wǎng)絡(luò )控制器、GPIO、RS232串口等的操作,其中控制CS8900A的程序是重要部分,它要完成TCP/IP協(xié)議。CS8900A所有的控制寄存器和數據寄存器都映射在被稱(chēng)為PacketPage的片上4K地址空間內,這4K空間可映射到主機地址空間中(存儲器模式),或通過(guò)8個(gè)16 位I/O口進(jìn)行存取(I/O模式)。本設計中CS8900A工作于I/O模式,通過(guò)EDK的OPB_EMC IP作為OPB總線(xiàn)上的一個(gè)設備,并給EMC控制器和所映射的設備分配操作地址空間,在程序中用 Xuint32 XIo_In32(XIo_Address InAddress); void XIo_Out32(XIo_Address OutAddress, Xuint32 Value); 讀寫(xiě)映射的設備,這兩個(gè)I/O函數同*pDestMem = Value(直接讀寫(xiě)存儲器操作)的差別在于前者做了讀寫(xiě)同步(調用eieio匯編指令)。參考芯片手冊編寫(xiě)CS8900A的驅動(dòng),實(shí)現基本I/O操作 CS8900A_SendFrame和CS8900A_RecvFrame。EDK中有需付費的以太網(wǎng)IP CORE并附帶有一些TCP/IP協(xié)議棧,該協(xié)議棧實(shí)現了大部分常用功能,但也有一些重要功能并未實(shí)現,例如TCP包的超時(shí)未達重發(fā),收發(fā)操作的中斷工作方式。通過(guò)修改、增加和完善這些軟件包,實(shí)現了真正面向用戶(hù)更高層應用軟件的網(wǎng)絡(luò )編程接口。
● 軟件開(kāi)發(fā)中的部分問(wèn)題
軟件開(kāi)發(fā)過(guò)程中遇到的幾個(gè)主要問(wèn)題歸納如下:
(1)IEEE 802.3網(wǎng)絡(luò )及網(wǎng)絡(luò )控制器CS8900A采用的均是Little Endian編碼,而XC2VP40內含的處理器PowerPC 405D5采用的是Big Endian編碼方式,因此在數據I/O過(guò)程中需要做一下轉換。
(2)可通過(guò)編寫(xiě)鏈接控制腳本文件控制應用程序的鏈接過(guò)程,從而控制程序映像在存儲器中的重定位過(guò)程。這在FPGA這種存儲器資源有限的環(huán)境中有時(shí)很有用。
(3)要將EDK提供的默認bootloop程序打包到硬件初始化流中,這樣做的目的是提供默認的CPU復位后運行程序,保證CPU處在可預知的狀態(tài),而不是因為執行了存儲器中的隨機代碼而處于一種未知的狀態(tài)。
系統調試方法 由于PowerPC 405處理器核中已包含調試模塊,并用JTAG端口引出,只要在系統中添加一個(gè)叫做JTAGPPC的IP模塊并和PowerPC 405相連便可將其調試端口串入FPGA的JTAG鏈中,這樣只需使用FPGA本身的下載電纜和JTAG接口便可完成系統軟件調試而不需要增加額外電路。
EDK提供的軟件調試工具主要有XMD和GDB。值得一提的是利用XMD下載可執行程序映像時(shí)還會(huì )顯示各程序段的重定位情況,在發(fā)生錯誤時(shí)會(huì )報告錯誤,諸如要求的地址空間大于實(shí)際提供的地址空間等錯誤,而這在EDK集成環(huán)境下是看不到的。在存在多種類(lèi)型存儲器資源的情況下,編寫(xiě)鏈接控制腳本文件控制重定位過(guò)程可能能夠解決上述某地址空間不夠的問(wèn)題。網(wǎng)絡(luò )通信部分的調試主要由Sniffer軟件輔助完成。
GDB是EDK附帶的GNU的主機方圖形界面調試工具,它通過(guò)和XMD通信完成圖形界面調試功能,此時(shí)XMD則扮演了一個(gè)主機方調試代理的角色,所有的調試通信是由XMD同目標機通信完成的。
結語(yǔ)
SoPC使得硬件設計能真正實(shí)現象搭積木一樣方便迅速,而利用EDK開(kāi)發(fā)工具就可以實(shí)現一個(gè)基于FPGA的嵌入式系統的軟硬件一體化的開(kāi)發(fā),的確大大提高了嵌入式系統的開(kāi)發(fā)效率,但是目前它還有許多不夠完善的方面。
首先是系統設計對設計工具軟件的依賴(lài)性很大,而這些軟件還有許多有待修正完善的地方,設計師無(wú)法避免將在使用熟悉軟件方面花許多時(shí)間。其次,IP Core的不斷豐富和完善是SoPC的基礎,昂貴的付費IP核不利于此技術(shù)的推廣,尤其在國內,而要設計驗證用戶(hù)自己的IP Core對設計者的要求較高。如今一個(gè)完善的嵌入式系統都有實(shí)時(shí)操作系統在運行,SoPC要成為主流也需要更豐富的RTOS的支持。
評論