第五章 FBP 元件實作
5.2 user_logic VHDL 程式模組
5.2.1 user_logic 模組實作
由於 FBP 元件功能一要作 FFT,加權運算及 IFFT,而 FBP 元件在 PLB bus 系統中是 Slave mode,所以我們使用 IPIF 框架提供的服務建立一組暫存器作為 資料溝通的方式。而 user_logic 模組內有定義好的暫存器讀寫功能,因此我們不 為了 FBP 元件功能一另外建立一個 VHDL 模組,避免 FBP 元件內模組之間作多 餘的資料交換動作。
user_logic模組的線路符號代碼如下,而訊號的定義請參考表 4-3。
Bus2IP_Data IP2Bus_Data Bus2IP_RdReq IP2Bus_RdAck Bus2IP_WrReq IP2Bus_WrAck Bus2IP_RdCE
Bus2IP_WrCE
Bus2IP_BE IP2Bus_Busy Bus2IP_Reset IP2Bus_Retry IP2Bus_Error Bus2IP_Clk IP2Bus_ToutSup
圖 5-9 Core Schematic Symbol
根據FBP元件功能一及功能二,我們需要規劃一個有限狀態機來控制FBP元 件的工作流程,圖 5-10是有限狀態機的主要狀態圖。其中IDLE狀態,是user_logic
模組的初始狀態,在IDLE狀態中的工作就是初始化user_logic模組內的參數及內
圖 5-10 user_logic 模組的有限狀態機示意圖
二細分為四大部分,load job,filter job,
unlo
讀取 sinogram 影像的資料並儲存到 Signal-Port Block
z
k RAM 中將資料讀出並依序輸入 Fast Fourier Transform v3.1 IP 接著我們將FBP元件功能一及功能
ad job,fbp_locate job。每一部份都包含一連串的狀態(state),不同的狀態執 行不同的工作,利用狀態的改變循序完成整體工作,其中有關公式計算的部份作 法如同5.1.3節一樣分解成較短的公式分配到各個狀態中執行。四大部分的工作內 容依執行順序分述如下:
z load job:從暫存器中
Memory IP 合成的 Block RAM 中。
filter job:
從 Bloc
邏輯合成的電路中作 FFT 轉換。
Fast Fourier Transform v3.1 IP 邏輯
合成的電路輸出完成 FFT 轉換的資
料,乘與濾波器ω 後存回 Block RAM 中。
從 Block RAM 中將資料讀出並依序輸入 Fast Fourier Transform v3.1 IP
合成的電路輸出完成 IFFT 轉換的資
z unlo ter process 的資料寫回暫存器,由軟體
z b:從暫存器中讀入三階 for-loop 的索引值 y、x 及 i,並傳入 邏輯合成的電路中作 IFFT 轉換。
Fast Fourier Transform v3.1 IP 邏輯 料,直接存回 Block RAM 中。
ad job:將 Block RAM 中完成 fil 讀回資料。
fbp_locate jo
fbp_locate VHDL 模組中進行計算,得到 lbin 及 frac 兩個值後寫回暫存器中,
由軟體讀回資料。
FSM
Read_Write_BRAM fbp_locate
Decoder Fast Fourier
Transform v3.1 IP
Single-Port Block Memory V6.1 IP Memory
圖 5-11 user_logic 模組功能方塊圖
的功能方塊圖(function diagram),依功能分類描述 圖 5-11是user_logic模組內
user_logic模組內的主要架構,其中比較重要的內部訊號我們也列在方塊圖中。
其中方塊FSM包含一個fsm process,此process的內容是一個有限狀態機控制狀態 改 變 如 圖 5-10 所 示 。 而 方 塊 Read_Write_BRAM 則 包 含 一 個 read_write_bram process,此process搭配Single-Port Block Memory v6.1 IP與Fast Fourier Transform v3.1 IP用來完成前面提到的load job,filter job及unload job三個工作。fsm process 藉由write_num訊號來告訴read_write_bram process,在此狀態下該執行那樣工 作 。 當 工 作 完 成 後 read_write_bram process 則 回 報 fsm process 工 作 完 成 。 read_write_bram process 介 於 Single-Port Block Memory v6.1 IP 與 Fast Fourier Transform v3.1 IP之間,除了擔任此兩個IP的資料收送外,也負責資料乘與濾波 器ω 作加權動作。在這邊要特別注意的是,read_write_bram process在使用Fast Fourier Transform v3.1 IP的電路執行FFT或是IFFT時,此電路的參數設定由fsm process直接設定後,read_write_bram process才將資料輸入電路中。
而第四個工作 fbp_locate job 則是執行 fbp_locate VHDL 模組來完成,同樣的 也是
SLAV