如今,即使低成本 FPGA 也能提供遠遠大于 DSP 的計算能力。目前的 FPGA 具有專用乘法器" title="乘法器">乘法器甚至 DSP 乘累加 (MAC) 模塊,能以 550 MHz 以上的時鐘速度處理信號。?
?
不過,直到現在,音頻信號" title="音頻信號">音頻信號處理中還很少需要這些功能。串行實現千赫級音頻算法使用的資源與三位數兆赫級信號處理所需的完全相同。?
?
因此,像 PLD 和 FPGA 這類可編程邏輯元件很少用來處理低頻信號。畢竟,與基于傳統(tǒng) DSP 的實現相比,在硬件中并行處理數學運算無益可言;對于如此低的采樣率,大多數串行 DSP 實現都是綽綽有余。其實,音頻應用所含乘法運算之多曾使其只能使用很大的 FPGA 實現。因此,用 DSP 實現低采樣率音頻應用曾經比使用大型 FPGA 更有效——成本較低,而且有成熟的軟件支持。?
?
近些時期,使用 Synplicity 公司推出的 Synplify DSP 綜合工具,甚至可以將具有大量乘法運算和低采樣率的算法有效地映射到 FPGA 中的專用 DSP 模塊上。該工具基于 The MathWorks 推出的流行的 MATLAB 和 Simulink 工具。?
?
算法是用專用模塊集或專有的“M”腳本語言描述定義,然后轉換成 RTL 硬件描述語言。該模塊集可用于單速率和多速率實現。它不僅生成 VHDL 和 Verilog 代碼,還可以處理定點量化、流水線和循環(huán)展開這類任務,并且能連接到 Simulink 開發(fā)環(huán)境中的模塊集進行仿真(見圖 1)。?
?
應用示例:采樣率轉換?
?
我們用音頻采樣率轉換器作為示例。這種轉換器可以將信號從一種采樣率轉換成另一種,對信號的影響極小。處理具有不同采樣率的信號時需要這種轉換器。?
?
例如,光盤的采樣率是 44.1 kHz,而數字音頻磁帶的采樣率通常是 48 kHz。但當帶有數據格式轉換時,用新采樣率播放源數據就不夠了。以數字音頻磁帶使用的采樣率播放光盤資料會引起失真。因此,必須對采樣率加以轉換。?
?
處理音頻信號使用的采樣頻率" title="采樣頻率">采樣頻率有多種,常見的有 44.1 kHz、48 kHz、96 kHz 和 192 kHz。轉換過程必須慎重,務必保持 0-20 kHz 可聽頻率信號的完整性。應保持信號所含信息的變化盡量小,以免音質下降(圖 2)。?
?
無疑,實現音頻采樣率轉換器存在FPGA實現有兩個問題:?
?
1. 算法問題:?
a. 可能的最高信噪比?
b. 原始信號所載信息的可能最小變化?
c. 算法的有效描述,因為 FPGA 中的資源消耗在很大程度上取決于描述的質量?
d. 量化?
?
2. 實現問題:?
a. 算法實現的邏輯正確性?
b. FPGA 資源限制?
c. 速度優(yōu)化實現?
d. 延遲?
?
轉換需要較高的時鐘速度,因為實現要依靠所轉換信號的足夠過采樣" title="過采樣">過采樣。FPGA 系統(tǒng)時鐘頻率與所轉換信號頻率之間的差異必須相對較大。?
?
FDA 工具可幫助生成和驗證各種 FIR 和 IIR 濾波器。該工具是 Simulink 的信號處理工具箱的組成部分,Synplify DSP 使用此工具箱實現濾波器結構?
?
對于 CD 質量的音頻信號,還要求信噪比不得低于 100 dB。專業(yè)應用甚至需要 >120 dB 的音頻信號。就信號質量而言,其他低頻信號(如控制電子算法)遠不如音頻信號那樣苛刻。?
?
算法?
?
多相 FIR 濾波器結構轉換采樣率(異步重采樣)。算法包括兩步。第一步是頻率過采樣。第二步是線性插值,這是從給定頻率生成不同頻率時需要的。這兩個頻率相互異步。?
?
以單步進行信號重采樣所需資源較多,因為濾波器會較復雜。這種實現會造成數百萬次乘法運算。這樣的描述效率很低,應當避免。如果用第二步實現線性插值,所產生的結構就會簡單得多(圖 3)。?
?
有效地描述過采樣(第一步)是讓 FPGA 實現節(jié)省資源的唯一方法。如果用若干級聯(lián)" title="級聯(lián)">級聯(lián)級而非單一運算步驟來實現這部分電路,所需運算數量就會大大減少。?
?
實現算法時,必須確定將執(zhí)行運算的目標架構(DSP 或 FPGA)。與具有固定架構的數字信號處理器不同,FPGA 可實現任何架構。不過,當實現大量單獨的乘法運算時,FPGA 最終會受到器件尺寸的限制。?
?
所需乘法器的數量隨著濾波器的 tap 增多而增大。每個 tap 都需要使用一個 DSP 模塊或乘法器。當級聯(lián)重采樣級時,各濾波器必須執(zhí)行復雜程度很低的功能。從理論上講,單獨的級越多,濾波器的實現就越好。?
?
減少運算次數之方法的數學推導在技術文獻中已有廣泛論述。實踐結果表明,盡管有必要級聯(lián)濾波器的級,但必須對級聯(lián)的級數加以限制。如果使用級聯(lián)級數過多,就可能超過實現設計的可用資源。如果用 FPGA 作為目標架構,實踐證明兩個級最好。?
?
整個電路由用于過采樣的兩個相對簡單的濾波器和一個簡單的線性插值器組成。這種結構可以有效地映射到 FPGA。?
?
實現?
?
可以在 Simulink 中用 Synplify DSP 模塊集和 Simulink 的濾波器設計與分析 (FDA) 工具實現該電路。FDA 工具可幫助生成和驗證各種 FIR 和 IIR 濾波器。該工具是 Simulink 的信號處理工具箱的組成部分,Synplify DSP 使用此工具箱實現濾波器結構。?
?
Synplify DSP 模塊集或 FDA 工具提供的所有電路元件(在 PortIN 和 PortOUT 描述之間定義)都能生成 VHDL 或 Verilog 代碼。Simulink 模塊集中的 FFT 和 SCOPE 元件對動態(tài)響應進行頻譜分析和驗證。這些模塊專門用于功能驗證,包括浮點到定點轉換的效果(量化)。這些模塊不在硬件中實現。?
?
算法實現的第一部分包括兩個 FIR 濾波器:第一個濾波器有 512 個 tap,第二個濾波器有 64 個 tap。因此,由過采樣生成的 RTL 代碼共含有 576 個乘法運算,這正是使用 FPGA 顯得并不具有商業(yè)可行性的原因。這么大的 FPGA 需要具有 640 個 DSP48 模塊的特大 Xilinx? Virtex?-5 XC5VSX95T 器件,因此會受到成本制約。?
?
未映射到專用硬件結構(DSP 模塊)的所有乘法運算都必須用通用邏輯資源(LUT 或寄存器)構建。這樣會導致資源要求上升而最高時鐘速度下降。與通用邏輯單元相比,專用的 DSP48 模塊作為乘法器會有效得多(圖 4)。?
?
優(yōu)化?
?
Synplify DSP 的折疊選項可用來盡量減少所用乘法器的數量。在低采樣頻率下工作的電路尤其可從這一優(yōu)化中受益。?
?
其原理很簡單。通常,每個乘法運算使用一個硬件乘法器,即使對于千赫級采樣頻率也是如此。然而,FPGA 能以三位數兆赫級的時鐘速度工作。如果硬件乘法器在 FPGA 的系統(tǒng)頻率下工作,就可以用時間多路復用過程按時序處理乘法運算。?
?
假設電路的采樣頻率是 3 MHz,而 FPGA 最高可以在 120 MHz 頻率下運行。如果以系統(tǒng)頻率運行乘法器,則每個硬件乘法器可以執(zhí)行 40 個運算。因而所需硬件可以減少到 40 分之一。也就是說可以將上述采樣率轉換器(或使用低采樣頻率的任何其他電路)“折疊”到僅需要很少硬件乘法器的程度。所以,也可以在現有最小的低成本 FPGA 中實現這種轉換器,從而真正取代 DSP。?
?
當然,還可能將計算特別密集的算法從 DSP 卸載到 FPGA,從而減輕處理器的負荷。如果您的 DSP 應用已經超過性能極限,而且您已經為針對特定 DSP 架構的應用源代碼作出重大投入,那么這種方法尤其有用(圖 5)。?
?
因為 Synplify DSP 中的折疊功能還支持多速率系統(tǒng),所以,與只有一種采樣頻率的系統(tǒng)相比,您可以進一步減少所需乘法器的數量。過采樣使用兩個 FIR 濾波器完成。這兩個濾波器以不同的采樣頻率運行。以較高采樣頻率運行的濾波器用您指定的折疊系數折疊。?
?
以較低采樣頻率運行的濾波器用相對較高的系數折疊。獲得此系數的方法是用兩個濾波器的采樣頻率之比乘以折疊系數。例如,如果一個濾波器的采樣頻率是另一濾波器的 8 倍,則較快的濾波器用系數 8 折疊,而較慢的濾波器用系數 64 折疊。?
?
這樣甚至可能生成以通常不能折疊的很高的采樣率運行的空間優(yōu)化電路。例如,如果系統(tǒng)以 200 MHz 采樣率運行并使用折疊系數 2,那么系統(tǒng)頻率就可以提高到 400 MHz。?
?
您還可以將折疊系數定義為 1。以最高采樣率運行的電路元件不折疊。但是,以較低采樣頻率運行的多速率系統(tǒng)的所有電路元件都可從折疊和空間優(yōu)化實現中受益。您只需將系統(tǒng)作為整體為其定義折疊系數即可。然后,折疊會自動傳播到所有采樣頻率。?
?
可以把折疊功能與另一優(yōu)化功能結合起來,這就是重定時功能。如果系統(tǒng)不滿足目標頻率要求,就可以增加流水線級數,直到獲得所需速率。這種做法對于使用高折疊系數的電路尤為重要,這類電路需要以相對較高的系統(tǒng)速度工作。?
?
您還可以為折疊很少或沒有折疊的電路使用重定時,除非已經達到 FPGA 的性能極限??梢酝ㄟ^增加流水線級數來減少兩個寄存器之間的組合邏輯門的數量(邏輯級數),這樣可以提高系統(tǒng)時鐘速度。?
?
在生成 RTL 代碼時,Synplify DSP 工具進行時序分析,其中要考慮所需的采樣頻率、折疊系數和 FPGA 的目標架構。例如,與在較慢的低成本 Spartan-3A DSP FPGA 中實現的完全相同的電路相比,可以使用較少的流水線級數優(yōu)化映射到快速 Virtex-5 FPGA 的電路。?
?
可以用 FPGA 提供的大量寄存器進行這種優(yōu)化。寄存器可以大量使用,不像乘法器或 LUT(查找表)那樣可以很快用光,這意味著可以使用寄存器輕而易舉的顯著提高系統(tǒng)時鐘速度。?
?
當然,增加流水線級數會增加系統(tǒng)延遲。例如,如果使用重定時系數 8,計算結果就會晚八個系統(tǒng)時鐘周期(不是采樣頻率周期)出現在 FPGA 的輸出上。向系統(tǒng)中嵌入電路時必須考慮到這一點(圖 6)。?
?
特別重要的是,務必確保上述優(yōu)化不會影響 Simulink 中描述的原始 MATLAB 模型。通過驗證可以對算法進行鑒定,并且對量化效應的影響予以表述。Synplify DSP 軟件模塊集允許使用截斷(去除無關位)、圓整(在下溢情況下)或飽和(在上溢情況下)進行從浮點到定點的轉換。一旦仿真顯示算法工作正常,即可生成 RTL 代碼。優(yōu)化 VHDL 或 Verilog 代碼可能改變延遲,但不會改變電路的操作。?
?
結論?
?
Synplify DSP 工具基于 The MathWorks 推出的行業(yè)標準 MATLAB/Simulink 軟件。模塊集提供的標準元件庫可用于實現復雜算法。除了加法、增益和延遲等基本元件,該庫還包含 FIR 或 IIR 濾波器等許多復雜功能和 CORDIC 算法。所有功能(包括高度復雜的 FFT 或 Viterbi 解碼器)均可任意參數化。還可以創(chuàng)建用戶定義庫,或者將現有的 VHDL 或 Verilog 代碼集成到 Simulink 模型中。?
?
用 Synplify DSP 可以實現單速率和多速率系統(tǒng)。使用折疊、多通道化或重定時功能可以針對尺寸或速度優(yōu)化代碼。生成的 RTL 代碼都是未加密的通用代碼,可以使用常用工具綜合。?
?
為了取得 FPGA 的最佳結果,Synplicity 推薦使用其 Synplify Pro 綜合工具?,F在還可以使用該開發(fā)環(huán)境的 ASIC 變量。?