LabVIEW FPGA高級(jí)篇:實(shí)驗(yàn)73-通用FPGA上利用LabVIEW DFDT實(shí)現(xiàn)DSD音頻解碼器

1、概述
????????本節(jié)實(shí)驗(yàn)向大家展示了如何使用LabVIEW數(shù)字濾波器設(shè)計(jì)工具包(DFDT)在通用FPGA平臺(tái)(比如黑金的Spartan6、Artix7、Kintex7)上實(shí)現(xiàn)直接比特流數(shù)字解碼DSD音頻解碼器
2、簡(jiǎn)介
????????Super Audio CD? (SACD)是由索尼和飛利浦開(kāi)發(fā)的高分辨率CD音頻格式,SACD使用Direct Stream Digital? (DSD)技術(shù)對(duì)音頻信號(hào)進(jìn)行過(guò)采樣并將它們存儲(chǔ)為 delta-sigma調(diào)制的數(shù)字音頻。DSD的采樣率為2.82MHz,是CD音頻采樣率44.1kHz的64倍。由于采樣率高,DSD信號(hào)相比于普通CD可以更準(zhǔn)確地還原出原始模擬信號(hào)。
????????要檢索音頻信號(hào),DSD解碼器先通過(guò)低通濾波,然后對(duì)DSD流進(jìn)行1/64抽取。我們可以使用LabVIEW數(shù)字濾波器設(shè)計(jì)工具包(DFDT)在市面上能買到或者自己做的通用FPGA板子(例如,黑金的Spartan6、A7、K7開(kāi)發(fā)板)上實(shí)現(xiàn)DSD解碼器。
????????DSD解碼器從數(shù)字輸入 (DI)端口獲取原始DSD信號(hào),然后抽取信號(hào),最后將提取出來(lái)的音頻信號(hào)通過(guò)USB或者千兆以太網(wǎng)或者PCIe發(fā)送到主機(jī)PC進(jìn)行播放、存儲(chǔ)、流盤,或者直接通過(guò)AO模塊進(jìn)行模擬輸出。下面的圖1顯示了整個(gè)操作過(guò)程。

????????由于DSD解碼需要處理不同的采樣率,因此我們必須要為DSD解碼器設(shè)計(jì)多速率濾波器。NI給我們提供了一個(gè)功能超級(jí)強(qiáng)大的濾波器設(shè)計(jì)工具包,簡(jiǎn)稱DFDT。早在本《LabVIEW FPGA開(kāi)發(fā)寶典》前面的第30個(gè)實(shí)驗(yàn)里面已經(jīng)給用戶講解過(guò)了如何使用DFDT設(shè)計(jì)并生成一個(gè)可以在FPGA里面編譯運(yùn)行的帶通濾波器。
????????但是本節(jié)實(shí)驗(yàn)顯然要比實(shí)驗(yàn)30復(fù)雜的多,我們需要在FPGA芯片里面實(shí)現(xiàn)多級(jí)多速率濾波器才行。好在有了DFDT工具包,我們可以使用Multirate FIR Design Express VI 或Multistage Multirate Filter Design Express VI以交互方式設(shè)計(jì)多速率濾波器。 ?但是,由于DSD解碼器的抽取因子為64,非常大,因此單級(jí)多速率FIR濾波器需要大量抽頭才能滿足頻率響應(yīng)的要求。在這種情況下,濾波器可能無(wú)法以DSD要求的2.82 MHz輸入數(shù)據(jù)速率來(lái)實(shí)時(shí)逐點(diǎn)處理數(shù)據(jù)。關(guān)于抽取濾波器可以處理的輸入數(shù)據(jù)速率與濾波器所需的FIR抽頭數(shù)量之間的關(guān)系,可以參考下面不等式:

????????如果將DSD解碼器設(shè)計(jì)為單級(jí)多速率濾波器,則抽頭數(shù)會(huì)變得很大,以至于無(wú)法滿足上面的不等式。因此,我們必須為DSD解碼器設(shè)計(jì)一個(gè)多級(jí)多速率濾波器。這種情況下,用戶只能使用“多級(jí)多速率濾波器設(shè)計(jì)快速VI”通過(guò)交互式來(lái)設(shè)計(jì)DSD濾波器。
????????提醒:要完成本節(jié)實(shí)驗(yàn)提出的需求,需要安裝LabVIEW FPGA工具包和DFDT數(shù)字濾波器設(shè)計(jì)工具包。
3、設(shè)計(jì)多級(jí)多速率濾波器
????????首先在LabVIEW上位機(jī)里面,將Multistage Multirate Filter Design Express VI拖拽到程序框圖上,然后會(huì)自動(dòng)彈出如下圖2顯示的多級(jí)多速率濾波器參數(shù)配置對(duì)話框。接著,在Floating-Point Design選項(xiàng)頁(yè)里面設(shè)置好所需的參數(shù)后,不要關(guān)閉,讓對(duì)話框保持打開(kāi)狀態(tài)。

4、將浮點(diǎn)濾波器轉(zhuǎn)換為定點(diǎn)濾波器
????????要想直接在FPGA芯片里面實(shí)現(xiàn)濾波器,我們還需要將浮點(diǎn)型濾波器轉(zhuǎn)換為定點(diǎn)型濾波器。完成以下兩個(gè)步驟,可以將前面我們創(chuàng)建的浮點(diǎn)濾波器轉(zhuǎn)換為定點(diǎn)濾波器。
????????1)對(duì)不同字長(zhǎng)的濾波器系數(shù)進(jìn)行量化,直到頻率響應(yīng)滿足DSD要求。我們可以通過(guò)在Fixed-Point Quantization選項(xiàng)頁(yè)里面指定Coefficients word lengths、Coefficients scale type和Gain word length來(lái)量化濾波器系數(shù),如圖3所示。

? ? ????2)單擊“確定”關(guān)閉配置對(duì)話框。接著完成以下5步以使用DFD FXP NStage Mrate Modeling VI為濾波器指定其他所需參數(shù):
????????1-將DFD FXP NStage Mrate Modeling VI放在程序框圖上
????????2-右鍵單擊輸入字長(zhǎng)input并選擇Create?Control
????????3-對(duì)輸出字長(zhǎng)和級(jí)間字長(zhǎng)輸入重復(fù)步驟 2
????????4-指定輸入字長(zhǎng)、輸出字長(zhǎng)和級(jí)間字長(zhǎng)
????????5-將前面“多級(jí)多速率濾波器設(shè)計(jì)快速VI”的“多速率濾波器”端口輸出連接到DFD FXP NStage Mrate Modeling VI對(duì)應(yīng)的輸入端口。
????????完成后的LabVIEW程序框圖,如圖4所示:

5、先在上位機(jī)PC上驗(yàn)證定點(diǎn)濾波器的數(shù)值精度
????????在生成FPGA可以直接編譯運(yùn)行的濾波器代碼之前,我們還需要驗(yàn)證一下我們?cè)O(shè)計(jì)的這個(gè)多級(jí)多速率濾波器的數(shù)值精度。大家可以使用DFD FXP NStage MRate Simulation VI在PC上模擬驗(yàn)證該濾波器。完成以下4步可以驗(yàn)證前面我們?cè)O(shè)計(jì)創(chuàng)建的濾波器性能是否滿足設(shè)計(jì)指標(biāo):
????????1-將DFD FXP NSStage MRate Simulation VI放置在程序框圖上
????????2-再把多速率濾波器DFD FXP NStage Mrate Modeling VI的輸出連到多速率濾波器DFD FXP NStage MRate Simulation VI的輸入
????????3-將DSD信號(hào)連接到該VI的輸入信號(hào)
????????4-運(yùn)行VI
????????我們可以將模擬的FXP定點(diǎn)濾波器數(shù)值精度與參考浮點(diǎn)濾波器的數(shù)值精度進(jìn)行比較。
6、 生成LabVIEW FPGA代碼
????????如果前面模擬的定點(diǎn)濾波器的數(shù)值精度滿足 DSD音頻解壓碼要求,可以使用DFD FXP NStage MRate Code Generator VI將前面創(chuàng)建好的濾波器生成LabVIEW FPGA代碼。完成以下4步即可生成定點(diǎn)類型的多級(jí)多速率濾波器對(duì)應(yīng)的LabVIEW FPGA代碼。
????????1-將DFD FXP NStage MRate代碼生成器VI放在程序框圖上;
????????2-指定#channels、目標(biāo)文件夾路徑和濾波器控件名稱;
????????3-將多速率濾波器DFD FXP NStage Mrate Modeling VI的輸出連到DFD FXP NStage MRate代碼發(fā)生器VI的輸入,程序框圖如圖5所示;
????????4-運(yùn)行VI,即可在目標(biāo)路徑文件夾中生成LabVIEW FPGA濾波器。

????????通過(guò)將DFD FXP NStage MRate 代碼生成器VI輸出的“采樣頻率/FPGA時(shí)鐘”數(shù)值乘以濾波器運(yùn)行的FPGA時(shí)鐘頻率,可以得到 FPGA濾波器每個(gè)通道最大可接受的采樣頻率。
????????用戶可以通過(guò)在項(xiàng)目瀏覽器窗口右鍵單擊FPGA目標(biāo)并選擇Properties?Top-Level Clock來(lái)查看濾波器運(yùn)行的FPGA時(shí)鐘速率。如果FPGA濾波器每個(gè)通道的最大可接受采樣頻率未達(dá)到DSD要求的2.82MHz,則返回到前面的多級(jí)多速率濾波器設(shè)計(jì)部分以增加濾波級(jí)數(shù)。
????????實(shí)際上,如果我們按照前面將#channels控件值設(shè)置為1,那么生成的濾波器可以以5MHz的采樣率來(lái)處理DSD輸入的數(shù)字信號(hào),完全滿足了FPGA芯片對(duì) DSD的最低要求。
????????注意:上面圖5里面有一個(gè)模擬生成DSD信號(hào)的仿真VI,這個(gè)VI可以將實(shí)際的模擬電壓信號(hào)經(jīng)過(guò)Delta-sigma編碼轉(zhuǎn)成PDM密度信號(hào),如圖6所示。今后如果有客戶需要用到Delta-sigma編碼和PDM轉(zhuǎn)換,可以參考本節(jié)實(shí)驗(yàn)里面的這個(gè)VI,如圖7所示。


7、 在 FPGA 目標(biāo)上實(shí)現(xiàn) DSD 解碼器
????????將前面生成出來(lái)的 LabVIEW FPGA濾波器模塊拖放到通用的FPGA開(kāi)發(fā)板項(xiàng)目終端下,比如本節(jié)實(shí)驗(yàn)里面我們采用黑金超高性價(jià)比的Spartan6開(kāi)發(fā)板,如圖7所示。

????????注意:LabVIEW FPGA項(xiàng)目中的濾波器模塊包含兩個(gè)FIFO。輸入FIFO為“DSD_DataIn”,輸出FIFO為“DSD_DataOut”。另外,這個(gè)過(guò)濾器模塊包含了3個(gè)濾波器VI,這就是我們?cè)谇懊嬖O(shè)計(jì)的多級(jí)多速率濾波器中的3個(gè)重要組成部分,如圖8所示。

????????圖8所示的FPGA DSD完整版程序框圖,一共包含3部分代碼:利用FPGA DIO引腳讀取DSD信號(hào)到“輸入FIFO”定時(shí)循環(huán);過(guò)濾和抽取DSD信號(hào)的3級(jí)濾波器VI線程;將解碼后的DSD音頻信號(hào)經(jīng)過(guò)“輸出FIFO”再通過(guò)千兆以太網(wǎng)FIFO傳輸?shù)缴衔粰C(jī)。
????????最后我們給出下位機(jī)FPGA完整版的DSD解碼器程序框圖,如圖9所示。

8、結(jié)論
????????本節(jié)實(shí)驗(yàn)給大家演示了如何使用LabVIEW數(shù)字濾波器設(shè)計(jì)工具包DFDT在通用的FPGA平臺(tái)上(不一定是NI硬件,也可以是網(wǎng)上通用的FPGA開(kāi)發(fā)板)實(shí)現(xiàn)的DSD實(shí)時(shí)逐點(diǎn)硬件解碼器。
????????LabVIEW、數(shù)字濾波器設(shè)計(jì)工具包和通用FPGA硬件之間的無(wú)縫集成,使它們成為一個(gè)更加通用的軟硬件結(jié)合的FPGA嵌入式開(kāi)發(fā)平臺(tái),為用戶今后在設(shè)計(jì)和驗(yàn)證復(fù)雜的FPGA濾波器時(shí)節(jié)省大量的時(shí)間和硬件成本。