<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 手把手教你FPGA與RT以及Host端通信

          手把手教你FPGA與RT以及Host端通信

          作者: 時(shí)間:2017-10-11 來(lái)源:網(wǎng)絡(luò) 收藏

          在ECM中,會(huì)涉及到、RT以及主機(jī),那么三者之間是如何進(jìn)行數(shù)據(jù)流的傳輸呢?本文將以cRIO-9068為例,帶大家了解整個(gè)編程以及實(shí)現(xiàn)過(guò)程。

          本文引用地址:http://www.ex-cimer.com/article/201710/365494.htm

          一、、RT以及主機(jī)數(shù)據(jù)流之間的通信概覽

          在一個(gè)含的Real-TIme系統(tǒng)中,F(xiàn)PGA負(fù)責(zé)采集信號(hào),然后將采集的數(shù)據(jù)傳輸至RT端進(jìn)行監(jiān)控、處理,同時(shí)在主機(jī)進(jìn)行數(shù)據(jù)的顯示、記錄或者發(fā)送命令。典型的基于cRIO的Real-TIme系統(tǒng)如下圖所示:

          數(shù)據(jù)在Real-TIme系統(tǒng)中主要分為兩種,一種是比如消息,命令等等,此類數(shù)據(jù)我們只關(guān)注其最新的值,主要通過(guò)標(biāo)簽、消息進(jìn)行數(shù)據(jù)的傳遞;另外一種是數(shù)據(jù)流,我們需要獲取所有的數(shù)據(jù)信息,而不僅僅是最新值,主要通過(guò)網(wǎng)絡(luò)流、FIFO進(jìn)行傳遞。

          對(duì)于采集卡采集到的數(shù)據(jù),我們有時(shí)候是希望對(duì)其進(jìn)行記錄,并在端進(jìn)行顯示觀測(cè)。通常,F(xiàn)PGA與RT是通過(guò)FIFO進(jìn)行數(shù)據(jù)流的傳輸,而RT則采用網(wǎng)絡(luò)流與主機(jī)傳輸數(shù)據(jù)。本文將以cRIO-9068為例,展示從信號(hào)采集到上位機(jī)顯示的整個(gè)過(guò)程,幫助大家更好地了解Real-TIme系統(tǒng)的數(shù)據(jù)處理方式

          二、硬件軟件

          數(shù)采卡:NI 9263
          設(shè)備:cRIO-9068;RIGOL示波器
          軟件:LabVIEW; LabVIEW ;LabVIEW FPGA;CompactRIO
          (可以在NI Max中查看自己所安裝的軟件、驅(qū)動(dòng)以及模塊的版本,保持cRIO-9068中的軟件版本正確)
          最終,硬件連接如圖。



          三、設(shè)計(jì)過(guò)程

          1)新建項(xiàng)目
          打開LabVIEW,新建項(xiàng)目,在項(xiàng)目瀏覽器中,右鍵我的項(xiàng)目,選擇添加目標(biāo)設(shè)備,將硬件cRIO-9068以及NI 9263一并添加入新建的項(xiàng)目。


          2)FPGA.vi的設(shè)計(jì)
          首先我們需要在FPGA中產(chǎn)生一個(gè)正弦信號(hào),經(jīng)由NI 9263的模擬端口輸出。

          注意:此處不能使用單周期定時(shí)循環(huán),因?yàn)樵搗i無(wú)法在一個(gè)時(shí)鐘滴答內(nèi)完成執(zhí)行。關(guān)于單周期定時(shí)循環(huán)參考鏈接:

          由于要將FPGA產(chǎn)生的正弦波信號(hào)傳到RT端進(jìn)行顯示等處理,屬于數(shù)據(jù)流的傳輸,因此我們?cè)诖颂幨褂肈MA FIFO()。

          在項(xiàng)目瀏覽器中FPGA下右鍵新建一個(gè)FIFO,其FIFO設(shè)置如下:

          其中在Type處選擇類型:Target to -DMA,大小使用默認(rèn)的即可。在Data Type中選擇數(shù)據(jù)的類型,此處我們傳輸?shù)氖菬o(wú)符號(hào)的32位數(shù)據(jù),因此選擇U32即可。

          3)RT.vi的設(shè)計(jì)
          RT端的vi主要由兩部分組成,一部分是從FIFO中讀取從FPGA傳來(lái)的數(shù)據(jù),一部分是建立網(wǎng)絡(luò)流,將數(shù)據(jù)傳給主機(jī)進(jìn)行檢測(cè)。這里要注意的是,由于我們需要的是打開主機(jī)隨時(shí)讀取數(shù)據(jù),主機(jī)程序運(yùn)行時(shí)候。

          RT端的vi主要由兩部分組成,一部分是從FIFO中讀取從FPGA傳來(lái)的數(shù)據(jù),一部分是建立網(wǎng)絡(luò)流,將數(shù)據(jù)傳給主機(jī)進(jìn)行檢測(cè)。這里要注意的是,由于我們需要的是打開主機(jī)隨時(shí)讀取數(shù)據(jù),主機(jī)程序運(yùn)行時(shí)候,會(huì)產(chǎn)生一個(gè)信號(hào),使RT端的網(wǎng)絡(luò)流端建立并且寫入數(shù)據(jù)。因此,我們新建一個(gè)布爾變量,作為這個(gè)傳遞信號(hào)。

          因此,在RT端,我們對(duì)主機(jī)的數(shù)據(jù)傳遞主要使用了兩種方式,一種是網(wǎng)絡(luò)流,用于每一個(gè)數(shù)據(jù)傳遞;另一個(gè)是網(wǎng)絡(luò)變量,獲取布爾控件的最新值。

          在FIFO波形的傳遞過(guò)程中,經(jīng)常使用到以下兩個(gè)數(shù),這里做多一些的介紹。

          Normalize Signal Generation Parameters Sample Rate To Loop Time

          這兩個(gè)會(huì)經(jīng)常搭配使用,主要是對(duì)FPGA部分產(chǎn)生波形的波形參數(shù)進(jìn)行設(shè)置,其中主要是對(duì)波形的頻率以及采樣頻率(在FPGA端則需要使用Loop Time函數(shù)),后面會(huì)連接使用“Write/Read Control”節(jié)點(diǎn)。

          在網(wǎng)絡(luò)流的設(shè)置中,按照常規(guī):建立寫端-寫入-關(guān)閉的順序,其中注意的是,主機(jī)在建立的時(shí)候設(shè)置超時(shí)(Time out)默認(rèn)是-1,會(huì)無(wú)限時(shí)間的等待下去。且寫入端的名字不能和讀取端的名字有重合部分,不然會(huì)報(bào)錯(cuò)的。

          至此,我們完成了RT端以及FPGA的程序編寫。但是,在有些情況下,我們會(huì)希望cRIO里面的程序固定,上電即可運(yùn)行(比如上電即可采集或者產(chǎn)生波形),而我們可以隨意的不定時(shí)的使用主機(jī)通過(guò)局域網(wǎng)隨機(jī)抓取一段cRIO數(shù)據(jù),因此我們需要在主機(jī)上(host端)新建一個(gè)vi實(shí)現(xiàn)此功能。

          為了方便起見,此處新建的主機(jī)vi和RT等程序放在一個(gè)項(xiàng)目?jī)?nèi),實(shí)際應(yīng)用中新建一個(gè)項(xiàng)目,在新的項(xiàng)目中編寫主機(jī)的代碼。

          4).vi的設(shè)計(jì)

          在主機(jī)上,我們這里簡(jiǎn)單的只是讀取,首先會(huì)賦值給共享變量在從而在RT端建立網(wǎng)絡(luò)流寫入端寫入數(shù)據(jù)。

          5)整個(gè)系統(tǒng)顯示如下




          關(guān)鍵詞: FPGA Host Real-Time

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();