在 06-21-2009 07:19 AM
路人C
Memory是將資料存於指定暫存位移器中,如需其中資料,將再指定資料位置,將其讀出。
FIFO主要為緩衝器,如將FPGA的DATA傳送資料於RT中,因RT執行速度較FPGA慢,故RT來不急讀取的DATA將會存於FIFO中,
但如RT接收資料太慢,FIFO將會爆掉,DATA將會MISS,其可設定FIFO容量。
如有錯誤,請指正。
1)所以FPGA輸出的資料會存在Memory中,而在RT端讀取Memory中FPGA的Data怕會來不及所以再Memory之後再設一個FIFO用來緩衝,是這樣解譯嗎??
2)還是FPGA的Data直接存在Memory中,只是容量夠大,RT端就讓她自己慢慢讀取,不需要FIFO,也不會miss??
3)但是我有看exsample中有的只用FIFO,有的Memory和FIFO一起合用,到底差別在那??
Toolkits and Modules >> FPGA >> CompactRIO >> FPGA Fundamentals >> DMA >> Basic DMA - cRIO.lvproj
小弟剛接觸FPGA,請指教。
在 06-22-2009 06:05 AM
您好:
1. DMA FIFO 是把使用者的資料暫放在 FPGA 的 Memory 裡面, 它的用意就是在 Host 與 FPGA 端之間傳達訊息. 由於Host 端的速度比 FPGA來的慢, 所以您所說的緩衝時間是沒有錯的.
2. 對於DMA FIFO來說, 它所需要的記憶體就是來自 FPGA 的Memory, 所以是有限的. 如果您把FIFO設的太大, 那其它的功能可能就沒有Memory可用. 由於 DMA FIFO 與 FPGA 的Memory 都有上限, 那 RT端就不能讀得太慢不然FIFO滿了 Data就會遺失. 您必須要調整 FPGA讀取速度, FIFO讀取速度或增加Host 端的 Number of Elements 來避免 Data 遺失的可能性.
3. FIFO 有分 VI-Scoped, Target Scoped 與 DMA FIFO. VI-Scoped 跟 Target Scoped 都是在FPGA 端迴圈之間傳達訊息的方式. DMA FIFO 則是用來在 Host/RT 端和 FPGA端之間傳達資訊.
至於 Meomory 就與 VI-Scoped, 跟 Target Scoped FIFO 一樣是在 FPGA 端內傳答資訊. 他們的使用方式不同但性質上都是一樣的.
謝謝.
NI應用工程部
謝謝各位給我解答,但是關於第三點我還是有些疑問
3) 目前知道了 FPGA內部迴圈要緩衝傳遞資料是用VI-Scoped, Target Scoped 這兩種,而DMA FIFO是用Host(RT)與FPGA之間使用。
但是在例題
Toolkits and Modules >> FPGA >> CompactRIO >> FPGA Fundamentals >> DMA >> Basic DMA - cRIO.lvproj 中
FPGA與RT之間只用 DMA FIFO 而未用Memory,那是資料不會loss嗎??
既然沒有暫存記憶體(Memory),那 DMA FIFO 要怎麼緩衝?? 因為在第一點解釋
DMA FIFO 是把使用者的資料暫放在 FPGA 的 Memory 裡面, 它的用意就是在 Host與FPGA 端之間傳達訊息. 由於Host 端的速度比 FPGA來的慢, 所以您所說的緩衝時間是沒有錯的.
目前就是這些問題,謝謝解答!!
在 07-01-2009 05:27 AM
您好:
您圖片裡的 Memory 物件跟 DMA FIFO 是不同的東西. Memory 的用法是與 Target Scoped/VI Scoped 相同的. DMA FIFO則是在Host 與 FPGA 端傳達資料的方式.
程式在製造DMA FIFO時會在 Host 端與 FPGA 端的 RAM裡各造一塊記憶體提供FIFO使用. FPGA 擷取進來的資料會被丟在FPGA的 RAM裡, 接著再透過 DMA 把資料傳到 Host 端的 RAM 裡. 這樣Host 端就可以從他自己的RAM裡取出這些資料.
通常PC端被配置的記憶體會是FPGA端的一倍.
謝謝.
NI應用工程部
程式在製造DMA FIFO時會在 Host 端與 FPGA 端的 RAM裡各造一塊記憶體提供FIFO使用. FPGA 擷取進來的資料會被丟在FPGA的 RAM裡, 接著再透過 DMA 把資料傳到 Host 端的 RAM 裡. 這樣Host 端就可以從他自己的RAM裡取出這些資料.
所以"各造一塊記憶體"是FIFO自行創造及調整的,不需要設計者在程式中另外多加記憶體,而圖上的Memory 的用法是用在Target Scoped/VI Scoped ,跟FIFO的緩衝記憶體無關。
這樣解釋對嗎??
在 07-02-2009 06:50 AM
參考資料=開始>>程式集>>national instruments>>labview>>labview help>>索引
鍵入=FPGA FIFO or FPGA memory.
所以"各造一塊記憶體"是FIFO自行創造 "yes" 及調整的 "使用者必須自己調整大小" ,
不需要設計者在程式中另外多加記憶體,不一定,
而圖上的Memory 的用法是用在Target Scoped/VI Scoped ,跟FIFO的緩衝記憶體無關。
簡單來說 FIFO,Memory 是一樣的東西,
FIFO用法比較簡單,而且資料被取出後自行消失,
Memory必須提供address,資料可以保存,除非您再寫入資料。
通常 Host 端與 FPGA 端交換資料使用 FIFO 就夠了
Hi , Fatty
聽你這樣解釋我大概知道分別了
還有一個問題就是
Memory是用在Target Scoped/VI Scoped ,那是怎麼應用??
能舉例嗎??
07-02-2009 09:03 PM - 已編輯 07-02-2009 09:03 PM
參考資料=開始>>程式集>>national instruments>>labview 8.x>>labview help>>索引>>FPGA memory
You can use memory items to store data in the FPGA block memory........................................
點選綠色 memory items ,即可看到。
Use memory items to read from and write to the memory on an FPGA...........................