隨著產(chǎn)品設(shè)計復(fù)雜性的增加,需要使用集成組件(如ASSP)來滿足設(shè)計上的要求。幾年前,工程師會針對處理器、存儲器和外設(shè)選擇單獨的組件,然后通過分立邏輯器件將這些元素拼合到一起。后來,他們會搜索ASSP處理系統(tǒng)目錄,試圖找出最相稱的組合,以滿足系統(tǒng)要求。當(dāng)他們需要其他邏輯或外設(shè)時,通常會將某個FPGA與某個ASSP配對來完成解決方案。的確,調(diào)查表明FPGA在目前全部嵌入式系統(tǒng)中的使用比例占50%〜70%。
在過去的幾年中,F(xiàn)PGA的尺寸有了增加,在單個器件中提供了足夠的空間來容納完整的處理器和邏輯系統(tǒng)。現(xiàn)在,軟件工程師需要為FPGA內(nèi)部的處理器開發(fā)和調(diào)試代碼。在有些情況下,他們害怕這么做。不過,通過掌握FPGA基礎(chǔ)知識并了解如何創(chuàng)建和調(diào)試用于FPGA嵌入式處理器的代碼可以讓他們坦然面對。
FPGA是什么?
現(xiàn)場可編程門陣列(field-programmable gate array,F(xiàn)PGA)是一種集成電路,其中包含的邏輯可以在制造后進行配置和連接(即“現(xiàn)場模式”)。在這方面,過去工程師會從產(chǎn)品目錄中購買各種邏輯器件,然后通過印刷電路板上的連接將它們組裝成一個邏輯設(shè)計,而現(xiàn)在的硬件設(shè)計人員可以在單個器件中實施完整的設(shè)計。形式最簡單的FGPA中包括:
● 由與、或、非及其他許多邏輯函數(shù)組成的可配置邏輯塊
● 使邏輯塊可以連接到一起的可配置互連功能
● I/O接口
利用這些元素,用戶可以創(chuàng)建任意邏輯設(shè)計。
硬件工程師通常用HDL(一般是Verilog或VHDL)編寫代碼,然后將設(shè)計匯編到一個對象文件中,該文件可加載到器件中供執(zhí)行。在表面上,HDL程序可能看起來很像C語言之類的高級語言。
FPGA的技術(shù)優(yōu)勢
由于不使用ASIC以及沒有與其關(guān)聯(lián)的高額模板費用,F(xiàn)PGA是實現(xiàn)數(shù)據(jù)處理元素最靈活且高性價比的方法。FPGA由于采用了靈活的架構(gòu),能夠允許硬件設(shè)計人員實現(xiàn)同時包含并行和串行元素的處理系統(tǒng)。這樣一來,設(shè)計人員可以針對性能和延遲對系統(tǒng)進行優(yōu)化。通常,與使用通用處理器可獲得的性能相比,這些數(shù)據(jù)處理系統(tǒng)獲得的性能級別更高,但成本卻更低。
您可以將外部微處理器耦合到FPGA中的某個數(shù)據(jù)處理系統(tǒng)上,然后用它進行控制。但是,在FPGA中嵌入一個處理器可以提供幾項優(yōu)勢。一個內(nèi)部處理器可以極大地減少處理器與數(shù)據(jù)處理系統(tǒng)之間的延遲,能夠消除大量處理器周期。處理器與數(shù)據(jù)處理系統(tǒng)之間的通信信道可以是32位或更高,擁有更多的尋址和控制線纜。對于一個外部處理器,這些增加的線纜可能需要更大的封裝來容納處理器和FPGA,從而抬高了系統(tǒng)成本?;蛘?,也可以使用PCI Express(PCIe)來減少引腳的數(shù)量。而不幸的是,由于這是相對較新的接口,并非所有處理器和FPGA都支持PCIe。雖然PCIe具有與生俱來的高性能,但它是串行接口,因此會增加處理器與數(shù)據(jù)處理系統(tǒng)之間的延遲。
在FPGA中同時實現(xiàn)處理器與數(shù)據(jù)處理元素可以減少元件數(shù)量,縮小電路板空間,有時還能降低功耗。這可能產(chǎn)生一個成本顯著降低的解決方案。FPGA中可提供固化的處理器實現(xiàn)(如ARM Cortex-A9處理器)或軟核實現(xiàn)(如Xilinx MicroBlaze處理器)?;贔PGA的處理器還可根據(jù)應(yīng)用的要求進行配置?;贔PGA的系統(tǒng)支持系統(tǒng)級的調(diào)優(yōu):它可以靈活地選擇將計算功能在處理器或FPGA邏輯中實現(xiàn)。
實現(xiàn)技術(shù)
FPGA嵌入式處理系統(tǒng)的實現(xiàn)方法有很多種,但一般可將其分成三類:從頭組裝系統(tǒng),使用向?qū)⑵浣M合到一起,或者通過修改現(xiàn)有設(shè)計實現(xiàn)。
FPGA工具可支持您從頭組裝一個處理系統(tǒng),方法是:從列表中選擇一個必需的IP,然后通過總線和線纜連接該IP。這樣的組裝雖然有效,但可能會耗費時間。
為了加快速度,F(xiàn)PGA工具還允許通過向?qū)Э焖俳M裝微處理器系統(tǒng)。通過使用下拉列表或復(fù)選框,可以輕松指定目標部件以及所需的處理器和外設(shè)。圖1展示了向?qū)拥慕榻B窗口以及向?qū)傻淖罱K系統(tǒng)。類似地,也可以使用 MATLAB?軟件之類的工具,快速地將數(shù)據(jù)處理系統(tǒng)與用于控制的處理器總線接口組裝起來。然后,只需匹配總線接口,就可將處理器與數(shù)據(jù)處理系統(tǒng)連接起來。
嵌入式處理系統(tǒng)的第三種實現(xiàn)方法是修改現(xiàn)有的參考設(shè)計,或?qū)⑵涮砑拥浆F(xiàn)有的硬處理器系統(tǒng)上。FPGA參考設(shè)計和硬處理器系統(tǒng)會繼續(xù)演變,其中許多會變得更加側(cè)重于市場。在許多情況下,設(shè)計均非常全面,無須硬件設(shè)計人員增加任何額外的組件。軟件設(shè)計人員通常會找到完整的驅(qū)動程序,以及為這些參考設(shè)計預(yù)置的操作系統(tǒng)。
前面提及的前兩種方法都是創(chuàng)建處理器系統(tǒng)的有效方法。但是,第三種方法從現(xiàn)有的經(jīng)過驗證的參考設(shè)計入手,因此可以極大地減少硬件和軟件工程師的開發(fā)時間。
澄清誤解
在工程設(shè)計界已經(jīng)出現(xiàn)了一些有關(guān)在FPGA中開發(fā)處理器代碼很困難的誤解。我們希望能澄清這些誤解。
誤解:在FPGA中為處理器編寫代碼很困難。
事實:大多數(shù)FPGA嵌入式處理開發(fā)都是在現(xiàn)代化軟件開發(fā)環(huán)境中用C或C++完成的。
許多FPGA供應(yīng)商現(xiàn)在都支持使用Eclipse進行軟件開發(fā)。Eclipse是一種支持插件的靈活軟件開發(fā)環(huán)境,提供文本編輯器、編譯器、鏈接程序、調(diào)試器、跟蹤模塊和代碼管理等功能。
作為一個開放的環(huán)境,Eclipse擁有一個龐大的開發(fā)人員社區(qū),不斷地增加新功能。例如,如果程序員不喜歡提供的編輯器,他們可以安裝一個更符合其需求的編輯器。
誤解:FPGA沒有像ASSP那樣的處理器系統(tǒng)。
事實:現(xiàn)在已經(jīng)有預(yù)置的FPGA軟嵌入式處理器設(shè)計,也有具備像ASSP那樣的外設(shè)集的硬處理器設(shè)計。
包含軟處理器和硬處理器的FPGA增加了一個額外的功能。FPGA嵌入式軟處理器參考設(shè)計整合了32位RISC處理器、內(nèi)存接口以及符合行業(yè)標準的外設(shè)。此類處理器的靈活特性允許用戶用邏輯換取額外的性能功能,如增加支持最新操作系統(tǒng)的MMU。眾多的FPGA選擇使用戶可以選擇某個處理器配置、外設(shè)、數(shù)據(jù)處理邏輯和邏輯性能級別來滿足其系統(tǒng)要求。預(yù)置的類似于ASSP的參考設(shè)計使得軟件設(shè)計人員可以立刻開始編寫代碼,不一定需要硬件工程師先實現(xiàn)一個處理器系統(tǒng)。在許多情況下,預(yù)置的設(shè)計會滿足嵌入式處理器系統(tǒng)的要求,從而無須硬件工程師來進行進一步的處理器系統(tǒng)設(shè)計。在少數(shù)情況下,硬件工程師擁有一個出色的平臺,可以在上面增加外設(shè)以及連接定制的硬件加速器。
誤解:使用FPGA中的處理器調(diào)試代碼很困難。
事實:FPGA嵌入式處理器的軟件調(diào)試跟非嵌入式處理器的調(diào)試一樣方便。調(diào)試器支持下載代碼、運行程序、在源代碼和對象代碼級別單步執(zhí)行、設(shè)置斷點、檢查存儲器和寄存器。另外,還有其他工具可用于對代碼進行特性分析和跟蹤。
誤解:不支持我喜愛的操作系統(tǒng)。
事實:大多數(shù)常見的嵌入式處理器都支持最常見的操作系統(tǒng),并且這個名單還在不斷增加中。Xilinx MicroBlaze支持Linux、ThreadX、MicroC/OS-II和eCos等操作系統(tǒng)。
誤解:沒有驅(qū)動程序。
事實:FPGA嵌入式處理器有一個很大的外設(shè)庫,其中包含了驅(qū)動程序。表1是一個有代表性的名單,其中列出了FPGA軟處理器可用的一些軟外設(shè)。所有這些設(shè)備都存在相應(yīng)的驅(qū)動程序。
誤解:硬件工程師必須先建立它之后我才能編寫代碼。
事實:可以使用經(jīng)過測試的預(yù)置處理器系統(tǒng)設(shè)計,因此可以立即進行軟件開發(fā)。
這些預(yù)置的類似ASSP的處理器系統(tǒng)中包含處理器、內(nèi)存控制器和內(nèi)存、閃存控制器以及UART、GPIO和以太網(wǎng)接口等外設(shè)。這些系統(tǒng)在交付時都帶有參考軟件設(shè)計實例,其中包括對Linux引導(dǎo)的展示。
誤解:無法使用FPGA嵌入式處理器進行特性分析或跟蹤。
事實:特性分析和跟蹤工具也是可以使用的。開發(fā)人員可以通過特性分析了解處理器在各個函數(shù)上所用的時間,以及對任何指定函數(shù)的調(diào)用次數(shù)。
誤解:FPGA軟件開發(fā)工具價格太貴了。
事實:ASSP和FPGA供應(yīng)商為其嵌入式軟件開發(fā)功能提供的定價在200美元到500美元之間。此外,許多供應(yīng)商還提供試用版本以及免費或功能受限的版本,另外還有打折的評估套件。
創(chuàng)建和調(diào)試代碼
FPGA嵌入式處理器系統(tǒng)的軟件開發(fā)流程遵循一些常規(guī)步驟:
● 創(chuàng)建軟件開發(fā)工作區(qū)并導(dǎo)入硬件平臺。
● 創(chuàng)建軟件項目和板支持包。
● 創(chuàng)建軟件。
● 運行并調(diào)試軟件項目。
可選步驟:對軟件項目進行特性分析。
步驟3、4和5是大多數(shù)開發(fā)人員都熟悉的。有些開發(fā)人員可能不熟悉步驟1和2,但這些步驟都很明確。我們將采用Eclipse開發(fā)環(huán)境作為例子,更具體地了解每個步驟。
創(chuàng)建工作區(qū)并導(dǎo)入硬件平臺
啟動Eclipse以后,系統(tǒng)會提示用戶要使用的工作區(qū)。工作區(qū)就是一個目錄路徑,用于存儲項目文件。接著,用戶指定硬件平臺(設(shè)計)。硬件開發(fā)工具會自動生成此文件。該文件對處理器系統(tǒng)進行描述,其中包括存儲器接口和外設(shè)以及存儲器映射。該文件是硬件開發(fā)工具的輸出內(nèi)容,硬件工程師通常會向軟件開發(fā)人員提供此文件。指定以后,就會導(dǎo)入硬件平臺,此步驟也宣告完成。
創(chuàng)建軟件項目和板級支持包
板級支持包 (board support package,BSP)包含供軟件應(yīng)用使用的庫和驅(qū)動程序。軟件項目是軟件應(yīng)用源和設(shè)置。
在針對Xilinx項目定制的Eclipse版本中,可以選擇“File(文件)”→“New(新建)”→“Xilinx C Project(Xilinx C項目)”。對于Xilinx C項目,Eclipse會自動創(chuàng)建Makefiles,將源文件編譯成對象文件,并將這些對象文件鏈接到一個可執(zhí)行文件中。在此步驟中,用戶可以定義“Project Name(項目名稱)”,通過提供在步驟1中創(chuàng)建的硬件平臺名稱將其與硬件平臺關(guān)聯(lián),然后指定項目名稱。
接下來,系統(tǒng)會確認BSP的生成情況,并根據(jù)定義的硬件平臺和操作系統(tǒng)自動加載適用的驅(qū)動程序。隨后會編譯這些驅(qū)動程序,生成BSP。
創(chuàng)建軟件
此時可以導(dǎo)入軟件實例,或者從頭創(chuàng)建代碼。保存代碼時,Eclipse會自動編譯并鏈接代碼,并報告任何出現(xiàn)的編譯器或鏈接程序錯誤。
運行并調(diào)試軟件項目
使用FPGA時,在執(zhí)行代碼之前必須完成一個步驟:為FPGA編程。在Eclipse中,只需選擇“Tools(工具)”→“Program FPGA(FPGA編程)”。此步驟將獲取硬件工程師已創(chuàng)建的硬件設(shè)計,并將其下載到FPGA上。該作業(yè)完成后,就可以選擇要構(gòu)建的軟件類型了。“Debug(調(diào)試)”會禁用代碼優(yōu)化并插入調(diào)試符號,而“Release(發(fā)布)”則會啟用代碼優(yōu)化。若要進行特性分析,可使用-pg編譯選項。
最后,通過選擇“Run(運行)”并定義運行配置的類型和編譯器選項,可以運行代碼。如果選擇了“Release(發(fā)布)”,則處理器將立即開始執(zhí)行代碼。否則,處理器將執(zhí)行一些引導(dǎo)指令,并將在源代碼的第一行處停止,Eclipse中將出現(xiàn)調(diào)試視圖。
調(diào)試視圖會顯示源代碼或?qū)ο蟠a、寄存器、存儲器和變量。可以在源代碼或?qū)ο蟠a級別單步執(zhí)行代碼,并可以設(shè)置代碼執(zhí)行的斷點。
對軟件項目進行特性分析
如果您需要,可以在此時對代碼進行特性分析,查看函數(shù)調(diào)用的次數(shù),并可查看用在任何指定函數(shù)上的時間百分比。圖3展示了包含特性分析器結(jié)果的Eclipse特性分析視圖實例。
FPGA的優(yōu)勢
在成本、能耗、尺寸和整體系統(tǒng)效率方面,F(xiàn)PGA嵌入式處理器正在成為主要的設(shè)計選擇。好消息是,軟件工程師不需要將FPGA嵌入式處理器看得很神秘,或者不再比外部處理器更難以編程。
FPGA供應(yīng)商提供的是符合行業(yè)標準的開發(fā)環(huán)境(如Eclipse),成本上有競爭力,并針對FPGA嵌入式處理進行了定制。在這些環(huán)境中,用戶可以創(chuàng)建、編譯、鏈接和下載代碼,并可像其以前對待外部處理器一樣,以相同的方式調(diào)試其設(shè)計。借助預(yù)置的處理器參考設(shè)計,軟件工程師可以立即開始編寫代碼并進行測試,不一定需要硬件工程師提供最終設(shè)計。最后,FPGA嵌入式處理器擁有豐富的IP庫、驅(qū)動程序和操作系統(tǒng)支持。