官术网_书友最值得收藏!

3.3 累加運算

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

3.3.1 累加原理

累加運算如式(3.7)所示。

它表示L個數相加。累加運算由累加器實現,其實質是完成一系列的加法運算,但是與簡單的加法運算不同,它需要將前一次加法運算的結果反饋至輸入端,作為新一次加法運算的加數。例如,在式(3.7)中,a1a2 相加的結果需要反饋回來與a3 相加。因此,累加器中具有反饋支路。此外,累加器最終輸出的是累加結果,對于中間運算結果可不必輸出。因此,累加器末端還需要一個捕獲寄存器,捕獲最終結果。累加器的工作原理是:每幀數據周期性地流動,新的數據不斷進入累加器與反饋支路相加,實現累加,由捕獲寄存器接收捕獲信號,輸出最終結果。

定義:構成一個累加結果的輸入數據為一幀數據,一幀數據所包含的數據個數為幀長度。在式(3.7)中,a0a1,…,aL-1為一幀數據,幀長度為L。由加法運算可知,兩個數相加會引起比特增長。為保證累加結果正確,必須使中間運算結果有足夠的位寬。假定輸入數據位寬為B,那么最終結果的位寬應為

式中,ceil表示向上取整。這就要求將輸入數據及中間運算結果進行符號位擴展,使位寬達到Ws

3.3.2 順序累加器

數據流按幀順序進入累加器,即第1幀數據進入求和,然后第2幀數據進入求和,以此類推,這樣的累加器稱為順序累加器。整個數據依時間順序流動,幀與幀之間并沒有間斷。

假定有4幀數據,每幀長度均為4。第1幀數據為a1a2a3a4,第2幀數據為b1b2b3b4,第3幀數據為c1c2c3c4,第4幀數據為d1d2d3d4。這4幀數據的時間順序如圖3.17所示。現在要求對這4幀數據依次求和,最終輸出 sasbscsd,如式(3.9a)至式(3.9d)所示。

圖3.17 4幀數據的時間順序

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

圖3.18 順序累加器的硬件結構

在圖3.18中,數據由din端進入,最終結果由dout端輸出。順序累加器的時序圖如圖3.19所示。從圖3.19中可以看出,bypass為直通信號,當其為高時,加法器輸入端(din端)數據直接通過加法器而不執行任何操作到加法器輸出端,表明新一幀數據開始;當其為低時,執行加法操作,將輸入端數據與反饋端數據相加,以便對新一幀數據求和。節點P數據反饋至加法器輸入端與din端數據相加求和,實現數據的累加,相應數據依次為a1a1 +a2a1 +a2 +a3sa,中間結果未顯示。capture作為捕獲信號,當其為高時,捕獲節點P的數據并將其輸出,否則保持輸出不變。加法器的位寬可由式(3.8)決定。

順序累加器設計的關鍵是使數據流與各控制信號(bypass和capture)對應起來,實現正確累加。從圖3.19可以看出,這并不難做到,bypass和capture兩者周期一致且取決于數據幀長度。

圖3.19 順序累加器的時序圖

3.3.3 滑動累加器

滑動累加器是指數據流按幀交錯順序進入,此時,在求每幀數據和時就要求對反饋支路數據進行滑動以實現正確累加。

假定有4幀數據,每幀長度均為4。第1 幀數據為a1b1c1d1,第2 幀數據為a2b2c2d2,第3幀數據為a3b3c3d3,第4幀數據為a4b4c4d4。這4幀數據的時間順序仍如圖3.17所示。顯然,此時數據流的順序是第1 幀的第1 個、第2 幀的第1 個、第3幀的第1 個、第4幀的第1 個,緊接著,第1 幀的第2 個、第2 幀的第2 個,以此類推。現在要求對這4 幀數據依次求和,最終輸出 s1s2s3s4,如式(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 +b1s21 =a2 +b2s31 =a3 +b3s41 =a4 +b4s12 =a1 +b1 +c1s22 =a2 +b2 +c2s32 =a3 +b3 +c3s42 =a4 +b4 +c4

圖3.21 滑動累加器的時序圖

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

主站蜘蛛池模板: 定兴县| 濮阳县| 南宫市| 巴楚县| 安吉县| 大埔县| 榆林市| 昌平区| 扎赉特旗| 昌图县| 嫩江县| 崇左市| 桃江县| 绿春县| 甘孜县| 裕民县| 麟游县| 三门县| 武乡县| 藁城市| 镇坪县| 屏东市| 融水| 白城市| 沾化县| 南皮县| 兴业县| 泉州市| 铜川市| 南丰县| 香河县| 龙山县| 南涧| 秭归县| 商洛市| 阿巴嘎旗| 邛崃市| 扶余县| 浏阳市| 高青县| 天台县|