《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動(dòng)態(tài) > 在 FPGA 中轉(zhuǎn)換音頻采樣率

在 FPGA 中轉(zhuǎn)換音頻采樣率

在可編程邏輯中有效實(shí)現(xiàn)音頻算法
2008-08-21
作者:Philipp Jacobsoh
?

如今,,即使低成本 FPGA 也能提供遠(yuǎn)遠(yuǎn)大于 DSP 的計(jì)算能力。目前的 FPGA 具有專用乘法器" title="乘法器">乘法器甚至 DSP 乘累加 (MAC) 模塊,能以 550 MHz 以上的時(shí)鐘速度處理信號(hào)。?

?

不過,直到現(xiàn)在,,音頻信號(hào)" title="音頻信號(hào)">音頻信號(hào)處理中還很少需要這些功能。串行實(shí)現(xiàn)千赫級(jí)音頻算法使用的資源與三位數(shù)兆赫級(jí)信號(hào)處理所需的完全相同。?

?

因此,, PLD FPGA 這類可編程邏輯元件很少用來處理低頻信號(hào)。畢竟,,與基于傳統(tǒng) DSP 的實(shí)現(xiàn)相比,,在硬件中并行處理數(shù)學(xué)運(yùn)算無益可言;對(duì)于如此低的采樣率,,大多數(shù)串行 DSP 實(shí)現(xiàn)都是綽綽有余,。其實(shí),音頻應(yīng)用所含乘法運(yùn)算之多曾使其只能使用很大的 FPGA 實(shí)現(xiàn),。因此,,用 DSP 實(shí)現(xiàn)低采樣率音頻應(yīng)用曾經(jīng)比使用大型 FPGA 更有效——成本較低,而且有成熟的軟件支持,。?

?

近些時(shí)期,,使用 Synplicity 公司推出的 Synplify DSP 綜合工具,,甚至可以將具有大量乘法運(yùn)算和低采樣率的算法有效地映射到 FPGA 中的專用 DSP 模塊上。該工具基于 The MathWorks 推出的流行的 MATLAB Simulink 工具,。?

?

算法是用專用模塊集或?qū)S械?/SPAN>M腳本語言描述定義,,然后轉(zhuǎn)換成 RTL 硬件描述語言。該模塊集可用于單速率和多速率實(shí)現(xiàn),。它不僅生成 VHDL Verilog 代碼,,還可以處理定點(diǎn)量化、流水線和循環(huán)展開這類任務(wù),,并且能連接到 Simulink 開發(fā)環(huán)境中的模塊集進(jìn)行仿真(見圖 1),。?

?

應(yīng)用示例:采樣率轉(zhuǎn)換?

?

我們用音頻采樣率轉(zhuǎn)換器作為示例。這種轉(zhuǎn)換器可以將信號(hào)從一種采樣率轉(zhuǎn)換成另一種,,對(duì)信號(hào)的影響極小,。處理具有不同采樣率的信號(hào)時(shí)需要這種轉(zhuǎn)換器。?

?

例如,,光盤的采樣率是 44.1 kHz,,而數(shù)字音頻磁帶的采樣率通常是 48 kHz。但當(dāng)帶有數(shù)據(jù)格式轉(zhuǎn)換時(shí),,用新采樣率播放源數(shù)據(jù)就不夠了,。以數(shù)字音頻磁帶使用的采樣率播放光盤資料會(huì)引起失真。因此,,必須對(duì)采樣率加以轉(zhuǎn)換,。?

?

處理音頻信號(hào)使用的采樣頻率" title="采樣頻率">采樣頻率有多種,常見的有 44.1 kHz,、48 kHz,、96 kHz 192 kHz。轉(zhuǎn)換過程必須慎重,,務(wù)必保持 0-20 kHz 可聽頻率信號(hào)的完整性,。應(yīng)保持信號(hào)所含信息的變化盡量小,以免音質(zhì)下降(圖 2),。?

?

無疑,,實(shí)現(xiàn)音頻采樣率轉(zhuǎn)換器存在FPGA實(shí)現(xiàn)有兩個(gè)問題:?

?

1. 算法問題:?

a. 可能的最高信噪比?

b. 原始信號(hào)所載信息的可能最小變化?

c. 算法的有效描述,因?yàn)?/SPAN> FPGA 中的資源消耗在很大程度上取決于描述的質(zhì)量?

d. 量化?

?

2. 實(shí)現(xiàn)問題:?

a. 算法實(shí)現(xiàn)的邏輯正確性?

b. FPGA 資源限制?

c. 速度優(yōu)化實(shí)現(xiàn)?

d. 延遲?

?

轉(zhuǎn)換需要較高的時(shí)鐘速度,,因?yàn)閷?shí)現(xiàn)要依靠所轉(zhuǎn)換信號(hào)的足夠過采樣" title="過采樣">過采樣,。FPGA 系統(tǒng)時(shí)鐘頻率與所轉(zhuǎn)換信號(hào)頻率之間的差異必須相對(duì)較大。?

?

FDA 工具可幫助生成和驗(yàn)證各種 FIR IIR 濾波器,。該工具是 Simulink 的信號(hào)處理工具箱的組成部分,,Synplify DSP 使用此工具箱實(shí)現(xiàn)濾波器結(jié)構(gòu)?

?

對(duì)于 CD 質(zhì)量的音頻信號(hào),還要求信噪比不得低于 100 dB。專業(yè)應(yīng)用甚至需要 >120 dB 的音頻信號(hào),。就信號(hào)質(zhì)量而言,,其他低頻信號(hào)(如控制電子算法)遠(yuǎn)不如音頻信號(hào)那樣苛刻。?

?

算法?

?

多相 FIR 濾波器結(jié)構(gòu)轉(zhuǎn)換采樣率(異步重采樣),。算法包括兩步,。第一步是頻率過采樣。第二步是線性插值,,這是從給定頻率生成不同頻率時(shí)需要的,。這兩個(gè)頻率相互異步。?

?

以單步進(jìn)行信號(hào)重采樣所需資源較多,,因?yàn)闉V波器會(huì)較復(fù)雜,。這種實(shí)現(xiàn)會(huì)造成數(shù)百萬次乘法運(yùn)算,。這樣的描述效率很低,,應(yīng)當(dāng)避免。如果用第二步實(shí)現(xiàn)線性插值,,所產(chǎn)生的結(jié)構(gòu)就會(huì)簡(jiǎn)單得多(圖 3),。?

?

有效地描述過采樣(第一步)是讓 FPGA 實(shí)現(xiàn)節(jié)省資源的唯一方法。如果用若干級(jí)聯(lián)" title="級(jí)聯(lián)">級(jí)聯(lián)級(jí)而非單一運(yùn)算步驟來實(shí)現(xiàn)這部分電路,,所需運(yùn)算數(shù)量就會(huì)大大減少,。?

?

實(shí)現(xiàn)算法時(shí),必須確定將執(zhí)行運(yùn)算的目標(biāo)架構(gòu)(DSP FPGA),。與具有固定架構(gòu)的數(shù)字信號(hào)處理器不同,,FPGA 可實(shí)現(xiàn)任何架構(gòu)。不過,,當(dāng)實(shí)現(xiàn)大量單獨(dú)的乘法運(yùn)算時(shí),,FPGA 最終會(huì)受到器件尺寸的限制。?

?

所需乘法器的數(shù)量隨著濾波器的 tap 增多而增大,。每個(gè) tap 都需要使用一個(gè) DSP 模塊或乘法器,。當(dāng)級(jí)聯(lián)重采樣級(jí)時(shí),各濾波器必須執(zhí)行復(fù)雜程度很低的功能,。從理論上講,,單獨(dú)的級(jí)越多,濾波器的實(shí)現(xiàn)就越好,。?

?

減少運(yùn)算次數(shù)之方法的數(shù)學(xué)推導(dǎo)在技術(shù)文獻(xiàn)中已有廣泛論述,。實(shí)踐結(jié)果表明,盡管有必要級(jí)聯(lián)濾波器的級(jí),,但必須對(duì)級(jí)聯(lián)的級(jí)數(shù)加以限制,。如果使用級(jí)聯(lián)級(jí)數(shù)過多,就可能超過實(shí)現(xiàn)設(shè)計(jì)的可用資源。如果用 FPGA 作為目標(biāo)架構(gòu),,實(shí)踐證明兩個(gè)級(jí)最好,。?

?

整個(gè)電路由用于過采樣的兩個(gè)相對(duì)簡(jiǎn)單的濾波器和一個(gè)簡(jiǎn)單的線性插值器組成。這種結(jié)構(gòu)可以有效地映射到 FPGA,。?

?

實(shí)現(xiàn)?

?

可以在 Simulink 中用 Synplify DSP 模塊集和 Simulink 的濾波器設(shè)計(jì)與分析 (FDA) 工具實(shí)現(xiàn)該電路,。FDA 工具可幫助生成和驗(yàn)證各種 FIR IIR 濾波器。該工具是 Simulink 的信號(hào)處理工具箱的組成部分,,Synplify DSP 使用此工具箱實(shí)現(xiàn)濾波器結(jié)構(gòu),。?

?

Synplify DSP 模塊集或 FDA 工具提供的所有電路元件 PortIN PortOUT 描述之間定義都能生成 VHDL Verilog 代碼。Simulink 模塊集中的 FFT SCOPE 元件對(duì)動(dòng)態(tài)響應(yīng)進(jìn)行頻譜分析和驗(yàn)證,。這些模塊專門用于功能驗(yàn)證,,包括浮點(diǎn)到定點(diǎn)轉(zhuǎn)換的效果(量化)。這些模塊不在硬件中實(shí)現(xiàn),。?

?

算法實(shí)現(xiàn)的第一部分包括兩個(gè) FIR 濾波器:第一個(gè)濾波器有 512 個(gè) tap,,第二個(gè)濾波器有 64 個(gè) tap。因此,,由過采樣生成的 RTL 代碼共含有 576 個(gè)乘法運(yùn)算,,這正是使用 FPGA 顯得并不具有商業(yè)可行性的原因。這么大的 FPGA 需要具有 640 個(gè) DSP48 模塊的特大 Xilinx? Virtex?-5 XC5VSX95T 器件,,因此會(huì)受到成本制約,。?

?

未映射到專用硬件結(jié)構(gòu)(DSP 模塊)的所有乘法運(yùn)算都必須用通用邏輯資源(LUT 或寄存器)構(gòu)建。這樣會(huì)導(dǎo)致資源要求上升而最高時(shí)鐘速度下降,。與通用邏輯單元相比,,專用的 DSP48 模塊作為乘法器會(huì)有效得多(圖 4)。?

?

優(yōu)化?

?

Synplify DSP 的折疊選項(xiàng)可用來盡量減少所用乘法器的數(shù)量,。在低采樣頻率下工作的電路尤其可從這一優(yōu)化中受益,。?

?

其原理很簡(jiǎn)單。通常,,每個(gè)乘法運(yùn)算使用一個(gè)硬件乘法器,,即使對(duì)于千赫級(jí)采樣頻率也是如此。然而,,FPGA 能以三位數(shù)兆赫級(jí)的時(shí)鐘速度工作,。如果硬件乘法器在 FPGA 的系統(tǒng)頻率下工作,就可以用時(shí)間多路復(fù)用過程按時(shí)序處理乘法運(yùn)算,。?

?

假設(shè)電路的采樣頻率是 3 MHz,,而 FPGA 最高可以在 120 MHz 頻率下運(yùn)行。如果以系統(tǒng)頻率運(yùn)行乘法器,,則每個(gè)硬件乘法器可以執(zhí)行 40 個(gè)運(yùn)算,。因而所需硬件可以減少到 40 分之一,。也就是說可以將上述采樣率轉(zhuǎn)換器(或使用低采樣頻率的任何其他電路)“折疊”到僅需要很少硬件乘法器的程度。所以,,也可以在現(xiàn)有最小的低成本 FPGA 中實(shí)現(xiàn)這種轉(zhuǎn)換器,,從而真正取代 DSP?

?

當(dāng)然,,還可能將計(jì)算特別密集的算法從 DSP 卸載到 FPGA,,從而減輕處理器的負(fù)荷。如果您的 DSP 應(yīng)用已經(jīng)超過性能極限,,而且您已經(jīng)為針對(duì)特定 DSP 架構(gòu)的應(yīng)用源代碼作出重大投入,,那么這種方法尤其有用(圖 5)。?

?

因?yàn)?/SPAN> Synplify DSP 中的折疊功能還支持多速率系統(tǒng),,所以,,與只有一種采樣頻率的系統(tǒng)相比,您可以進(jìn)一步減少所需乘法器的數(shù)量,。過采樣使用兩個(gè) FIR 濾波器完成,。這兩個(gè)濾波器以不同的采樣頻率運(yùn)行。以較高采樣頻率運(yùn)行的濾波器用您指定的折疊系數(shù)折疊,。?

?

以較低采樣頻率運(yùn)行的濾波器用相對(duì)較高的系數(shù)折疊,。獲得此系數(shù)的方法是用兩個(gè)濾波器的采樣頻率之比乘以折疊系數(shù)。例如,,如果一個(gè)濾波器的采樣頻率是另一濾波器的 8 倍,則較快的濾波器用系數(shù) 8 折疊,,而較慢的濾波器用系數(shù) 64 折疊,。?

?

這樣甚至可能生成以通常不能折疊的很高的采樣率運(yùn)行的空間優(yōu)化電路。例如,,如果系統(tǒng)以 200 MHz 采樣率運(yùn)行并使用折疊系數(shù) 2,,那么系統(tǒng)頻率就可以提高到 400 MHz?

?

您還可以將折疊系數(shù)定義為 1,。以最高采樣率運(yùn)行的電路元件不折疊,。但是,以較低采樣頻率運(yùn)行的多速率系統(tǒng)的所有電路元件都可從折疊和空間優(yōu)化實(shí)現(xiàn)中受益,。您只需將系統(tǒng)作為整體為其定義折疊系數(shù)即可,。然后,折疊會(huì)自動(dòng)傳播到所有采樣頻率,。?

?

可以把折疊功能與另一優(yōu)化功能結(jié)合起來,,這就是重定時(shí)功能。如果系統(tǒng)不滿足目標(biāo)頻率要求,,就可以增加流水線級(jí)數(shù),,直到獲得所需速率。這種做法對(duì)于使用高折疊系數(shù)的電路尤為重要,這類電路需要以相對(duì)較高的系統(tǒng)速度工作,。?

?

您還可以為折疊很少或沒有折疊的電路使用重定時(shí),,除非已經(jīng)達(dá)到 FPGA 的性能極限??梢酝ㄟ^增加流水線級(jí)數(shù)來減少兩個(gè)寄存器之間的組合邏輯門的數(shù)量(邏輯級(jí)數(shù)),,這樣可以提高系統(tǒng)時(shí)鐘速度。?

?

在生成 RTL 代碼時(shí),,Synplify DSP 工具進(jìn)行時(shí)序分析,,其中要考慮所需的采樣頻率、折疊系數(shù)和 FPGA 的目標(biāo)架構(gòu),。例如,,與在較慢的低成本 Spartan-3A DSP FPGA 中實(shí)現(xiàn)的完全相同的電路相比可以使用較少的流水線級(jí)數(shù)優(yōu)化映射到快速 Virtex-5 FPGA 的電路,。?

?

可以用 FPGA 提供的大量寄存器進(jìn)行這種優(yōu)化,。寄存器可以大量使用,不像乘法器或 LUT(查找表)那樣可以很快用光,,這意味著可以使用寄存器輕而易舉的顯著提高系統(tǒng)時(shí)鐘速度,。?

?

當(dāng)然,增加流水線級(jí)數(shù)會(huì)增加系統(tǒng)延遲,。例如,,如果使用重定時(shí)系數(shù) 8,計(jì)算結(jié)果就會(huì)晚八個(gè)系統(tǒng)時(shí)鐘周期(不是采樣頻率周期)出現(xiàn)在 FPGA 的輸出上,。向系統(tǒng)中嵌入電路時(shí)必須考慮到這一點(diǎn)(圖 6),。?

?

特別重要的是,務(wù)必確保上述優(yōu)化不會(huì)影響 Simulink 中描述的原始 MATLAB 模型,。通過驗(yàn)證可以對(duì)算法進(jìn)行鑒定,,并且對(duì)量化效應(yīng)的影響予以表述。Synplify DSP 軟件模塊集允許使用截?cái)啵ㄈコ裏o關(guān)位),、圓整(在下溢情況下)或飽和(在上溢情況下)進(jìn)行從浮點(diǎn)到定點(diǎn)的轉(zhuǎn)換,。一旦仿真顯示算法工作正常,即可生成 RTL 代碼,。優(yōu)化 VHDL Verilog 代碼可能改變延遲,,但不會(huì)改變電路的操作。?

?

結(jié)論?

?

Synplify DSP 工具基于 The MathWorks 推出的行業(yè)標(biāo)準(zhǔn) MATLAB/Simulink 軟件,。模塊集提供的標(biāo)準(zhǔn)元件庫可用于實(shí)現(xiàn)復(fù)雜算法,。除了加法、增益和延遲等基本元件,,該庫還包含 FIR IIR 濾波器等許多復(fù)雜功能和 CORDIC 算法,。所有功能包括高度復(fù)雜的 FFT Viterbi 解碼器均可任意參數(shù)化,。還可以創(chuàng)建用戶定義庫或者將現(xiàn)有的 VHDL Verilog 代碼集成到 Simulink 模型中,。?

?

Synplify DSP 可以實(shí)現(xiàn)單速率和多速率系統(tǒng),。使用折疊、多通道化或重定時(shí)功能可以針對(duì)尺寸或速度優(yōu)化代碼,。生成的 RTL 代碼都是未加密的通用代碼,,可以使用常用工具綜合。?

?

為了取得 FPGA 的最佳結(jié)果,,Synplicity 推薦使用其 Synplify Pro 綜合工具?,F(xiàn)在還可以使用該開發(fā)環(huán)境的 ASIC 變量。?

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。