最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

My FPGA PCIe客戶案例69:帶PCIe和FMC接口(HPC)的K7開發(fā)板高速采集

2021-03-26 17:44 作者:神電測控  | 我要投稿

????? 1、準備好開發(fā)環(huán)境和硬件設(shè)備

?1)本節(jié)實驗用到的FMC ADC模塊(瀚闌電子工作室)上的ADC芯片型號是:ADS42LB69,最大采樣率支持200MS/s,16位精度,實物正反面分別如圖69-1和69-2所示。? ? ? ? ? ? ? ? ? ? ? ?

圖69-1:200MS/s,16位高精度FMC ADC模塊(正面)


圖69-2:200MS/s,16位高精度FMC ADC模塊(背面)

2)采用的Kintex7 PCIe開發(fā)板上的FPGA是性價比超高的325T-FBG900芯片,實物如圖69-3~69-7所示。

圖69-3:Xilinx Kintex7-325T-FBG900-PCIe開發(fā)板(正面)
圖69-4:Xilinx Kintex7-325T-FBG900-PCIe開發(fā)板(8個LED燈)
圖69-5:Xilinx Kintex7-325T-FBG900-PCIe開發(fā)板(FMC HPC接口)
圖69-6:Xilinx Kintex7-325T-FBG900-PCIe開發(fā)板(立體圖)
圖69-7:Xilinx Kintex7-325T-FBG900-PCIe開發(fā)板(與下載器相連)

3)將Kintex7 FPGA開發(fā)板插到工控機機箱里面,如圖69-8所示,注意,機箱不要上電,不能帶電插!再從外部接入一路信號源到FMC ADC模塊上,如圖69-9所示。

圖69-8:Xilinx Kintex7-325T-FBG900-PCIe開發(fā)板(插到機箱里面)
圖69-9:Xilinx Kintex7-325T-FBG900-PCIe開發(fā)板(外接一路信號源)

? 4)將信號源的輸出信號設(shè)置為正弦,頻率設(shè)置為100KHz,幅度設(shè)置為5V,偏置設(shè)置為2.5V,如圖69-10所示。這樣實際生成的是1路信號峰峰值為±2.5V的100KHz正弦信號。

圖69-10:設(shè)置信號源參數(shù)(±2.5V,100KHz,正弦信號)

? ? ? ?2、下位機FPGA程序開發(fā)

1)打開LabVIEW,新建一個帶PCIe的FPGA終端(Kintex-7-325T-FBG900),編寫下位機FPGA高速FMC AD采集程序和上位機PC端采集顯示程序,完整的項目如圖69-11所示。其中,我們將網(wǎng)上通用的200MS/s,16位ADC模塊封裝到LabVIEW里面來了,如圖69-12所示,方便用戶直接在FPGA里面調(diào)用。

圖69-11:帶PCIe的FPGA終端項目(K7-325T-FBG900)
圖69-12:封裝到LabVIEW FPGA下的FMC ADC模塊CLIP

?2)具體的下位機FPGA程序和上位機PC端的程序編寫過程,這里就不再介紹了,用戶可以直接參考我們給出的例程,相信只要用戶把本書前面的LabVIEW FPGA PCIe基礎(chǔ)實驗和中級實驗學會了,這里實戰(zhàn)的時候也是信手拈來。

?????? ?圖69-13顯示的是下位機FPGA上的程序框圖。由于下位機FPGA里面我們使用了新型EIO節(jié)點,所以在程序初始化的話,對三態(tài)的FPGA引腳進行了方向控制,一共3個線程搞定:ADC采集線程、PCIe傳輸線程、指令參數(shù)解析線程。

圖69-13:下位機FPGA+PCIe+FMC+ADC高速采集程序框圖

? ? ? ? 圖69-14顯示的是上位機PC端的數(shù)據(jù)采集前面板,圖69-15顯示的是上位機程序框圖。上位機比較簡單,直接參考前面中級實驗里面的改改適配一下就可以了!

圖69-14:上位機PCIe數(shù)據(jù)采集前面板
圖69-15:上位機PCIe數(shù)據(jù)采集程序框圖

3)FPGA程序編寫完成后,打開獲取Kintex7 FPGA bit文件的軟件,如圖69-16所示。編譯完成后的K7-325T芯片的資源消耗情況,如圖69-17所示。

圖69-16:運行獲取Kintex7 FPGA bit文件
圖69-17:編譯結(jié)束后的K7-325T FPGA資源消耗情況

4)接下來,將工控機上電,將Xilinx下載器接到電腦上,將前面編譯出來的bit文件(ARTIX7_XC7K325T_FBG900_PCIe_X4_8Chs_B_FMC_ADC.bit)通過Vivado軟件下載到K7開發(fā)板里面運行,下載過程如圖69-18所示。

圖69-18:利用Vivado軟件將bit文件燒寫到Kintex7 FPGA里面運行

? ? ? ?3、實驗測試結(jié)果

1)PCIe不支持熱插拔,所以FPGA程序下載之后,需要右擊熱啟動一下電腦,不能選擇關(guān)機,必須是重啟電腦,這樣主板不會掉電。重啟之后,運行上位機測試軟件,挨個測試一下4個通道是否能夠正常采集外部信號,以及更改采樣率之后的變化。

圖69-19:即使開啟波形顯示,內(nèi)存池不會溢出,因為采樣率低(4MS/s,量程±8V)

? ? ? ? 上圖69-19中,我們開啟了大量程測試模式,外部給的正弦信號峰峰值是2.5V,換算一下,就是2.5/8×32767=10239,正好與采集到的I16波形幅度相符。

2)接下來換一組參數(shù)繼續(xù)測試,采樣率保持不變,將量程切換到±8V,具體操作是,先按下點亮兩個量程按鈕,再點擊一次Send發(fā)送更新指令和參數(shù)就可以了,此時波形圖通道1里面出現(xiàn)的波形幅度變成了2000多,也就是2.5/4×32767,如圖69-20所示。

圖69-20:即使開啟波形顯示,內(nèi)存池不會溢出,因為采樣率低(4MS/s,量程±4V)

? ? ? ? 將波形圖展開之后,可以看到,400個點里面一共有10個周期的正弦信號,這是因為外部信號頻率是100KHz,F(xiàn)PGA下的ADC采樣率設(shè)置的是4MS/s,所以一個周期的量化點數(shù)就是40個點,10個波形就是400個點。

3)接下來,將采樣率提高到8M,那么4個通道共計傳輸帶寬就是4×8M×2Bytes=64MB/s。此時,前面板上的內(nèi)存池會慢慢增加直到溢出,如圖69-21所示。一旦發(fā)生溢出,上位機就死機了,并且下位機FPGA會一直往上位機發(fā)數(shù)據(jù),導致中間層的PCIe驅(qū)動出現(xiàn)阻塞,因此,這樣情況下,必須要在內(nèi)存池溢出之前點擊“停止”按鈕將下位機FPGA停下來采集。之所以會出現(xiàn)溢出,是因為前面板上的控件顯示消耗了大量的CPU,導致CPU沒辦法將PCIe DMA傳輸上來的數(shù)據(jù)及時讀走,這種現(xiàn)象早在前面的PCIe通信里面就給用戶講解過了,不記得的用戶可以回顧一下前面的中級實驗內(nèi)容。

圖69-21:開啟波形顯示,內(nèi)存池逐漸溢出,因為波形顯示消耗CPU,加上采樣率高了,傳輸數(shù)據(jù)量變大了許多(8MS/s,量程±4V)

4)為此,我們可以將前面板上的波形顯示功能關(guān)掉(熄滅波形顯示按鈕),然后再點擊一下Send發(fā)送按鈕下發(fā)更新指令參數(shù),此時,內(nèi)存就會在很小的范圍震蕩,沒有出現(xiàn)任何溢出的跡象,說明只要上位機CPU能夠及時將數(shù)據(jù)讀走是不會出現(xiàn)丟點的。如圖69-22所示。

圖69-22:關(guān)閉波形顯示,即使采樣率高了,內(nèi)存池不會溢出(8MS/s,量程±4V)

5)然后進一步提高采樣率測試看看會不會溢出,如果將采樣率提高到20MS/s,實際傳輸帶寬變成了160MB/s,在開啟“波形顯示”的情況下, 可以看到內(nèi)存池瞬間飆升,如圖69-23所示。一定要在內(nèi)存池溢出之前停下FPGA采集,前面板上的波形周期變成了2個,這是因為,20MS/s的采樣率,100KHz的信號每個周期量化點數(shù)是200個點,所以400個點的顯示區(qū)間里面只能顯示2個周期的信號。


圖69-23:開啟波形顯示,內(nèi)存池飆升,采樣率太高(20MS/s,量程±4V)

6)同樣,只要我們把波形顯示功能關(guān)閉掉,內(nèi)存池就不會出現(xiàn)溢出了,如圖69-24所示,說明在160MB/s的傳輸帶寬下,PCIe DMA傳輸都是OK的。

圖69-24:關(guān)閉波形顯示,即使采樣率很高,內(nèi)存池也不會溢出(20MS/s,量程±4V)

7)最后,經(jīng)過我們反復測試發(fā)現(xiàn),這款FMC ADC板子在大量程模式下,高速采集的時候,會周期性出現(xiàn)正負沖擊的錯誤點,如圖69-25。小量程模式下,測試半個小時,穩(wěn)定性非常好,不會出現(xiàn)任何異常,因此,建議用戶在實際應(yīng)用中,選擇小量程,也就是±4V進行測量,等到后續(xù)開發(fā)這個FMC模塊的賣家搞定電路之后應(yīng)該就切換到大量程了。

圖69-25:大量程(±8V)模式下,采集的波形會有正負沖擊,初步推斷位電路問題

? ? ? ? 針對上面這個問題,我們的解決方法是,如果用戶希望ADS42LB29工作在量程模式下,那么可以在VHDL文件里面加上一個寄存器設(shè)置,如圖69-26所示。

也就是:

WHEN X"2001"=>SPISHIFT <= X"140C";?????? -- 大量程模式下用(±8V下不會出現(xiàn)沖擊)

如果用戶想在小量程模式下采集,那么只需要保留這一句話即可,上面的140C要刪掉,也就是:

WHEN X"0001"=>SPISHIFT <= X"1501";? -- 小量程模式下用(±4V下不會出現(xiàn)沖擊)

也就是說:大量程與小量程模式不能兼容,好在我們有方法可以解決。

圖69-26:大量程與小量程兩種模式對應(yīng)的SPI寄存器參數(shù)設(shè)置

8)當我們將140C寄存器參數(shù)寫入ADC芯片之后,再次編譯下載運行,可以看到大量程模式下,沒有沖擊了,如圖69-27所示。放大之后的波形,如圖69-28所示。不幸的是,大量程模式下的信噪比沒有小量程好,所以用戶今后可以根據(jù)實際信號峰峰值選擇合適的量程采集。

圖69-27:增加一個140C寄存器之后,大量程模式下沒有沖擊了
圖69-28:大量程模式下的信噪比沒有小量程好(250MS/s,外部信號1MHz,峰峰值±2.5V)

? ? ? ??特別需要注意的是:如果采樣率設(shè)置的很大,上位機來不及讀取,PCIe在傳輸?shù)臅r候會阻塞丟點,因為上位機前面板上的波形顯示會消耗大量的CPU資源,所以如果不想丟點,最好關(guān)閉上位機波形顯示功能,或者將采集到的數(shù)據(jù)轉(zhuǎn)移到隊列里面進行緩沖,或者把一些復雜的耗時算法直接放在FPGA上跑,這些措施都能減輕上位機PC端的壓力。

?

?????? ?特別需要提醒的是:有很多用戶將分頻系數(shù)改成0之后,實際采集到的整周期波形點數(shù)只有100個點,并非250個點,這是因為4個通道并行250MS/s采樣率,實際帶寬帶寬就是2GB/s,而PCIe的時鐘是100MHz,傳輸帶寬只有800MB,所以我們特地將程序改造了一下,項目下的VI如圖69-29所示,只把其中一路信號以250MS/s采樣率采集之后通過PCIe傳輸?shù)缴衔粰C顯示,程序框圖如圖69-30所示。

圖69-29:將ADS42LB29其中一路信號進行采集傳輸
圖69-31:利用串轉(zhuǎn)并將其中一個通道的250MS/s采樣率下的數(shù)據(jù)進行上傳

? ? ? ? 實際運行的效果就是上圖69-32所示的。此時的點數(shù)就對了,證實了我們定時循環(huán)是250MHz時鐘域跑的,因為一個通道的數(shù)據(jù)量是500MB/s小于PCIe通道0的720MB/s,因此可以無損的傳輸。

圖69-32:250M采樣率下的通道1采集上來的波形


My FPGA PCIe客戶案例69:帶PCIe和FMC接口(HPC)的K7開發(fā)板高速采集的評論 (共 條)

分享到微博請遵守國家法律
德惠市| 图木舒克市| 莱阳市| 馆陶县| 呼伦贝尔市| 昌邑市| 通州区| 新竹县| 鄂温| 望谟县| 霸州市| 历史| 同心县| 西安市| 兴隆县| 岚皋县| 霍城县| 临夏县| 始兴县| 滨海县| 伊宁市| 大足县| 中江县| 贵港市| 鹤岗市| 长顺县| 龙州县| 芮城县| 镇雄县| 固原市| 将乐县| 会理县| 广州市| 景东| 淄博市| 日土县| 云安县| 尼勒克县| 定南县| 龙川县| 曲松县|