問題情景:為了得到連續(xù)時間內ADC采集的數(shù)據(jù),并在PC上對數(shù)據(jù)進行分析,需要搭建鏈路實現(xiàn)FPGA到PC的數(shù)據(jù)傳輸。考慮到ADC采樣頻率較高(10M-100Mb/s),串口通信的速率遠遠達不到要求,考慮使用以太網來實現(xiàn)信息傳輸。
物理鏈路:14位ADC;開發(fā)板使用Xilinx Spartan-6 黑金開發(fā)板AX545;超五類或六類網線;由于程序只支持千兆以太網傳輸,并且考慮到部分筆記本不攜帶網口,因此使用了USB3.0-千兆網口的網卡;裝有wireshark的電腦。
FPGA部分:采用存儲轉發(fā)的思想,即先對ADC采集的數(shù)據(jù)進行緩存,等到采集的數(shù)據(jù)滿足一幀的數(shù)據(jù)長度,再對數(shù)據(jù)包封裝成幀發(fā)送,采用UDP格式進行發(fā)送。考慮到ADC時鐘與UDP時鐘不同步,因此先對ADC采集的數(shù)據(jù)進行一級緩存;由于以太網每次只能發(fā)送8位數(shù)據(jù),而ADC采集的數(shù)據(jù)為14位,因此還需要對ADC緩存數(shù)據(jù)進行轉換,轉換得到的數(shù)據(jù)進行二級緩存;等到二級緩存達到發(fā)送數(shù)據(jù)的長度,使能UDP傳輸,加入幀頭后發(fā)送。
PC端接收:PC端數(shù)據(jù)接收采用wireshark實現(xiàn),使用wireshark捕獲UDP包。由于傳輸速率過快,連續(xù)時間接收的UDP包過多,因此完成采集后先對采集的數(shù)據(jù)進行存儲,存為pcap格式為后續(xù)處理做準備。存儲的文件較大,達到百兆到G級別。
數(shù)據(jù)恢復(未找到很好的實現(xiàn)方法):數(shù)據(jù)保存在UDP包的數(shù)據(jù)幀部分,格式為十六進制或二進制,需要將數(shù)據(jù)部分和其他幀結構分離。方法一:利用網絡調試助手(上位機),在wireshark接收UDP包的同時打開上位機,就可以得到不含幀頭部的數(shù)據(jù)流,而且可以進行保存(此處使用的NetAssist),一個致命的問題是,當數(shù)據(jù)傳輸速率過快時,利用上位機保存下來的幀并不是連續(xù)的,會導致恢復的波形不連續(xù)。方法二:wireshark提供追蹤UDP流的功能,可以將所有幀中的數(shù)據(jù)流進行打印,但問題是得到的pcap文件中幀數(shù)據(jù)量過大,處理非常慢(嚴重影響使用)。方法三(考慮但未實現(xiàn)):利用MATLAB直接讀取pcap文件,下載pcap2matlab開源文件,利用這一文件解析pcap文件;利用python dpkt包解析pcap文件。如果有合適的解決方法,歡迎交流!
原文標題:FPGA-PC以太網通信
文章出處:【微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
FPGA
+關注
關注
1630文章
21759瀏覽量
604361 -
以太網
+關注
關注
40文章
5441瀏覽量
172038
原文標題:FPGA-PC以太網通信
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論