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