許多通信系統都要用到多速濾波器(multirate filter),多速濾波器是指輸出數據速率與輸入數據速率不相等的濾波器,常用于某個物理接口如數模轉換器(DAC)或模數轉換器(ADC)的接口處。當濾波器輸出數據到DAC時,用戶常會選擇插值濾波器,因為它能產生更多的取樣點以使DAC的輸出波形更加平滑;而當濾波器從ADC接收信號時,用戶一般會選用抽取濾波器,因為抽取濾波器允許數據被過取樣從而獲得更高的信噪比(SNR)。使用抽取濾波器后系統只需工作在信號速率。 在多速濾波器設計過程中,有效地采用硬件實現插值和抽取功能非常重要,問題的關鍵還在于怎樣選擇正確的硬件類型。下面分別討論采用DSP、PLD和ASIC實現多速濾波器的方法。 插值和抽取 插值功能常用來增加輸出信號的取樣率(圖1),實際上在原始取樣值附近增加新的取樣值很有必要。由于新的取樣點處的值是未知數,一般就設為零,因此也被稱為上取樣(upsampling)、零值插入或零值填充。輸出端數據點的增加會改變取樣速率,從而使奈奎斯特頻率外推。在時域中向數據插入零值,則信號在頻域上會產生原始信號頻譜的鏡像。由于取樣速率的改變并不會產生更多的信息,因此所有的鏡像信號(以人工方式加入系統中)都表現為噪聲,幸運的是這些噪聲可以通過理想低通濾波器濾除。 抽取濾波器的工作方式也大致相同。這種濾波器要消除某些取樣點,從而降低取樣速率和奈奎斯特頻率。任何低于或高于奈奎斯特頻率的信號都將表現為噪聲,因此有必要在消除數據(下取樣)前加入低通濾波器,這樣可以確保噪聲不串入系統(圖2)。 實現策略 在插值與抽取實現方案中采用的低通濾波器最好具有線性相位特性,一般是利用有限沖擊響應(FIR)濾波器來實現這種線性相位濾波器,但FIR濾波器的實現要比無限沖擊響應濾波器(IIR)的代價高得多。為了取得更好的性能,需要增加濾波器的階數,而FIR濾波器可以從10階到200階甚至更高。每個濾波器的輸出必須經過10到200次運算。由于FIR濾波器非常昂貴,設計師一般會采用專用硬件來實現,這里的專用硬件可能是一塊專用濾波芯片、一種可編程邏輯解決方案或一些半定制(標準化單元實現)集成電路。 用標準單元實現的FIR濾波器可以獲得最大的吞吐量,按速度排序的話,可編程邏輯器件(PLD)和專用濾波芯片的吞吐量排第二,然后才是通用DSP器件。當最終用戶需要高的數據吞吐量時,幾乎沒有什么硬件可以勝過ASIC和PLD。ASIC設計流程相當成熟,對于PLD來說,可以利用能自動創建FIR濾波器的工具來加速開發流程。為了減小插值與抽取濾波器的芯片面積并增強其性能,很有必要采用一些專門技術。 目前還沒有最佳的多速濾波器實現方案,而方案的評估也有很多種方法。方案的成本取決于某個實現方案所對應的性能要求。這里性能可以定義為每秒鐘乘法運算的總次數(由于加法一般都與乘法結合在一起,因此運算成本中不再包含加法)。假設單個乘法操作需要一個時鐘周期,那么我們就可以確定實現某個方案所需的MIPS值。 檢查插值濾波器的運算速度有個比較直接的方法,即將數據先進行上取樣然后再進行濾波。圖3所示的樣本要求采用388抽頭的濾波器,并且濾波器工作時的數據速率必須達到每秒12兆樣點(MSPS)。這種實現方式所要求的運算速率大約為4500MIPS。 多級濾波 好在有許多方法來降低運算速率要求,比如可以在三級內實現插值因子為12的多級濾波。設計人員可以將第一級的插值因子定為2,在第二級再以因子2對第一級的輸出進行插值,然后輸出到第三級,第三級的插值因子設為3,這樣就有了3級濾波器,圖3給出了每個濾波器的詳細參數。 通過分級插值可以降低對每個濾波器的要求,從而減少濾波器的階數。另外,前二個濾波器分別工作在2MSPS和4MSPS,只有最后一個濾波器才工作在12MSPS,而改進前的方法要求整個濾波器工作在12MSPS。同樣,若采用分級抽取,運算速率就不必要求太高。 多級濾波法可以將運算速率減小到1035MIPS。對多級濾波器的各級重新分配運算任務,用小得多的濾波器就可以達到期望的運算結果,這是一種相對高水平的優化方法。 多相分解 降低運算速率的另外一種方式需要詳細分析插值濾波器的實現方案。眾所周知,先進行零值插入然后濾波,就可以將問題分解到多個較短的濾波器中解決,每個濾波器工作于不同的時間點上,這種方法被稱為多相分解,如圖4所示。 舉個簡單的例子來說明一下多相分解的工作原理。在該例中濾波器系數為24,插值因子為4。由于濾波器插值因子為4,因此實際上大多數輸出到濾波器的數據為零,通過執行特殊的乘法操作可以消除這些零數據的系數。例如,第一個輸出數據可以單獨由系數C0、C4、C8……C20確定,而第二個輸出數據則由C1、C5、C9……C21等系數決定。在這種情況下每個輸出只要求6次乘法運算而不是24次乘法運算,調整插值因子可以減少運算速率。對于插值因子為12的388抽頭濾波器,每個輸出只需33次乘法即可確定。多相插值器可以用388MIPS完成相同的運算量。 抽取結構同樣也可利用類似的技術。在本例中抽取因子為4,因此4個數據點經過濾波后只剩下了1個,其實沒有必要去計算被丟棄的取樣點數。多相抽取器將數據分配給4個較短的多相濾波器(抽取因子為4),最后將4個濾波器的輸出疊加在一起從而形成最終濾波輸出。每個多相濾波器以抽取后的數據速率輸出數據,從而降低了對抽取器的性能要求。 當然可以綜合運用多種方法以進一步降低運算速率。例如,可以對多相結構中的每個單級濾波器執行多級濾波。 采用DSP和內核的實現方案 從實現層次看,需要采用特殊的結構(占用最小的器件資源,工作于最低的功耗等)。這種方案的選用取決于運算速度要求,對于要求幾百MIPS的情形采用DSP就是很理想的方案,某些DSP器件的運算速度能達到1GOPS,采用DSP的典型設計還能做濾波以外的其它工作,在處理器執行的所有不同功能上謹慎地分配MIPS也很有必要。 許多情況下用戶都會做出MIPS預算,并根據具體性能要求選擇DSP。如果性能要求超過了單片DSP的處理能力,可以考慮多種應變方案,如將任務分配到多個DSP上,或采用硬件協處理器來加速運算量巨大的任務,此時,采用ASIC和PLD器件就恰到好處。 采用專用邏輯器件的實現方案 許多半導體供應商都提供能實現插值功能的專用芯片,這些芯片包含若干用于實現濾波功能的乘法器,因此能獲得比DSP器件更優異的性能。它們還能支持固定數值的系數和特定的插值或抽取因子。 ASIC和PLD方案可以結合起來形成“用戶專用硬件”產品。采用這種方法后可以在一個時鐘周期內計算全部127抽頭的FIR濾波器(比DSP快兩個數量級)。設計中要仔細考慮后續工作,如HDL仿真、綜合、驗證、可測性及故障覆蓋率,這點在DSP設計中也一樣。 對于完全并行的插值濾波器來說,將濾波器進行多相分解可以產生由較短濾波器構成的濾波器組。為了在一個時鐘周期內進行一次濾波運算,多相濾波器中的每個系數必須配備一個乘法器。在每個輸入時鐘周期要完成兩個任務:1.數據存貯到每個多相結構中;2.每個濾波器會產生N個輸出。最后輸出時鐘會在同一時間掃描所有的各相濾波器,就如同是單一輸入時鐘的效果。 時鐘域與靜態時序分析 將設計分解開來可以得到二個時鐘域,即輸入時鐘與輸出時鐘,輸出時鐘速率是輸入時鐘速率的整數倍。輸出結構(一個簡單的乘法器)需要以高于輸入多相濾波器的數據速率工作。當進行專用硬件(如ASIC或可編程邏輯)設計時可以考慮減小時鐘域的數量。當用ASIC產生掃描向量時需要另外增加時鐘域,通過靜態時序分析可能還需消除一些錯誤路徑。采用可編程邏輯器件,可供選擇的時鐘信號數量是固定的,因此每個時鐘域也就顯得更加珍貴。 當時鐘使能端作用于多相結構中的觸發器時,就有可能采用輸出時鐘對整個結構進行時鐘控制。采用時鐘使能功能,多相結構只需運行于輸入時鐘速率(較慢的時鐘信號),還可放寬這些復雜結構的時序要求。這使多相結構成為一個多循環組件,靜態時序必須符合多循環規范。在ASIC和PLD為主的設計流程中使用的時序分析工具需要支持多循環規范。 當設計ASIC時,所需數量的乘法單元可以集成進芯片中,并且可以在最小的面積上獲得所要的速度。ASIC實現方案要比DSP和PLD實現方案的靈活性低,任何改變都需要對整個系統作重新設計(既費時又費力)。 采用PLD結構的濾波方案 PLD實現方案則不同,用PLD實現濾波功能可以采用兩種結構:串行與并行,這兩種結構都能有效地將系數映射到查尋表格并執行乘法運算。完全并行的結構可在單個時鐘周期內進行完整的濾波運算,而串行結構需要將運算分配在若干時鐘周期內完成(取決于輸入數據寬度),因此串行結構的吞吐量較小,但串行結構在芯片的利用率方面還是很高的(只需很小的存儲空間和邏輯單元)。 目前用于可編程邏輯的FIR濾波器自動生成工具已經面世。至少這些工具能在給定系數后自動生成各個濾波器,而更先進的工具可以為用戶產生定點系數,并在此基礎上實現多相濾波器,同時進行芯片面積和速度評估。 本文結論 實現插值與抽取邏輯的方案很多,設計師必須評估所需的吞吐量,提出高效率的實現方案,并在設計優化與盡快完工之間取得設計工時上的平衡。 |