時序規劃( Retiming )是一種在不改變演算法輸入輸出之時序關係的狀況 下,改變演算法中記憶元件位置的一種技巧。時序規劃的主要應用範圍在於將演 算法利用同步電路來實現時,利用移動演算法中記憶元件位置的方法,達到縮小
電路時脈週期,減少暫存器數量,以及降低功率消耗的目的。在本論文中,我們
現摺疊摺疊演算法時,便能確保不會讓傳遞的資料遺失。
實現任何摺疊演算法都是比照此模式進行資料流程圖( DFG )的轉換,因 此,許多時序規劃技巧對於摺疊演算法就顯得相當重要[19][20],以下章節就幾 種常見的時序規劃技巧做說明。
2.2 .1 單一單一單一單一節節節點節點點時點時時序時序序規劃序規劃規劃 規劃
在試著對一個完整的系統做時序規劃之前,首先得了解如何對單一節點做時 序規劃的工作,而節點轉換( Nodal Transfer )提供了最單純時序規劃的方法。考 慮一個資料流程圖上的單一節點,則此節點輸入及輸出連線上的記憶元件,可在 不改變資料進出總時間的前提下做移動,也就是若單一節點所有的輸入端上均增 加或減少 n 個記憶元件,則其所有的輸出端點上也須同時減少或增加 n 個記憶元 件,以確保在針對單一端點做時序規劃考量時,不會影響到系統的輸入輸出關 係,下圖圖圖圖 2.2 為一個簡單的節點轉換的例子。
V1
D
2D
D
V1
D
2D
單一節點時序規劃
如上圖所示,若我們在節點 V1 的兩個輸入端分別各減少一個記憶元件(D),
則必須在節點 V1 的輸出端加回一個記憶元件,以確保系統輸入輸出時序的正確 性,此即為節點轉換的時序規劃方法。
2.2 .2 切集合時切集合時切集合時切集合時序序序規劃序規劃規劃 規劃
2.3 第一篇系統化 第一篇系統化 第一篇系統化摺疊 第一篇系統化 摺疊 摺疊 摺疊演算法 演算法 演算法 演算法[9]
[9]這篇提出系統的摺疊轉換演算法來對任意數位訊號處理演算法的資料流 程圖進行摺疊動作,其中的摺疊集合( Folding Set )規劃了處理器( Processor ,此處 指摺疊架構中最基本的運算單元,通常為乘加器 )在哪個摺疊集合中且在哪個時 脈中該執行哪件工作,而其摺疊集合的產生是利用對演算法資料流程圖進行執行 排程( Scheduling )及資源配置( Resource Allocation )來規劃的。
[9]提出了許多他們如何使用時脈規劃去針對各種類型的數位訊號處理架構 進行摺疊的方法,其討論的數位訊號類型包括有單一時脈( Single Clock )與多時 脈( Multiple Clock )及向前路徑( Forward Path )與含迴圈( Loop )等類型電路;以下 介紹其如何對有限脈衝響應濾波器(單一時脈且向前路徑)執行摺疊架構轉換,
如圖圖圖圖 2.4 及圖圖圖 2.5 所示- 圖
圖圖圖圖 2.4 顯示了以乘加( Multiply-Add )運算器來實現五階有限脈衝響應濾波器 架構,圖中的 D 表示 z-1代表著 1 個 clock 的延滯(Delay),而圖圖圖圖 2.5 為圖圖圖 2.4 使用圖 時序規劃( Retiming )後,[9]推演出來的摺疊演算法架構圖,且圖圖圖 2.5 為其摺疊因圖 數( 摺疊因數見式子(3.1) )為 3 的摺疊架構圖,圖中所示的摺疊集合 S1 = { MA5 , MA4 ,MA3 }為 MAC1 所執行的工作內容,而 S0 = { MA2 , MA1 , MA0 }為 MAC0 所執行的工作內容。
接著簡易說明圖圖圖圖 2.5 其運作方式:它是將圖圖圖圖 2.4 的工作量等量切成兩段,MAC1 執行圖圖圖圖 2.4 的前半工作量,剩下的後半工作量利用多工器與暫存器配合時序並透 過切換開關而傳給 MAC0 正確的值來執行累加。每個 MAC 詳細工作情形請參見 表
表 表
表 2.1 的說明,表表表表 2.1 中 MAC1 欄位為紀錄該時脈 MAC1 執行乘累加的運算結果,
箭號為提示該值將在 4D 後透過多工器切換再被讀出而執行累加。
觀察圖圖圖圖 2.5 中的暫存器個數似乎有機會可以再化簡,原因是如果以直接方式 實現圖圖圖圖 2.4 的架構(指未運用摺疊演算法),就單純考慮中間運算暫存器的個數只 需要 6 個(等於 taps 數目),然而使用其摺疊演算法,中間運算暫存器個數卻增加 到 8 個(圖中兩個 MAC 的輸出端 D 加起來有 8 個),所以,發現有機會可以朝此 方向來發展新摺疊演算法並降低中間運算暫存器個數亦即節省架構面積。
Clock 元平面的有限脈衝響應濾波器( Bit-Plane Systolic FIR )架構上,並詳細介紹位元 平面摺疊演算法的公式推導,而提出了如何去摺疊轉換位元平面架構的資料流程 圖( Data Flow Graph ),最後成功地實現其位元平面摺疊演算法架構。
2.4 .1 位元平面濾波器架構位元平面濾波器架構位元平面濾波器架構位元平面濾波器架構
2.4 .2 位元平面濾波器轉換公式推導位元平面濾波器轉換公式推導位元平面濾波器轉換公式推導位元平面濾波器轉換公式推導
2.4 .3 實現實現實現實現位元平面位元平面位元平面位元平面摺疊摺疊摺疊架構摺疊架構架構 架構
實現摺疊位元平面濾波器架構如圖圖圖圖 2.8 所示,假設為 K-1 階有限脈衝濾波 器,且其係數長度為 b 位元,所以,圖中虛線矩形總共會有 K 個,且其摺疊因
數為 b,原因是它分成 b 回合來完成一次 K-1 階有限脈衝濾波器運算;{}中的數 字代表 b 回合中的第幾回合。觀察圖圖圖圖 2.8 並初步估計其暫存器個數應該為 K 個,
但又因為最基本的運算器是一個全加器( Full Adder ),推論要有兩倍的記憶儲存 元件( Sum ,Carry ),所以,中間運算的暫存器個數顯然亦未達到最佳化,仍然有 機會可朝向減少中間運算暫存器的方向來發展一套新摺疊演算法。
資料輸入、係數輸入與資料輸出實際操作流程圖,請參考圖圖圖圖 2.9,將會有更 清楚的概念,(a)中的 Processor Array 那塊即是執行圖圖圖 2.8 的摺疊架構;(b)顯示為圖 位元平面摺疊演算法中基本構成元件-位元處理器,由兩個多工器、兩個記憶元 件(正反器)及全加器所組成,其連線方式如圖所示;(c)以(b)圖為基本元件搭配多 工器、移位暫存器及 VMA 完成(a)架構圖。
… …
… …
第三章 第三章 第三章 第三章
新摺疊演算法之推演與建立
現今有許多的硬體設計為了追求簡單化以及規律性,大多採用運算單元陣列 的形式,其中最著名的就是心脈式( Systolic )陣列。心脈式陣列是由 Kung [16] 在 1980 年提出來的一種硬體架構,這種架構是由一些簡單的基本運作單元( PE )所 連接組成,所以其架構擁有規則且簡單的特性,適合用在超大型積體電路的設計 上。此外,心脈式陣列用到了大量的管線化( Pipelining )以及多重運作( Multi- Processing ),因此,它可以達到高速的運作效能以及維持很高的資料處理速率 ( Throughput )。
當應用所需資料處理速度( Throughput )小於實際電路可以操作的速度時,[9]
-[11]推薦了一些摺疊演算法來減少硬體實現面積。然而,有限脈衝響應濾波器是 非常適合用來討論及實現摺疊技術的應用,因為其基本上只是一直在做重複乘累 加的動作。
從另一個角度來看,倘若在整個系統中,有限脈衝響應濾波器方塊的下一級 若不需要很高的處理速率( Throughput ),那麼此高處理速率的優點,勢必可以拿
來交換一些其他的好處。摺疊硬體就是一個以降低處理速率而獲得硬體面積減少 的一個方法,將一連串基本運作單元的陣列透過摺疊演算法,進而使用少量的運 算單元,而使用分時來完成原本的工作,雖然完成工作的時脈加長,但運算單元 卻減少,對於不必要很高處理速率的系統,不失為一個好方法,而其最大的好處 除了以時間上的優勢取得空間上的改善外,摺疊後的架構也有可重覆使用性,增 加了硬體的彈性。
3.1 新 新 新 新摺疊演算法的硬體架構推導 摺疊演算法的硬體架構推導 摺疊演算法的硬體架構推導 摺疊演算法的硬體架構推導
對於硬體摺疊的好處,是讓人顯而易見的,但是對於摺疊方式的推導,卻沒 有一個非常明確的流程讓人遵循,所以在這一個章節中,首要的目的就是介紹硬 體摺疊的步驟,並將其稱為新摺疊演算法,只要依照步驟實行,整個過程是相當 有規劃地進行,且摺疊後的架構在時脈上也不至於出錯。
一般傳統運算單元陣列,對於訊號傳遞的路徑,可分為兩類:向前路徑 ( Forward Path )以及回授路徑( Feedback Path )。向前路徑上的訊號,在兩兩相鄰 的運算單元之間互有關係;而回授路徑上的訊號,則只有在本體運算單元中有影 響。
對於陣列中的每個基本運作單元,主要區分成乘法器與加法器兩部分;而陣 列中儲存資料的暫存器,則將之抽離開資料路徑( Data Path ),另外再規劃一個區 塊稱為暫存器檔案( Register File ),專門負責暫存器資料儲存與更新,並有技巧 性地對其暫存器定址,成立此一區塊的目的是:希望讓本篇推導的新摺疊演算法 架構與其他現今相關摺疊演算法架構相比,有較佳成本效益即希望能有較少的硬 體面積與較低的功率消耗。
圖 圖 圖
圖 3.1 所示即為一個基本運算處理單元-乘加器( MAC ),為了讓新摺疊演 算法推導表示上方便,本篇將乘加器視為一個乘加點( MA Node ),往後在運算 單元的表示上,也都以乘加點的方式呈現。
x
+
h0
h0
MA node
基本運算單元轉換乘加點
現在就以一個串接 12 個基本運作單元的有限脈衝響應濾波器為例子,說明 新摺疊演算法的推導。一開始在摺疊之前,首先考慮所需要使用的運算單元個 數,假設採用 3 個運算單元,於是可以將 12 個基本運作單元分成 4 列,每一列 的運算單元必須完整的排列對齊,這樣的目的是打算將原本一個回合內完成的資 料計算,分成 4 個的時間點來運作,每一列各分配到一個時間點進行。圖圖圖 3.2 所圖 示就是運算單元的排列方式。
h0 D h1 D h2 D
h3 D h4 D h5 D
h6 D h7 D h8 D
h9 D D
D
0運算單元陣列 x[n]
y[n]
h10 h11
接著,對整體的架構開始作一些簡單的推導轉換。將每個暫存器(為圖中所 示的 D)放大成( Scaling )4 倍,接著在列與列的每個向前路徑上加入資料銜接的 暫存器(位於每列最後的深色 D),這麼一來,在每回合的第一個時間點時,x[n]
送入資料,僅第一列的三個乘加器( h0 ,h1 ,h2 )開始動作,且將其乘加運算後的 結果存入該列各暫存器的第一個位置,同時,向前路徑上第一列最後一個暫存器 的值,也會傳遞至第一列與第二列的銜接暫存器中,而第二列、第三列及第四列 的運算單元則沒有動作;到了第二個時間點,第二列的第一個乘加器就讀入銜接 暫存器的值,第二列的運算單元開始運作,並且將結果存入該列各暫存器的第二 個位置,其餘三列的運算單元均不動作,當然向前路徑上第二列最後一個暫存器
送入資料,僅第一列的三個乘加器( h0 ,h1 ,h2 )開始動作,且將其乘加運算後的 結果存入該列各暫存器的第一個位置,同時,向前路徑上第一列最後一個暫存器 的值,也會傳遞至第一列與第二列的銜接暫存器中,而第二列、第三列及第四列 的運算單元則沒有動作;到了第二個時間點,第二列的第一個乘加器就讀入銜接 暫存器的值,第二列的運算單元開始運作,並且將結果存入該列各暫存器的第二 個位置,其餘三列的運算單元均不動作,當然向前路徑上第二列最後一個暫存器