使用FPGA解決DSP設計難題

圖3:傳統DSP中的MAC實現方案
而FPGA提供了許多不同的實現和優化選擇。如果需要高資源效率的實現,MAC引擎法則相當不錯。還是以31抽頭濾波器為例來說明濾波器規范對所需邏輯資源的影響,這種實現方案的框圖如圖4所示。
圖4:FPGA中的MAC引擎FIR濾波器
這種設計需要存儲器存儲數據和系數,可以混合采用FPGA內部的RAM和ROM。RAM用于存儲數據樣本,故而采用循環的RAM緩沖器實現。字的數量與濾波器抽頭數相等,位寬按樣本大小設置。ROM用于存儲系數。在最差情況下,字的數量與濾波器抽頭的數量相等,但如果存在對稱,則可以減少字的數量。位寬必須足以支持最大的系數。因為數據樣本和系數數據都隨每個周期改變,所以需要全乘法器。累加器負責將產生的結果累加起來。因為隨著濾波器采集數據,累加器的輸出會隨每個時鐘周期改變,所以需要捕捉寄存器。當全套N個樣本完成累加后,輸出寄存器負責捕捉最終結果。
如果采用MAC模式,DSP48則非常適合,因為DSP48Slice內含輸入寄存器、輸出寄存器和加法器單元。實現31抽頭MAC引擎需要的資源包括一個DSP48、一個18kb塊RAM和9個邏輯片。另外,還需要一些邏輯片用于采樣、系數地址生成和控制。如果FPGA內置有600MHz的時鐘,則在一個-3速度等級的Xilinx7系列器件中,該濾波器能夠以19.35MHz或1,935MSps的輸入采樣速率運行。
如果系統規范需要更高性能的FIR濾波器,則可采用并行結構來實現。圖5顯示了直接I型實現方案的框圖。
圖5:FPGA中的直接I型濾波器
直接I型濾波器結構能夠在FPGA中實現最高性能。這種結構(通常也被稱作脈動FIR濾波器)采用流水線和加法器鏈,使DSP48 Slice發揮出最高性能。輸入饋送到用作數據樣本緩沖器的級聯寄存器;每個寄存器向DSP48提供一個樣本,然后乘以對應的系數;加法器鏈存儲部分乘積,然后依次相加,從而得到最終結果。
這種設計無需外部邏輯電路支持濾波器,并且該結構可擴展用于支持任意數量的系數。因為沒有高扇出的輸入信號,所以這種結構能夠實現最高性能。實現31抽頭FIR濾波器僅需要31個DSP48邏輯片。如果FPGA內置有600MHz的時鐘,則在一個-3速度等級的Xilinx7系列器件中,該濾波器能夠以600MHz或600MSps的輸入采樣速率運行。
從這個實例可以清晰地看出,FPGA不僅在性能上顯著超越了傳統的數字信號處理器,而且要求的時鐘速率也顯著降低(因此,功耗也顯著降低)。
這個實例只反映了采用PFGA實現FIR濾波器的兩種技術。為了充分利用數據采樣率規范,可對該器件進行進一步定制,此時,數據采樣率可在連續MAC運算極值和全并行運算極值之間。您還可考慮在包括對稱系數、插值、抽取、多通道或多速率的資源利用與性能之間進行更多的權衡取舍。Xilinx CORE Generator?或System Generator(系統發生器)實用工具可以幫助用戶充分利用這些設計變量和技術。
在傳統DSP和FPGA之間選擇
傳統的數字處理器已經有多年的應用歷史,當然有為特定問題提供最佳解決方案的實例。如果系統采樣率低于數kHz且為單通道方案,DSP可能是不二之選。但是,當采樣率增加到數MHz以上,或者如果系統要求多通道,FPGA就越來越有優勢。在高數據率條件下,DSP可能只能勉為其難地在不造成任何損耗的情況下采集、處理和輸出數據。這是因為在處理器中存在大量的共享資源、總線乃至內核。然而,FPGA卻能夠為每項功能提供專門的資源。
DSP是基于指令而非基于時鐘的器件。一般來講,對單個樣本上的任何數學運算需要三到四條指令。數據必須首先經輸入端采集,再發送到處理內核,每完成一次運算后再循環通過內核,然后發送到輸出端。相比之下,FPGA基于時鐘,所以每個時鐘周期都有可能在輸入數據流上進行一次數學運算。
由于DSP的運算以指令或代碼為基礎,編程機制為標準C語言,或者在需要更高性能的情況下,采用低級匯編語言。這種代碼可能包含高級的決策樹或者轉移操作,而難以在FPGA中實現。例如,存在大量的用于執行如音頻和電話編解碼器之類的預定義功能或標準的遺留代碼。
FPGA廠商和第三方合作伙伴已經意識到將FPGA用于高性能DSP系統的優勢,并且如今已有許多IP核廣泛應用于視頻、圖像處理、通信、汽車、醫療和軍用等大部分垂直應用市場。與將高級系統框圖映射成為C語言代碼的DSP設計相比,將高級系統框圖分解為FPGA模塊和IP核會更加簡便易行。
從DSP轉向FPGA
研究一些主要標準將有利于在傳統DSP和FPGA之間作出選擇(請參見表1)。
表1: 傳統DSP和FPGA之間的比較
軟件編程人員的數量遠遠超過硬件設計人員的數量,這已是不爭的事實。DSP編程人員的數量與FPGA設計人員的數量之間的關系也是如此。不過,讓系統架構師或者DSP設計人員轉為使用FPGA的難度,并不像讓軟件編程人員轉為從事硬件設計那么大。有大量的資源可以大大簡化DSP算法開發和FPGA設計工作的學習過程。
主要的障礙是從基于樣本和事件的方法轉向基于時鐘的問題描述和解決方案。如果能夠在設計流程的系統架構和定義階段就能夠完成,對這種轉換的理解和應用就會簡單得多。由不同的工程師和數學專家來定義系統架構(DSP算法和FPGA設計在某種程度上相互孤立)是很尋常的事情。當然,如果每個成員對其他小組成員面臨的難題有一定程度認識的話,這個過程會順利得多。要掌握FPGA方案,架構師不需要精通FPGA設計。只需對器件、資源和工具有基本的了解就夠了。
評論