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