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