- 基于FPGA的數字信號處理
- 高亞軍編著
- 2119字
- 2019-01-09 14:46:01
3.3 累加運算
累加運算在信號處理中廣泛應用,如直接數字頻率合成技術中的相位累加器、FIR濾波器及雷達信號處理中的相參積累等,此外,在一些陣列信號處理中也會應用到,如自相關矩陣的估計。采用FPGA設計累加器時,可用硬件語言描述的方式實現,也可直接調用廠商提供的IP核,操作都非常簡單。設計的關鍵環節是時序和位寬的控制。這將是本節闡述的重點。
3.3.1 累加原理
累加運算如式(3.7)所示。

它表示L個數相加。累加運算由累加器實現,其實質是完成一系列的加法運算,但是與簡單的加法運算不同,它需要將前一次加法運算的結果反饋至輸入端,作為新一次加法運算的加數。例如,在式(3.7)中,a1 與a2 相加的結果需要反饋回來與a3 相加。因此,累加器中具有反饋支路。此外,累加器最終輸出的是累加結果,對于中間運算結果可不必輸出。因此,累加器末端還需要一個捕獲寄存器,捕獲最終結果。累加器的工作原理是:每幀數據周期性地流動,新的數據不斷進入累加器與反饋支路相加,實現累加,由捕獲寄存器接收捕獲信號,輸出最終結果。
定義:構成一個累加結果的輸入數據為一幀數據,一幀數據所包含的數據個數為幀長度。在式(3.7)中,a0,a1,…,aL-1為一幀數據,幀長度為L。由加法運算可知,兩個數相加會引起比特增長。為保證累加結果正確,必須使中間運算結果有足夠的位寬。假定輸入數據位寬為B,那么最終結果的位寬應為

式中,ceil表示向上取整。這就要求將輸入數據及中間運算結果進行符號位擴展,使位寬達到Ws。
3.3.2 順序累加器
數據流按幀順序進入累加器,即第1幀數據進入求和,然后第2幀數據進入求和,以此類推,這樣的累加器稱為順序累加器。整個數據依時間順序流動,幀與幀之間并沒有間斷。
假定有4幀數據,每幀長度均為4。第1幀數據為a1、a2、a3、a4,第2幀數據為b1、b2、b3、b4,第3幀數據為c1、c2、c3、c4,第4幀數據為d1、d2、d3、d4。這4幀數據的時間順序如圖3.17所示。現在要求對這4幀數據依次求和,最終輸出 sa、sb、sc、sd,如式(3.9a)至式(3.9d)所示。


圖3.17 4幀數據的時間順序
根據累加器的工作原理可得到如圖3.18所示的順序累加器的硬件結構,包括加法器、流水寄存器和捕獲寄存器。顧名思義,流水寄存器的目的是使數據流動起來,以提高系統處理速度。捕獲寄存器用于捕獲最終期望結果。

圖3.18 順序累加器的硬件結構
在圖3.18中,數據由din端進入,最終結果由dout端輸出。順序累加器的時序圖如圖3.19所示。從圖3.19中可以看出,bypass為直通信號,當其為高時,加法器輸入端(din端)數據直接通過加法器而不執行任何操作到加法器輸出端,表明新一幀數據開始;當其為低時,執行加法操作,將輸入端數據與反饋端數據相加,以便對新一幀數據求和。節點P數據反饋至加法器輸入端與din端數據相加求和,實現數據的累加,相應數據依次為a1、a1 +a2、a1 +a2 +a3、sa,中間結果未顯示。capture作為捕獲信號,當其為高時,捕獲節點P的數據并將其輸出,否則保持輸出不變。加法器的位寬可由式(3.8)決定。
順序累加器設計的關鍵是使數據流與各控制信號(bypass和capture)對應起來,實現正確累加。從圖3.19可以看出,這并不難做到,bypass和capture兩者周期一致且取決于數據幀長度。

圖3.19 順序累加器的時序圖
3.3.3 滑動累加器
滑動累加器是指數據流按幀交錯順序進入,此時,在求每幀數據和時就要求對反饋支路數據進行滑動以實現正確累加。
假定有4幀數據,每幀長度均為4。第1 幀數據為a1、b1、c1、d1,第2 幀數據為a2、b2、c2、d2,第3幀數據為a3、b3、c3、d3,第4幀數據為a4、b4、c4、d4。這4幀數據的時間順序仍如圖3.17所示。顯然,此時數據流的順序是第1 幀的第1 個、第2 幀的第1 個、第3幀的第1 個、第4幀的第1 個,緊接著,第1 幀的第2 個、第2 幀的第2 個,以此類推。現在要求對這4 幀數據依次求和,最終輸出 s1、s2、s3、s4,如式(3.10a)至式(3.10d)所示。

根據數據的時間關系,考慮到數據流的幀交錯,為了保證同一幀的數據相加,就必須采取措施使“先頭”數據潛伏一段時間,當同一幀的數據到達加法器輸入端時,“先頭”數據浮出執行加法操作。例如,把a1 視為“先頭”數據,該數據直接通過加法器到其輸出端,但不能立即反饋到加法器輸入端,因為此時加法器輸入端為a2 而非b1,所以必須對其潛伏;當加法器輸入端為b1 時,a1 在加法器反饋端浮出實現與b1 的相加。這種潛伏可通過級聯的寄存器實現,也可通過FIFO實現。

圖3.20 滑動累加器的硬件結構
滑動累加器的硬件結構如圖3.20所示,圖中采用FIFO實現潛伏,FIFO深度為3(加法器輸出已有一個時鐘周期的寄存)。對于潛伏周期較長、速度要求較高的場合,采用FIFO更為合適;而對于潛伏周期較短、速度要求不高的場合,采用級聯的寄存器較為合適或采用移位寄存器SRL。在圖3.20中,ce為使能相加信號,當其為高時,允許加法器執行加法操作,否則將din端數據直接輸出。capture為捕獲信號,當其為高時,捕獲節點P的數據并輸出給dout,否則保持不變。
滑動累加器的時序圖如圖3.21所示。在圖3.21中,s11 =a1 +b1、s21 =a2 +b2、s31 =a3 +b3、s41 =a4 +b4、s12 =a1 +b1 +c1、s22 =a2 +b2 +c2、s32 =a3 +b3 +c3、s42 =a4 +b4 +c4。

圖3.21 滑動累加器的時序圖
滑動累加器設計的關鍵是確定FIFO(或級聯寄存器)的深度以保證正確的潛伏周期,而此深度與幀的個數有關。例如,此設計中共有4幀數據,故FIFO深度為4-1 =3,因為加法器輸出已有一級寄存。使能相加信號ce和捕獲信號capture可根據圖3.21中時序設計。