1. 程式人生 > >FPGA從Xilinx的7系列學起(7)

FPGA從Xilinx的7系列學起(7)

3.最基本的DSP資源

3.1 由FIR濾波器談起

隨著各種應用複雜度的不斷提升,傳統的DSP和處理器的架構無法支援這麼複雜的並行資料演算法的需求。FPGA卻恰好能夠滿足這樣的需求。FPGA擁有大量的DSP計算單元能夠幫助使用者實現各種各樣的複雜演算法。拿FIR濾波器舉個例子。


如上圖所示,這是一個典型的FIR濾波器,第一個圖是FIR濾波器的公式,第二個圖是FIR濾波器的一個框圖。可以看到,FIR濾波器是線性時不變系統的卷積和公式。傳統上,一個FIR濾波器被畫成一組並行乘法,並且所有饋送結果到單個加法器的架構。這個加法器通常被實現為一個加法器樹,並且使用流水線以提高其效能。這種做法實現FIR過濾器是最簡單的,但它不是唯一可能實現方法。下面將比較一下傳統DSP或者處理器的順序處理和FPGA並行處理兩種方法。

在左邊的傳統DSP處理的方式上,它只有一個乘法器和加法器,只能通過資料、係數和所需要的時間去迴圈產生一個結果。這個處理過程將會非常慢,因為它要依靠乘法器和累加器的所需要呼叫的次數來產生一個結果。如上邊左圖所示,一個3960抽頭的FIR濾波器執行在一個1.2GHz的DSP處理器上,那麼它只能有303KSPS的能力。這個級別就很低了,只有K級。那麼在右邊的FPGA的處理方式,相當數量DSP的處理單元能夠同時進行所有的乘法操作,每個時鐘都能夠產生一個結果。這個3960個抽頭的FIR濾波器可以恰好放在一個包含了3960個DSP單元的Virtex-7 XT的晶片中。儘管處理的頻率也就是DSP處理器的1/2,但是增加的並行處理能力能夠是FIR濾波器能夠達到600多MSPS的能力。雖然上圖上最後所有乘法器的資料被同時送到了加法器的處理單元。實際上,這是需要一個流水線的加法器來最終產生想要的結果。實際上7系列的DSP單元包括了輸入調整,流水線暫存器,專用的乘法器,操作控制單元,專用的加法器和級聯路徑。

輸入調整包括預加器和輸入流水線暫存器。流水線暫存器,在這個圖中標記為Z-1和Z-2在幾個地方,在DSP的單元內最大限度地提高效能。乘法器和加法器是在DSP片的主要組成部分。操作控制暫存器和專用多路複用器可以在一個DSP單元內選擇不同的操作命令,從而增加了可程式設計性和靈活性。輸入和輸出級聯路徑(上圖並未表示),允許通過使用專用和快速佈線資源將多個DSP的單元被連結在一起,以形成更廣泛和更復雜的功能。下次將講述是如何在DSP單元中使用FIR濾波器可以使用DSP片結構來實現的示例。

上圖中的FIR濾波器的結構被叫做轉置型I的濾波器,並且使用了流水線。這種架構使用了級聯的方式,充分利用了DSP Slice的結構。

這個例子顯示了一個小的4抽頭濾波器。輸入資料通過左側流水線被送到的DSP Slice中,級聯後把資料延時送到下一級中。每個DSP slice裡面的乘法器將資料和正確的係數進行相乘,在加法器中相加後輸出,經過流水線並最終級聯在最右端輸出最終的結果。從這個例子中,可以清晰的看到FIR濾波器的抽頭即使增加了,可以很簡單的增加DSP Slice單元進入這個流水線中,並在該DSP單元中增加自己的係數即可。需要說明的一點是:理想狀態下,不像其他DSP/處理器單元構建演算法時,FPGA的DSP單元的效能不會因為濾波器的抽頭的增加而減少,因為進入級聯的流水線後,流水線上使用的暫存器將幫助將DSP的資源保持執行在最優的速度上。從上圖結構中,可以看到輸入資料被送入暫存器,暫存器充當資料緩衝器進行了級聯。每個暫存器提供一個數據到乘法器並各個係數相乘。加法器相加級聯後逐步形成最終結果,並且給出最終結果。這個實現方式不要外部的額外邏輯,並且所述結構是可擴充套件的,以支援任何數目的係數。另外DSP Slice資源的靈活性,也可以用來實現其他非DSP功能。

下面舉一個非DSP功能的例子,是將一個基本的加法樹的結構適配到DSP Slice單元中,如下圖一個流水線的基本加法樹的例子。

第一步,從第一級加法器的輸出入手,去掉第一級輸出的暫存器,形成如下圖的結構。

這種結構就非常簡化,而且容易調整需求。緊接著第二步把第三個暫存器拉下來,修正後形成下圖,形成很明顯的鏈型的結構。但是這個功能和上圖的功能完全相同,相同的四個訊號只是改變了相加的順序,被相加形成最終的結果相同。

第四步,新增暫存器形成流水線,變成了下圖,最大限度地提高效能。因為加法器是在一個鏈而不是樹,在加法器鏈中的每個流水線暫存器需要在該資料路徑中匹配一個暫存器。還要注意的是,一個附加的加法器已經放置在鏈的前部,其中一個輸入連線到零。現在,就很容易看到的加法器和流水線暫存器如何對映到XILINX DSP Slice中。下圖圖中的每個虛線框代表一個DSP Slice。