累加器


累加運算

1. 累加原理

累加運算如式(1)所示:

\[s = \sum_{n=0}^{L-1}a_{n} \tag{1} \]

它表示N個數相加。累加運算由累加器實現,其實質是完成一系列的加法運算,但是與簡單的加法運算不同,他需要將前一次運算的結果反饋至輸入端,作為新一次加法運算的加數,如式(1)中,\(a_{1}\)\(a_{2}\)相加的結果需要反饋回來與\(a_{3}\)相加。所以,累加器中具有反饋之路。此外,累加器最終輸出的是累加結果,對於中間運算結果可不比輸出。所以,累加器末端還需要一個捕獲寄存器,捕獲最終結果。累加器的工作原理是:每幀數據周期性地流動,新的數據不斷進入累加器與反饋之路相加,實現累加,由捕獲寄存器接收捕獲信號,輸出最終結果。

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

\[W_{s} = \text{ceil}(B+log_{2}L) \tag{2} \]

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

2. 順序累加器

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

圖1. 順序累加器數據流

假定有四幀數據,每幀長度均為4。第一幀數據為\(a_{1},a_{2},a_{3},a_{4}\);第二幀數據為\(b_{1},b_{2},b_{3},b_{4}\);第三幀數據為:\(c_{1},c_{2},c_{3},c_{4}\);第四幀數據為\(d_{1},d_{2},d_{3},d_{4}\)。這四幀數據的時間順序如圖1所示。現在要求對這四幀數據依次求和,最終輸出\(s_{a},s_{b},s_{c},s_{d}\),計算方式如式(3)~(6)所示。

\[s_{a} = a_{1} + a_{2} + a_{3} + a_{4} \tag{3} \]

\[s_{b} = b_{1} + b_{2} + b_{3} + b_{4} \tag{4} \]

\[s_{c} = c_{1} + c_{2} + c_{3} + c_{4} \tag{5} \]

\[s_{a} = d_{1} + d_{2} + d_{3} + d_{4} \tag{6} \]

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

圖2. 順序累加器硬件結構

圖2中,數據由din端進入,最終結果由dout端輸出,整個時序如圖3.16所示。從時序圖中可以看出,bypass為“直通”信號,當其為高時,加法器輸入端數據din直接通過加法器而不執行任何操作到加法器輸出端,表明新一幀數據的開始;當其為低時,執行加法操作,將輸入數據與反饋端數據相加,以便對新一幀數據求和。P節點數據反饋至加法器輸入端與din相加求和,實現數據的累加,相應數據依次為\(a_{1},a_{1}+a_{2},a_{1}+a_{2},a_{1}+a_{2}+a_{3},s_{a}\)中間結果未顯示。capture作為捕獲信號,當其為高時,捕獲P節點的數據並將其輸出,否則保持輸出不變,加法器的位寬由式\((2)\)決定。

圖3. 順序累加器時序圖

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

3. 滑動累加器

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

假定有4幀數據,每幀長度均為4。第一幀數據為\(a_{1},b_{1},c_{1},d_{1}\),第二幀數據為\(a_{2},b_{2},c_{2},d_{2}\),第三幀數據為\(a_{3},b_{3},c_{3},d_{3}\),第四幀數據為\(a_{4},b_{4},c_{4},d_{4}\)。這四幀數據的時間順序與圖1保持一致。顯然,此時數據流的順序是第一幀的第一個,第二幀的第一個,第三幀的第一個,第四幀的第一個,緊接着,第一幀的第二個,第二幀的第二個,依次類推。現在要求對這四幀數據依次求和,最終輸出\(s_{1},s_{2},s_{3},s_{4}\),如式(7)\(\sim\)(10)所示。

\[s_{1} = a_{1} + b_{1} + c_{1} + d_{1} \tag{7} \]

\[s_{2} = a_{2} + b_{2} + c_{2} + d_{2} \tag{8} \]

\[s_{3} = a_{3} + b_{3} + c_{3} + d_{3} \tag{9} \]

\[s_{4} = a_{4} + b_{4} + c_{4} + d_{4} \tag{10} \]

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

圖4. 滑動累加器硬件結構

滑動累加器的硬件結構如圖4所示,圖中采用了FIFO實現潛伏,FIFO深度為3(加法器輸出已有一個時鍾周期的寄存)。對於潛伏周期較長,速度要求較高的場合,采用FIFO更為合適;而對潛伏周期較短、速度要求不高的場合,采用級聯的寄存器為宜或者采用移位寄存器SRL。圖中,信號ce為使能相加,當其為高時允許加法器執行加法操作,否則din端數據直接輸出。capture為捕獲信號,當其為高時捕獲節點P數據並輸出給dout,否則保持不變。

與圖4相對應的時序圖如圖5所示。圖中\(s_{11}=a_{1}+b_{1},s_{21}=a_{2}+b_{2},s_{31}=a_{3}+b_{3},s_{41}=a_{4}+b_{4},s_{12}=a_{1}+b_{1}+c_{1},s_{22}=a_{2}+b_{2}+c_{2},s_{32}=a_{3}+b_{3}+c_{3},s_{42}=a_{4}+b_{4}+c_{4}\)

圖5. 滑動累加器時序圖

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM