LabVIEWCompactRIO 開發(fā)指南28 可重入和非重入子VI之間的權(quán)衡
LabVIEWCompactRIO?開發(fā)指南28
了解可重入和非重入子VI之間的權(quán)衡
重入是子VI執(zhí)行屬性中的設(shè)置。在LabVIEW?FPGA中,子VI執(zhí)行默認(rèn)設(shè)置為可重入。重入在FPGA邏輯中創(chuàng)建子VI的多個(gè)副本。這能夠并行執(zhí)行子VI的多個(gè)副本,同時(shí)存儲(chǔ)不同且獨(dú)立的數(shù)據(jù)存儲(chǔ)。
在圖5.14的示例中,子VI設(shè)置為可重入,因此這兩個(gè)循環(huán)同時(shí)運(yùn)行,并且任何內(nèi)部移位寄存器、局部變量或VI范圍的存儲(chǔ)器數(shù)據(jù)點(diǎn)對(duì)于每個(gè)實(shí)例都是唯一的。

圖5.14.子VI設(shè)置為可重入
對(duì)于LabVIEWFPGA,這也意味著函數(shù)的每個(gè)副本都使用自己的FPGA,切入性對(duì)于代碼可移植性是有效的,但可能使用更多門。如果嘗試保存FPGA資源,則可能需要將執(zhí)行屬性更改為非重入執(zhí)行。但是,對(duì)于小型子VI,在這種情況下,可能會(huì)使用更多的FPGA結(jié)構(gòu),因?yàn)榫幾g器會(huì)向FPGA結(jié)構(gòu)添加更多邏輯來處理仲裁。以下部分介紹避免仲裁的技術(shù)。
避免仲裁
當(dāng)LabVIEWFPGA代碼包含具有多個(gè)讀取器或?qū)懭肫鞯墓蚕碣Y源(例如I/O節(jié)點(diǎn)或不可重入子VI)時(shí),就會(huì)發(fā)生仲裁。在這些情況下,編譯器會(huì)向FPGA結(jié)構(gòu)添加更多邏輯來處理此仲裁。如果擔(dān)心盡量減少使用的FPGA結(jié)構(gòu)的數(shù)量,請(qǐng)盡量避免仲裁。有關(guān)仲裁如何運(yùn)作的更多信息,請(qǐng)參閱《LabVIEW?FPGA?Help?Document:?Managing?Shared?Resources》。
如上述幫助文檔所述,可以通過更改LabVIEW中的仲裁設(shè)置來避免仲裁,但更可靠的技術(shù)是以防止仲裁的方式設(shè)計(jì)應(yīng)用程序。下面列出了其中一些技術(shù):
■最小化共享資源
■在時(shí)間關(guān)鍵型代碼(如FIFO)中使用double-sided資源
■避免多個(gè)讀取器和/或?qū)懭肫鞯絛ouble-sided資源
另一種技術(shù)是在需要多個(gè)編寫器的情況下創(chuàng)建多個(gè)全局或局部變量。例如,考慮使用LabVIEW?FPGA?VI,它使用一個(gè)環(huán)路從模擬輸入節(jié)點(diǎn)讀取數(shù)據(jù),使用兩個(gè)額外環(huán)路來處理模擬數(shù)據(jù)。在這種情況下,可以創(chuàng)建兩個(gè)單獨(dú)的全局或局部變量,例如A和B,以寫入模擬輸入環(huán)路。在第一個(gè)處理循環(huán)中,可以從變量A讀取,在第二個(gè)處理循環(huán)中,可以從變量B讀取。
創(chuàng)建計(jì)數(shù)器和計(jì)時(shí)器
如果需要在一段時(shí)間后觸發(fā)事件,請(qǐng)使用Tick?Count函數(shù)測(cè)量經(jīng)過的時(shí)間,如圖5.15所示。不要使用內(nèi)置于While循環(huán)和SCTL中的迭代終端,因?yàn)樗罱K會(huì)在其最大值時(shí)飽和。這發(fā)生在循環(huán)的2,147,483,647次迭代之后。在40MHz時(shí)鐘速率下,這只需要53.687秒。相反,使用無符號(hào)整數(shù)和反饋節(jié)點(diǎn)以及Tick?Count函數(shù)創(chuàng)建自己的計(jì)數(shù)器,以根據(jù)40MHzFPGA時(shí)鐘提供時(shí)間。

圖5.15.使用Tick?Count測(cè)量經(jīng)過的時(shí)間
由于對(duì)計(jì)數(shù)器值使用無符號(hào)整數(shù),因此當(dāng)計(jì)數(shù)器滾動(dòng)更新時(shí),已用時(shí)間計(jì)算將保持正確。這是因?yàn)槿绻褂脽o符號(hào)整數(shù)從一個(gè)計(jì)數(shù)值中減去另一個(gè)計(jì)數(shù)值,即使計(jì)數(shù)器溢出,仍然可以得到正確答案。
另一種常見的計(jì)數(shù)器類型是迭代計(jì)數(shù)器,用于測(cè)量循環(huán)執(zhí)行的次數(shù)。無符號(hào)整數(shù)通常是迭代計(jì)數(shù)器的首選,因?yàn)樗鼈冊(cè)跐L動(dòng)更新之前提供最大的范圍。用于計(jì)數(shù)器的無符號(hào)64位整數(shù)數(shù)據(jù)類型提供了巨大的計(jì)數(shù)范圍,相當(dāng)于大約180億。即使FPGA時(shí)鐘以40MHz運(yùn)行,該計(jì)數(shù)器14,000年也不會(huì)溢出。

圖5.16.無符號(hào)整數(shù)通常是迭代計(jì)數(shù)器的首選
?
需要說明的是,上述的例程和文檔,都是可以下載的,雙擊即可打開,其中壓縮文件是可以采用粘貼復(fù)制的方式,拷貝到硬盤上。這不是圖片,各位小伙伴看到后嘗試一下,這個(gè)問題就不用加微信咨詢了。有關(guān)LabVIEW編程、LabVIEW開發(fā)等相關(guān)項(xiàng)目,可聯(lián)系們。附件中的資料這里無法上傳,可去公司網(wǎng)站搜索下載。