各位先進好,目前我所遇到的問題是,要送出的資料大約50000筆,但送出的資料數大約為40000多筆,想請問是哪個地方出了問題呢?
在 06-28-2011 03:15 AM
您好
可以請您提供更多資訊嗎? 譬如像是程式碼,還有硬體上做資料傳送的接法等等。提供的資料越多,越能夠更快找出問題所在。謝謝您。
感謝您的提醒
程式碼如附件,只用模組為NI9263
在 06-29-2011 10:04 PM
您好
您在Host 端的迴圈內做了太多的事情,所以導致Host在運算那些資料時,FPGA已經將資料跑完而造成underflow。 建議您將圖2中紅框圈起來的部分拿到迴圈外做運算再輸入進Data FIFO Output Write (如同範例程式般的寫法)。
另外在圖1的部分,也請您將Data Output FIFO Configure Depth設大,至少要大於輸入的資料長度,而一開始初始化的Data FIFO Output Write最好不要Disable,先寫一段資料進去,讓FPGA開始執行的時候有資料可以運算。
範例程式會寫兩次的原因在於要先指定一段資料在一開始的時候給FPGA做處理,進到迴圈內後因為裡頭那個Data FIFO Output Write的timeout沒有設定,所以迴圈會在那個部份等到有足夠記憶體空間寫進你所指定資料時才會寫進去。
簡單的說,就是參照範例程式,將產生sin wave的地方改成您想要產生資料的程式碼,然後跟據資料長度去調整dpeth (至少要大於輸入資料長度)。 迴圈內盡量不要做太多運算,可能會造成overflow or underflow。以上供您參考。
圖1
圖2
首先,謝謝您的回覆。
不過照範例程式所接,只會是第一個數值不斷送出,而不是所想要連續送出數值的樣子...
在 07-04-2011 07:28 AM
您好
您可以在迴圈外建一個RT FIFO,將想傳的資料放進FIFO裡面。 迴圈裡面就是將FIFO的值讀出來。 要注意的是將資料放進FIFO的速度跟從迴圈將資料讀到FPGA速度要匹配,不然還是會造成data loss。如此就可以傳遞不同的資料。謝謝您。
一樣先謝謝您的回覆唷!
不過我不是很懂您的文字上意思...是否可以用圖示說明一下...謝謝!
在 07-08-2011 06:18 AM
您好
這是利用RT FIFO去傳遞資料的程式。 我所做的範例是產生兩個不同振幅的sine波 (各100,000點),再各拆成10個10,000點依序放進RT FIFO中,在原本的迴圈中就是傳到DMA Output傳出去。 要拆成10,000點的原因在於FPGA上buffer有限,若是FIFO中的element是一個100000的array,FPGA的記憶體很容易就滿了而不能執行,同時也要控制FIFO迴圈的速度避免發生overflow or underflow的情況。 這個方式我測試過沒有掉資料的情形,供您參考囉~
謝謝您熱心的回覆
想請問程式內的問題,為何要產生兩個不同振幅的sine波?當中的意義是在…?
還有未來想傳送的資料持續不斷地傳送,有什麼辦法可以不受array大小限制,持續不斷地一直傳送呢?(不遺失資料的情況下)
再請問...圖中所示的時間(漏斗)元件為何?
(不太像time delay元件,想確認一下...)