FPGA+DSP的高速AD采集處理開發詳解

      網友投稿 2097 2025-03-31

      一、案例說明

      Kintex-7 FPGA使用SRIO IP核作為Initiator,通過AD9613模塊采集AD數據。AD9613采樣率為250MSPS,雙通道12bit,12bit按照16bit發送,因此數據量為16bit * 2 * 250M = 8Gbps;

      AD數據通過SRIO由Kintex-7發送到C6678 DSP(Target)的0x0C3F0000~0x0C3F7FFF的地址空間,數據量為32KByte,使用SWRITE方式,期間每傳16KByte數據后就發送一個DOORBELL信息,讓C6678做乒乓處理。Kintex-7通過SRIO與C6678連接,共4個lane,每個lane的通信速率為5Gbps,數據有效帶寬為20Gbps?*?80% = 16Gbps;

      采集到的AD數據可分別通過Xilinx Vivado和TI CCS軟件查看波形,并在C6678做FFT處理。

      此開發案例基于創龍Kintex-7+C6678評估板TL6678F-EasyEVM進行。

      二、案例框圖

      三、案例演示

      硬件連接:

      將創龍AD9613高速AD模塊TL9613/9706F(此模塊集成高速DA,DA芯片為AD9706)通過FMC接口與評估板連接。

      信號發生器設置成兩路正弦波輸出,幅度設置:1.5Vpp以及無直流偏置,頻率設置:1MHz。

      信號發生器的兩路輸出分別連接到模塊的ADC_CHA、ADC_CHB。

      FPGA端

      參考TL6678F-EasyEVM評估板光盤用戶手冊《基于下載器的程序固化與加載》文檔中“Vivado下bit文件加載步驟”章節,將tl_fmc_ad9613_srio_tl6678f_xc7k325t.bit文件燒錄到FPGA。燒寫bit文件時,指定調試文件tl_fmc_ad9613_srio_tl6678f_xc7k325t.ltx,可以觀察到ILA調試信號,查看ADC采樣波形。

      ADC兩路信號tl_fmc_ad9613_srio_bd_i/xlslice_l_Dout[11:0]

      和tl_fmc_ad9613_srio_bd_i/xlslice_l_Dout[11:0]在ILA內嵌邏輯分析儀中均設置為有符號數、模擬波形顯示,如下圖所示:

      ILA觸發抓取兩路ADC采樣波形,如下圖所示(兩路正弦波形):

      2.?DSP端

      參考TL6678F-EasyEVM評估板光盤用戶手冊《CCS工程的生成與加載》文檔,在“tl-fmc-ad9613-srio/DSP/src”目錄下建立CCS工程并導入到CCS軟件中編譯生成tl-srio-fft.out文件,通過仿真器加載tl-srio-fft.out文件到DSP端。將tl-srio-fft.out下載到C6678 Core0?~?Core7核中,在tl-srio-fft.c窗口中紅色框標注的地方創建breakpoint,使DSP程序運行后能暫停,如下圖所示:

      因為Core0負責系統初始化,為確保其他核跟Core0是同步開始傳輸,所以Core0核最后運行(Core0核可查看原始波形以及振幅波形,其他核僅可查看原始波形)。運行程序,DSP程序正常暫停,可通過圖像波形形式查看數據,使用Graph工具,輸入下述配置,查看Channel A波形數據。

      輸入下圖配置,查看Channel A經過FFT振幅波形。

      FPGA+DSP的高速AD采集處理開發詳解

      若出現波形顯示不正常或沒有波形產生,請參考以下操作:

      1.請確保已正常加載GEL文件。

      2.請確保Breakpoint設置成功,DSP程序能夠暫停。

      3.請硬件斷電重啟后重新燒寫FPGA和DSP程序。

      頻率計算:

      FFT變換點數N=512,AD采樣率Fs為250MSPS。某點n所表示的頻率為:Fn=n*(Fs/N) (n?>=0)。當n=0時,Fn為0,因為第一點表示的是直流分量,所以頻率為0,幅值也為0,因為該正弦波沒有直流分量。

      從上面的FFT振幅波形圖中可以看出,Channel A在第6個點處有信號,所以對應的頻率為Fn =?6 *?(Fs/N) = 6 * 250MHz?/?512 =?2.9296875 MHz。對應原始信號3MHz。

      此處存在誤差,目前采樣點為512個,一個點表示Fs/N=?488.281KHZ,所以如果需要提高精度,用戶可以提高采樣點。

      通過查看串口輸入數據,也可查看處理結果。其中peak point代表振幅圖峰值點橫坐標;amplitude代表振幅圖幅值;input frequency根據振幅圖計算的輸入頻率。

      四、關鍵代碼說明

      管腳約束

      例程管腳約束文件位于TL6678F-EasyEVM評估板光盤Vivado工程“src\constraints”目錄下。

      2.?FPGA端的代碼

      頂層文件tl_fmc_ad9613_srio.v的主要功能:

      端口定義。

      使用STARTUPE2原語提供的EOS作為系統復位信號,使用STARTUPE2原語提供的內部65MHz時鐘CFGMCLK作為系統時鐘。

      配置時鐘芯片,輸出125MHz的參考時鐘為SRIO IP核。

      調試Block design。

      可以查看生成的RTL原理圖:

      3.?DSP端的代碼

      (1)main函數初始化srio子系統,hwi中斷注冊。

      (2)srio_db_isr響應srio doorbell中斷,以郵箱方式通知Core0?~ Core7核同時進行FFT運算。

      (3)tl_srio_fft任務等待郵箱信號,Core0?~ Core7核同時進行FFT運算。

      (4)tl_fft_amplitude任務等待信號量置位,Core0核進行FFT振幅運算,通過串口打印數據處理結果。

      五、Block Design說明

      Block Design如下:

      1. Select?IO IP核配置說明

      參考TL6678F-EasyEVM評估板光盤tl-fmc-ad9613例程的IP核與模塊介紹章節。

      2. SRIO IP配置說明

      SRIO鏈路寬度設置為4個lane,通信頻率為5Gbps(即每個lane均為5Gbps),參考時鐘為125MHz;設置8bit位寬的ID,且ID=0xFF。

      Port I/O Style選擇為Initiator/Target模式,其中Condensed I/O接收和發送均使用一個AXI4-Stream通道,Initiator/Target接收和發送采用不同的AXI4-Stream通道。

      I/O Format:I/O端口配置使用HELLO格式包。

      其他參數保持保持默認值即可。

      更詳細說明請查閱IP核手冊:《pg007_srio_gen2.pdf》。

      3. data_to_srio RTL模塊功能

      連續不停地將AD9613采集的數據寫入FPGA FIFO。

      控制FIFO讀操作,每次從FIFO讀取完指定的數據并通過AXI4-stream接口傳輸到SRIO IP。其中本例程每發送16KByte的數據就發送一個DOORBELL信息,通知DSP(Target)對數據進行處理。

      雙擊block?degin中的模塊,可配置:

      Doorb Triger Threshold:?門鈴觸發閾值,本例設置為16384Bytes =?16KB,即通過SRIO發送16KB的數據后就發送一個DOORBELL信息。

      Srio?Doorb info1:發送完Doorb Triger Threshold個字節的數據之后發送的門鈴信息。

      Srio Doorb info2:發送完2倍的Doorb Triger Threshold個數據之后發送的門鈴信息。

      Srio?Target Addr:SRIO?Target的內存地址。(本例設置的為DSP的MSMC地址0x0C3F0000)

      Srio Target Id:SRIO Target的ID。

      Srio Local Id:SRIO Iitiator的ID。

      代碼解釋:

      端口定義

      FIFO原語。

      配置FIFO大小為36 Byte,讀寫數據的位寬為64bit(FIFO深度為512)。ALMOST_EMPTY_OFFSET和ALMOST_FULL_OFFSET配置為0x20,即32;即當FIFO寫入數據個數大于32個,ALMOST_FULL輸出高電平。

      本例FIFO設置位寬為64bit,所以64bit?* 32 /?8 = 256 Byte,即當FIFO寫入數據大于256 Byte,ALMOST_FULL會輸出高電平。

      因為SRIO的package最大有效數據為256 Byte,為了確保SRIO能傳輸完整的數據包,所以設置FIFO的門限值為256Byte.

      FIFO原語詳細說明請查閱:《ug473_7Series_Memory_Resources.pdf》。

      FIFO寫控制

      因為AD9613輸出的AD數據為雙通道的24bit,所以分別將兩個通道的數據補成16bit。然后保存到data_in_store中。

      因為FIFO的位寬64bit,而上個步驟將AD的雙通道數據補成了32bit,所以每存夠兩個32bit的AD數據,湊成64bit的data_in_store,再使能fifo_wr_en信號,把64bit的數據寫入FIFO。

      后寫入的數據存在高32位,發送到SRIO Target端(DSP),方便其按順序處理數據。

      其中wr_cnt為一個1bit,計數只有0和1兩個值。

      讀取FIFO數據并打包HELLO格式發送數據。

      HELLO包頭拼接:

      發送門鈴

      狀態切換

      本例設置的TOTAL_DATA_SIZE為32KByte,即每發送16KByte的數據包之后發送一個門鈴信息。

      單片機 FPGA

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Excel最小單元格拆分的方法
      下一篇:如何將工作表合并為一個并在Excel刪除重復項?
      相關文章
      亚洲人成网男女大片在线播放 | 337p日本欧洲亚洲大胆色噜噜| 国产青草亚洲香蕉精品久久 | 国产亚洲精久久久久久无码| 亚洲国产电影av在线网址| 亚洲av永久中文无码精品| 亚洲国产精品成人AV在线 | 中国china体内裑精亚洲日本| 亚洲最大成人网色香蕉| 国产.亚洲.欧洲在线| 亚洲欧洲日本在线观看| 亚洲色大成网站www| 亚洲精品又粗又大又爽A片| 亚洲av无码无线在线观看| 久久精品国产亚洲AV天海翼| 在线精品自拍亚洲第一区| 亚洲乱亚洲乱少妇无码| 国产精品亚洲综合一区| 在线观看午夜亚洲一区| 国产乱辈通伦影片在线播放亚洲| 亚洲中文字幕无码日韩| 亚洲va国产va天堂va久久| 亚洲第一区香蕉_国产a| 亚洲美女激情视频| 亚洲xxxxxx| 亚洲av色香蕉一区二区三区| 亚洲av午夜成人片精品电影| 久久久久久久亚洲精品| 国产∨亚洲V天堂无码久久久| 亚洲成人在线网站| 亚洲国产综合第一精品小说| 亚洲偷偷自拍高清| 性色av极品无码专区亚洲| 亚洲视频在线精品| 国产AV无码专区亚洲A∨毛片| 18亚洲男同志videos网站| 丁香婷婷亚洲六月综合色| 国产精品亚洲lv粉色| 亚洲精品无码你懂的网站| 日本红怡院亚洲红怡院最新| 亚洲精品影院久久久久久|