設(shè)計(jì)工程師通常使用C等編程語(yǔ)言來(lái)開(kāi)發(fā)基于微處理器或微控制器架構(gòu)的嵌入式系統(tǒng)。 C語(yǔ)言的普及催生了用于程序庫(kù)、編譯器和操作系統(tǒng)等工具的大型技術(shù)生態(tài)系統(tǒng)?,F(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)是嵌入式領(lǐng)域的新技術(shù),采用硬件描述語(yǔ)言來(lái)創(chuàng)建可重配置數(shù)字邏輯。為了描述硬件和利用數(shù)字電路的高性能并行性,硬件描述語(yǔ)言提供的語(yǔ)法與軟件工程師習(xí)慣使用的語(yǔ)法截然不同。通過(guò)提供包含軟件工程師熟悉的編程構(gòu)造的FPGA開(kāi)發(fā)環(huán)境,在設(shè)計(jì)中使用FPGA嵌入式軟件工程師就可以充分發(fā)揮FPGA的優(yōu)勢(shì)。
使用NI硬件的嵌入式系統(tǒng)設(shè)計(jì)工程師在構(gòu)建其系統(tǒng)時(shí)可以選擇一系列編程語(yǔ)言和工具。閱讀本文檔,了解如何編程N(yùn)I嵌入式系統(tǒng)以及下載您需要的軟件工具。
1. NI嵌入式系統(tǒng)架構(gòu)介紹
NI可重配置I/O (RIO)平臺(tái)包括兩個(gè)可編程硬件:運(yùn)行實(shí)時(shí)操作系統(tǒng)(RTOS)的微處理器和FPGA。這使您可以根據(jù)每個(gè)任務(wù)的重要性,在FPGA和RTOS之間為代碼分區(qū)。
?
圖1. NI嵌入式硬件架構(gòu)
NI可重配置硬件
在嵌入式系統(tǒng)設(shè)計(jì)中引入FPGA,使得無(wú)需自定義ASIC設(shè)計(jì)就可以創(chuàng)建高性能數(shù)字邏輯。FPGA的開(kāi)發(fā)通常是采用基于文本的硬件描述語(yǔ)言來(lái)實(shí)現(xiàn),如VHDL或Verilog,這些是由數(shù)字設(shè)計(jì)工程師編寫(xiě)。但是由于這些硬件描述語(yǔ)言的語(yǔ)法過(guò)于復(fù)雜,要利用FPGA設(shè)計(jì)的全部功能非常困難。這一點(diǎn)充分體現(xiàn)在嵌入式行業(yè)亟需尋找更高層次抽象的FPGA設(shè)計(jì),如C-to-gates工具或LabVIEW FPGA的G語(yǔ)言等圖形化編程語(yǔ)言。
?
圖2. NI嵌入式系統(tǒng)軟件架構(gòu)
NI嵌入式軟件架構(gòu)
實(shí)時(shí)操作系統(tǒng) - 您可以靈活地選擇使用LabVIEW Real-Time、C / C+ +、文本數(shù)學(xué)或這些語(yǔ)言的組合來(lái)編程嵌入式處理器。您可以從多個(gè)軟件架構(gòu)中進(jìn)行選擇,使您既可以集成以往項(xiàng)目的現(xiàn)存源代碼,同時(shí)還可利用LabVIEW的特性來(lái)節(jié)省開(kāi)發(fā)時(shí)間。
FPGA - LabVIEW提供了一種全功能的編程語(yǔ)言,因此如果您熟悉基于文本的傳統(tǒng)編程語(yǔ)言,如C,您就可以放心地使用環(huán)境,同時(shí)利用新硬件平臺(tái)——FPGA的優(yōu)勢(shì)。
2. 選擇NI嵌入式硬件平臺(tái)
NI RIO硬件提供了最好的現(xiàn)成平臺(tái)來(lái)幫助您完成任何的控制和監(jiān)測(cè)任務(wù)。NI基于平臺(tái)的方法使得小團(tuán)隊(duì)能夠自信地構(gòu)建創(chuàng)新型嵌入式系統(tǒng),而且不需要浪費(fèi)開(kāi)發(fā)時(shí)間和成本在自定義設(shè)計(jì)上。
?
3. NI LabVIEW for FPGA Development
LabVIEW編程環(huán)境顯然非常適用于FPGA編程,因?yàn)樗汕逦仫@示并行機(jī)制和數(shù)據(jù)流。使用?LabVIEW FPGA Module,擅長(zhǎng)C語(yǔ)言的工程師和科學(xué)家也可以在他們的設(shè)計(jì)中利用FPGA,而無(wú)需學(xué)習(xí)硬件設(shè)計(jì)。此外,F(xiàn)PGA接口C API提供了FPGA和實(shí)時(shí)應(yīng)用程序之間的通信層,用于實(shí)現(xiàn)I/O控制和數(shù)據(jù)流。有了這個(gè)API,您可以使用LabVIEW圖形化工具對(duì)FPGA進(jìn)行編程,并選擇LabVIEW或C / C+ +工具來(lái)對(duì)系統(tǒng)內(nèi)的處理器進(jìn)行編程。?
LabVIEW FPGA可幫助您創(chuàng)建自定義測(cè)量和控制硬件而無(wú)需底層硬件描述語(yǔ)言或板卡級(jí)設(shè)計(jì)。您可以使用此自定義硬件來(lái)實(shí)現(xiàn)獨(dú)特的定時(shí)和觸發(fā)程序、超高速控制、數(shù)字協(xié)議連接、數(shù)字信號(hào)處理(DS),P以及許多其他需要高速硬件可靠性和嚴(yán)格確定性的應(yīng)用。
?
?
圖3. LabVIEW FPGA中定時(shí)循環(huán)
4. C/C++實(shí)時(shí)應(yīng)用程序開(kāi)發(fā)
程序員有幾種不同的軟件架構(gòu)可供選擇,但是他們必須首先將項(xiàng)目需求與最佳的軟件設(shè)計(jì)進(jìn)行匹配。他們必須考慮軟件性能預(yù)期等技術(shù)需求以及項(xiàng)目截止期限、現(xiàn)有代碼重用和團(tuán)隊(duì)成員的編程語(yǔ)言技能等業(yè)務(wù)需求。
例如,系統(tǒng)設(shè)計(jì)人員必須決定如何最好地利用LabVIEW的生產(chǎn)效率優(yōu)勢(shì)來(lái)進(jìn)行實(shí)時(shí)編程,同時(shí)集成之前項(xiàng)目的C / C+ +代碼。一種解決方案是從LabVIEW應(yīng)用程序中調(diào)用C或C+ +共享庫(kù),C或C+ +共享庫(kù)使用的是LabVIEW固有的并行線(xiàn)程調(diào)度。設(shè)計(jì)人員還可以使用內(nèi)置的LabVIEW信號(hào)處理函數(shù)或結(jié)合LabVIEW MathScript RT模塊使用.m算法,進(jìn)一步節(jié)省開(kāi)發(fā)精力。另外,程序員可以使用Eclipse或任何其他的集成開(kāi)發(fā)環(huán)境(IDE)來(lái)開(kāi)發(fā)、調(diào)試和部署完全使用C或C+ +編寫(xiě)的應(yīng)用程序,同時(shí)利用LabVIEW的優(yōu)勢(shì)來(lái)編程FPGA。
以下是四種基本的設(shè)計(jì)模式:
?
圖4. C/C++嵌入式軟件設(shè)計(jì)架構(gòu)
LabVIEW用于實(shí)時(shí)應(yīng)用程序和FPGA代碼
這種方法簡(jiǎn)化了開(kāi)發(fā)過(guò)程,因?yàn)槌绦騿T可以使用相同的LabVIEW編程環(huán)境和語(yǔ)言以及?LabVIEW Real-Time?和?LabVIEW FPGA?模塊分別編寫(xiě)實(shí)時(shí)應(yīng)用程序和FPGA代碼。 LabVIEW還提供RIO掃描引擎選項(xiàng),它可使每個(gè)I / O模塊直接用于LabVIEW Real-Time而無(wú)需FPGA編程。
從LabVIEW調(diào)用C/C++庫(kù)或應(yīng)用程序
通過(guò)使用LabVIEW來(lái)編程主實(shí)時(shí)應(yīng)用程序,開(kāi)發(fā)人員可利用內(nèi)置的?信號(hào)處理函數(shù)?和網(wǎng)絡(luò)通信。此外,LabVIEW?自動(dòng)地并行獨(dú)立的代碼部分,使程序員可以避免手動(dòng)管理多個(gè)線(xiàn)程。然而,他們可以通過(guò)從LabVIEW中調(diào)用C/ C + +共享庫(kù)或并行運(yùn)行C / C+ +應(yīng)用程序和LabVIEW Real-Time可執(zhí)行程序來(lái)復(fù)用現(xiàn)有C或C+ +代碼。有幾種方式可以用來(lái)集成C / C+ + 共享庫(kù)或與外部應(yīng)用程序進(jìn)行通信:
?
?LabVIEW調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)?- 使用此函數(shù)可以直接從LabVIEW調(diào)用C/ C + + DLL或Linux共享庫(kù)函數(shù)。配置調(diào)用庫(kù)函數(shù)節(jié)點(diǎn),以指定庫(kù)、函數(shù)、參數(shù)、返回的節(jié)點(diǎn)值、調(diào)用約束規(guī)范和回調(diào)函數(shù)回調(diào)。 LabVIEW數(shù)據(jù)類(lèi)型可作為輸入傳輸?shù)紺/ C + +庫(kù)函數(shù)或作為輸出返回到C/ C + +庫(kù)函數(shù)。
? ? ? 導(dǎo)入共享庫(kù)向?qū)?- 該工具用于為共享庫(kù)中的函數(shù)生成包裝VI的LabVIEW項(xiàng)目庫(kù),使得函數(shù)更容易使用,無(wú)需每次使用時(shí)都要配置調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)。
System Exec VI - 使用此函數(shù)來(lái)執(zhí)行或從LabVIEW代碼中啟動(dòng)另一個(gè)命令行應(yīng)用程序或Linux腳本文件。您可以在執(zhí)行命令支持的命令字符串中添加任何參數(shù)。只有NI Linux Real-Time提供此功能。
本地主機(jī)通信——并行程序也可以使用本地主機(jī)TCP / IP函數(shù)來(lái)回傳輸數(shù)據(jù),實(shí)現(xiàn)彼此之間的通信。?
?
如果要編譯NI嵌入式硬件的C/C++代碼,請(qǐng)參考以下?部分,查找使用您硬件的C/C++工具鏈。?
注意:?有些架構(gòu)僅通過(guò)NI Linux Real-Time支持。并行運(yùn)行C/C++應(yīng)用程序和LabVIEW Real-Time應(yīng)用程序或使用System Exec VI僅在運(yùn)行NI Linux Real-Time的嵌入式硬件上可支持。
從C/C++實(shí)時(shí)應(yīng)用程序調(diào)用LabVIEW函數(shù)庫(kù)
如果您的主實(shí)時(shí)應(yīng)用程序是用C或C+ +編寫(xiě)的,您仍然可以通過(guò)使用LabVIEW分析函數(shù)?進(jìn)行信號(hào)處理,這可通過(guò)創(chuàng)建一個(gè)LabVIEW共享庫(kù),并從C/ C+ + 代碼調(diào)用該庫(kù)來(lái)實(shí)現(xiàn)。?
? 了解如何?構(gòu)建LabVIEW共享庫(kù)?用于外部應(yīng)用程序
為了避免傳輸數(shù)據(jù)和控制FPGA發(fā)生沖突,可在LabVIEW或C / C+ +代碼中打開(kāi)一個(gè)FPGA引用。在這種設(shè)計(jì)模式下,控制FPGA和傳輸數(shù)據(jù)到FPGA是由C / C+ +程序通過(guò)第4節(jié)描述的FPGA接口C API來(lái)進(jìn)行處理。如果要編譯NI嵌入式硬件的C / C+ +代碼,可參考?部分,找到適合您硬件的C/C + +工具鏈。
C/C++實(shí)時(shí)應(yīng)用程序
您也可以使用Eclipse或任何其他偏好的IDE來(lái)開(kāi)發(fā)、調(diào)試和部署使用C或C+ +編寫(xiě)的應(yīng)用程序,同時(shí)利用LabVIEW的優(yōu)勢(shì)來(lái)編程FPGA。 FPGA接口C API提供了FPGA和實(shí)時(shí)應(yīng)用程序之間的通信層,用于實(shí)現(xiàn)I / O控制和數(shù)據(jù)流。這提供了用于訪(fǎng)問(wèn)FPGA輸入控件、顯示控件、DMA FIFO、中斷和數(shù)組的接口。?
所有的NI嵌入式產(chǎn)品均有兼容的C / C+ +編譯器和工具鏈??蓞⒖家韵??部分,找到適合您硬件的C/C + +工具鏈和開(kāi)發(fā)者教程。
5. 使用FPGA接口C API
FPGA接口C API使得C / C+ +開(kāi)發(fā)人員能夠更輕松利用LabVIEW FPGA和NI嵌入式硬件來(lái)實(shí)現(xiàn)嵌入式控制和采集應(yīng)用。借助FPGA接口C API,開(kāi)發(fā)人員可以使用LabVIEW圖形化工具在NI硬件中編程FPGA,還可使用C / C+ +工具,如Eclipse、Wind River Workbench或GNU Compiler Collection (GCC)工具鏈來(lái)編程實(shí)時(shí)操作系統(tǒng)。
FPGA接口C API可通過(guò)?ni.com/downloads免費(fèi)下載。該API提供了FPGA和實(shí)時(shí)應(yīng)用程序之間的通信層,用于實(shí)現(xiàn)I/O控制和數(shù)據(jù)流。LabVIEW FPGA代碼開(kāi)發(fā)結(jié)束后,會(huì)生成一個(gè)頭文件,該文件提供了FPGA輸入控件、顯示控件、DMA FIFO、中斷和數(shù)組的C引用。 FPGA接口C API并沒(méi)有提供RIO掃描引擎接口。
以下列出了開(kāi)發(fā)過(guò)程的每個(gè)步驟:
開(kāi)發(fā)和編譯LabVIEW FPGA VI,這會(huì)產(chǎn)生一個(gè)比特文件。
啟動(dòng)FPGA接口C API發(fā)生器。這時(shí)會(huì)根據(jù)比特文件生成一個(gè)C頭文件。?
將頭文件添加到C/C++應(yīng)用程序中。?
編譯并部署應(yīng)用程序,至嵌入式硬件。
6. NI CompactRIO C/C++開(kāi)發(fā)工具
CompactRIO嵌入式系統(tǒng)采用了最新的嵌入式處理器和實(shí)時(shí)操作系統(tǒng)技術(shù),推出后便受到業(yè)界的廣泛歡迎。NI RIO系列產(chǎn)品涵蓋x86和PowerPC處理器,現(xiàn)在也包含了基于ARM的系統(tǒng)。這些產(chǎn)品可兼容一系列C / C+ +編譯器和工具鏈。如需確定哪些處理器技術(shù)最適合您的嵌入式硬件,請(qǐng)參考這篇知識(shí)庫(kù) 文章或圖5。
?
圖5. CompactRIO C/C++開(kāi)發(fā)工具
基于A(yíng)RM和x86的NI Linux Real-Time操作系統(tǒng)
NI持續(xù)投資于NI Linux Real-Time這個(gè)基于Linux的實(shí)時(shí)操作系統(tǒng)。該操作系統(tǒng)采用的技術(shù)為CompactRIO平臺(tái)提供了更高層次的開(kāi)放性,使您可以在LabVIEW代碼中訪(fǎng)問(wèn)豐富的Linux應(yīng)用程序和IP庫(kù),Linux應(yīng)用程序和IP主要來(lái)源于龐大的Linux社區(qū)。此外,Linux操作系統(tǒng)可更輕松地移植現(xiàn)有C/ C + +代碼,開(kāi)發(fā)人員可以使用Eclipse或偏好的IDE開(kāi)發(fā)、調(diào)試和部署代碼到CompactRIO硬件上。?
了解更多基于NI Linux Real-Time的CompactRIO設(shè)備
NI cRIO-9068
NI cRIO-903x
sbRIO-9651模塊系統(tǒng)(SOM)
必需的軟件工具鏈
RTOS——以下工具至少一個(gè):
LabVIEW Real-Time模塊,?
Eclipse?(包含用于A(yíng)RM編譯器的GNU/Linux)?
GNU/Linux編譯器:
用于A(yíng)RMv7 Linux的GNU C & C++編譯器(Linux操作系統(tǒng))
用于A(yíng)RMv7 Linux的GNU C & C++編譯器(Windows操作系統(tǒng))
用于x64 Linux的GNU C & C++編譯器(Linux操作系統(tǒng))
用于x64 Linux的GNU C & C++編譯器(Windows操作系統(tǒng))
?
?
RTOS-FPGA通信層—FPGA接口C API?(13.0版本或更高版本)
FPGA開(kāi)發(fā)——以下必需全部具備:
LabVIEW?(完整版或更高版本)
LabVIEW FPGA模塊
NI-RIO設(shè)備驅(qū)動(dòng)程序(2013版本及更高版本)
?
PowerPC上的VxWorks實(shí)時(shí)操作系統(tǒng)
CompactRIO和NI Single-Board RIO的PowerPC版本W(wǎng)ind River VxWorks RTOS。二進(jìn)制文件可以由編譯PowerPC PPC603架構(gòu)和鏈接至標(biāo)準(zhǔn)VxWorks庫(kù)任何工具鏈創(chuàng)建。 NI建議使用Wind River Workbench來(lái)開(kāi)發(fā)用于VxWorks的二進(jìn)制文件,因?yàn)樗峁┝讼冗M(jìn)的調(diào)試功能、功能齊全的開(kāi)發(fā)環(huán)境和技術(shù)支持。
必需的軟件工具鏈
RTOS——以下工具至少一個(gè):
LabVIEW FPGA模塊?
GCC
Wind River Workbench
?
RTOS-FPGA通信層—FPGA接口C API
FPGA開(kāi)發(fā)——以下必需全部具備:
LabVIEW?(完整版或更高版本)
LabVIEW FPGA模塊
NI-RIO設(shè)備驅(qū)動(dòng)程序
?
基于x86的Phar Lap實(shí)時(shí)操作系統(tǒng)
CompactRIO硬件的x86版本運(yùn)行的是Phar Lap實(shí)時(shí)操作系統(tǒng)。NI已經(jīng)對(duì)使用Visual C++ 2003和2008編譯器來(lái)創(chuàng)建用于該系列嵌入式硬件的C/C++二進(jìn)制文件進(jìn)行測(cè)試。
必需的軟件工具鏈
RTOS——以下工具至少一個(gè):
LabVIEW FPGA模塊
Visual C++
?
RTOS-FPGA通信層—FPGA接口C API
FPGA開(kāi)發(fā)——以下必需全部具備:
LabVIEW(完整版或更高版本)
LabVIEW FPGA模塊?
NI-RIO設(shè)備驅(qū)動(dòng)程序
?
7. 基于NI PXI或PC的C/C++開(kāi)發(fā)工具
NI PXI硬件不包括內(nèi)置的FPGA。該平臺(tái)是完全可配置的,所以您可以針對(duì)您的應(yīng)用程序選擇合適的機(jī)箱、控制器和模塊。您還可以從多個(gè)PXI R系列基于FPGA的模塊?以及其它數(shù)百個(gè)?中進(jìn)行選擇,以實(shí)現(xiàn)系統(tǒng)設(shè)計(jì)的最大靈活性。?
NI提供了一個(gè)ANSI C ID——?NI LabWindows?/CVI,以簡(jiǎn)化基于x86的PXI和基于PC的嵌入式系統(tǒng)開(kāi)發(fā)。?LabWindows/CVI中不包含C+ +編譯器或函數(shù)庫(kù)。 C+ +開(kāi)發(fā)人員可以使用他們傾向的IDE開(kāi)發(fā)用于NI PXI的應(yīng)用程序或PC應(yīng)用程序。?
?
?
圖7. 基于PXI或PC的C/C++開(kāi)發(fā)工具
LabWindows / CVI提供了集成的驅(qū)動(dòng)程序API、I / O配置助手、測(cè)量和分析庫(kù)以及全面調(diào)試和代碼優(yōu)化工具,可幫助您縮短開(kāi)發(fā)時(shí)間。
您可以在LabWindows / CVI應(yīng)用程序中復(fù)用現(xiàn)有C源代碼以及在遠(yuǎn)程實(shí)時(shí)硬件上使用?LabWindows/CVI Real-Time模塊?進(jìn)行部署和調(diào)試而無(wú)需離開(kāi)IDE。 NI提供了適用于所有PXI和PC硬件的高性能和直觀(guān)驅(qū)動(dòng)程序API以及用于實(shí)時(shí)應(yīng)用程序和FPGA硬件之間的I/O控制和數(shù)據(jù)傳輸?shù)腇PGA接口C API。
必需的軟件工具鏈
RTOS——以下工具至少一個(gè):
LabVIEW?和?LabVIEW Real-Time模塊
LabWindows/CVI?和?LabWindows/CVI Real-Time模塊
?
Windows—LabVIEW,?LabWindows/CVI for ANSI C, 或其他用于C/C++的IDE
使用PXI R系列FPGA硬件所需的其他軟件
處理器-FPGA通信層——FPGA接口C API
FPGA開(kāi)發(fā)——LabVIEW FPGA模塊
評(píng)論