• 沒有找到結果。

第三章 系統架構

第一節 比對端

比對端主要電路架構如圖 3-2 所示,其主要含有 NIOS II 處理器、DMA

Controlle、Memory 及 Ethernet MAC 等週邊裝置,可以利用 AVALON BUS 來傳 輸所有裝置的資料。

圖 3-2 比對端主要電路架構

NIOS II 處理器負責協調系統上的所有裝置,在我們的系統中,近似字串比 對並不交由 NIOS II 處理器來運算,原因是 NIOS II 處理器的 throughput 有限,若 是以 NIOS II 處理器來執行 shift-and-or 演算法,必定會消耗相當久的時間。為了

增加音樂檢索的速度,我們設計一個電路來進行字串比對,此電路可視為 NIOS II 處理器的一個 Custom User Logic,當 MAC Controlle 獲得使用者端傳來的查詢資 料後,NIOS II 處理器會將查詢資料傳送至字串比對電路。

接著,音樂資料庫中的旋律字串開始傳送至字串比對電路,我們將音樂資料 庫放置於 CF 卡中,傳送過程可以分為兩個階段,第一個階段,旋律字串由 CF 卡 傳 送 至 系 統 的 主 記 憶 體 ; 第 二 階 段 , 儲 存 在 主 記 憶 體 的 旋 律 字 串 經 由

DMA(Direct Memory Access),傳送至字串比對電路,使用 DMA 有益於降低資料 的存取時間。

由於音樂資料庫的容量可能相當大,在 DMA 運作之前,很難一次將資料庫 中所有資料傳送至主記憶體,因此,我們在主記憶體中使用了兩個 Buffer,一個 給 DMA 使用;另外一個在接收 CF 卡傳來的資料時使用,當 DMA 運作完成之後,

兩個 Buffer 的角色就會互換。讀取的機制如圖 3-3 所示,第一個 Buffer 將資料以

DMA 機制送至字串比對電路比對時,第二個 Buffer 在同一時間從 CF 卡抓取歌曲 資料;然後換第二個 Buffer 將資料以 DMA 機制送至字串比對電路比對,第一個

Buffer 從 CF 卡抓取歌曲資料。利用 Buffer 和 DMA 機制共同運作之下,讀取 CF 卡資料和送資料至字串比對電路也就可以同時進行,對於系統效能不會帶來衝 擊。

圖 3-3 旋律字串由資料庫傳送至字串比對電路的流程圖

圖 3-4 為字串比對電路的架構圖,也就是我們實現 shift-and-or 演算法的硬體 電路。其中包含三個部份:前處理單元(pre-matching unit)、比對核心(matching core) 以及後處理單元(post-matching unit)。此電路接收 NIOS II 處理器傳來的查詢樣 本、以及 CF 卡/主記憶體傳來的旋律字串後,接著會傳回有比對到的歌曲索引值 及其編輯距離(edit distances)給處理器。

前處理單元用來儲存近似字串比對所需要的資訊,它包含一個 RAM 存放

shift-and-or 演算法運算所需的位元向量S 。在我們的設計中,使用者端會利用公k 式(2.2)將查詢樣本 P 轉換為位元向量Sk ,k =1,...,| Σ|,而位元向量S 則會取代查k 詢樣本P 傳送至我們的電路中,其資訊相當於查詢樣本 P 的內容。由於字元集合 Σ 與查詢樣本 P 通常都不大,所以傳送位元向量Sk,k =1,...,|Σ|時,並不會有太高

的 overhead。

Pre-matching unit

Post-matching unit

Matching core Inputs

Outputs

圖 3-4 字串比對電路架構圖

為了讓一首曲子可以以任何音高當作起音,而還是代表相同的旋律,也就是 符合「音調無關」,我們將集合 Σ 中的符號由音符改為鄰近兩音符之間的差值。

當前處理單元中的 RAM 儲存完查詢樣本的資訊後,我們的硬體電路就準備好要 執行近似字串比對。在透過 DMA 接收主記憶體傳來的資料後,比對流程便開始 進行,一個時間點只會接收到一個符號,t 代表接收到的資料中第 j 個符號。為j 了實現「音調無關」,t 為旋律字串中的第 j 個音符與第j j-1個音符之間的差值

(difference),我們的作法是先計算出t ,然後放置於資料庫中。 j

為了簡單說明比對核心的電路架構,我們先假設電路僅能執行完全比對,假 設現在字串比對執行到t 已比對完成,接著要執行j t ,其電路架構如圖 3-5 所示,j+1 每個 stage 僅包含一個 1-bit 的暫存器及一個 AND 閘。

]

Stage 1 Stage 2

Stage m (a)

(b)

+1

Rj

Rj

(c)

Rj Rj Rj+1

Rj

+1

Rj

] Sc[i

(d)

圖 3-6 比對核心架構圖:(a)比對核心包含 m 個 stage,(b)比對核心中每個 stage i 的架構,(c)stage i 中 component 0 的電路圖,(d) stage i 中 component k,k =1,...,d 的電路圖

d k

i

Rkj[], =0,1,..., ,除了暫存器之外,stage i 也包含d+1個 components,component k,k =0,...,d則是負責計算Rkj+1[i]。

由於R0j+1[i]表示完全比對的結果,所以用來計算R0j+1[i]的 component 0,等同 於實現完全比對的硬體,此 component 也就只包含一個 AND 閘。根據公式(2.13),

負責計算Rkj+1[i]的 component k,0<kd,擁有 5 個輸入端:Rkj-1[i-1]、Rkj-1[i]、

1]

-1[

-1 i

Rkj+Rkj[i-1]及Sc[i]。Rkj-1[i-1]、Rkj-1[i]、Rkj+-11[i-1]、Rkj[i-1]可以由 stage istage i-1的暫存器或 component 輸出獲得,Sc[i]則可由前處理單元的 RAM 中 取得,依照公式(2.13),component k,k >0是由 3 個 OR 閘及 1 個 AND 閘組成,

所有 components 的運算會在同一個 clock 週期中完成。另外,比對核心中的所有

stages 會同時平行運作,因此 clock 週期的運算時間與允許錯誤數目 d 及查詢樣本 的長度m 無關,所以我們提出的電路架構,其時間複雜度即為 O(n),n 為所有旋 律字串的長度。

當比對核心可以允許錯誤時,針對每個比對到的歌曲,後處理單元要可以找 出其錯誤數目。另外,給定一個旋律字串,當查詢樣本與多個片段 match 時,後 處理單元應該要能記錄最小的錯誤數目,此最小的錯誤數目用來當作相似度的評 分依據。每個有比對到的歌曲,其索引值及分數會被傳回使用者端。

圖 3-7 為近似字串比對電路中的後處理單元,其輸入為比對核心中每個 stage 的暫存器所持有的位元向量。如之前提到的,Rkj[i]=1表示當比對至t 時,查詢j 樣本p1,..., pi被發現有 match,而其錯誤數目為 k。另外,當比對進行至t 完成時,j

stage i 中的暫存器會擁有位元向量

[

R0j[i],...,Rdj[i]

]

T。所以,雖然查詢樣本的長度 預設為m,但是當實際的查詢長度為 i, 0<im時,stage i 中的暫存器所擁有的 位元向量仍然可以偵測出有無 match。如圖 3-7 所示,在我們的設計中有一個多 工器用來選擇位元向量,存放在前處理單元中的實際樣本長度是選擇的依據,在 允許不同樣本長度的近似比對之下,這種設計方法提供更多的彈性。

圖 3-7 後處理單元架構圖

從 圖 3-7 可 看 出 多 工 器 的 輸 出 會 連 接 至 一 個 具 優 先 權 編 碼 器 (priority

encoder),它的目的是確定是否有 match 發生,如果有偵測到 match,編碼器會輸 出此 match 的錯誤數目。因為查詢樣本有可能 match 旋律字串中的多個片段,我 們不必將所有 match 的錯誤數目儲存起來,只需將最小的錯誤數目記錄即可,為 了實現上述的作法,後處理單元也包含了一個比較器及一個 Buffer。Buffer 用來

錯誤數目就會與目前 Buffer 中的最小錯誤數目做比較,當新的 match 有較小的錯 誤數目時,就會取代原本在 Buffer 中的最小數目。

相關文件