• 沒有找到結果。

對於以上所介紹硬體架構及應用結果進行總結。

第二章 基礎理論及技術背景介紹

本章節將介紹本論文所使用到的基本理論與技術背景,首先利用前兩節來介 紹 SoC 與 NoC 接著在第三節中說明 FPGA 和整合 FPGA 與 Qsys 的設計架構與開 發流程。最後用第四節與第五節分別討論主動型態與 SDRAM Controller。

2.1 System on Chip

2.1.1 SoC 的發展

SoC 就是利用一些元件做組合以達到特定的功能並將其放在單晶片上。

這種將系統放在單晶片中有什麼好處呢?如提升系統效能、降低功率消耗、縮小 體積、提高速度與節省成本等。由於將系統中的 IC 數目降低,所以縮小體積與 減少成本是可以的預期的,而將電路濃縮到單晶片上使得各個元件之間的距離變 得更近以達到提升系統效能與降低功率消耗。另外現今的 IP 設計大部分都是以 模組化為主,其好處可以提供重複利用性,這個特性將會成為影響開發時間與成 本的重要因素之一。

達到這些優點的前提是將各個功能放在單一晶片上,又單晶片上的面積有限 而我們想要放入的功能是無限的,隨著製程的進步使可以放入的功能愈來愈多,

但是伴隨而來的就是 IC 設計的複雜度與驗證(Verification)的難度也就愈來愈高。

2.1.2 SoC 的系統架構

一般常見的 SoC 架構,是以處理器為中心,加上 RAM、Bus、客製化電路等 等的一起運作。其中 Bus 的功能是提供 SoC 中各個元件之間的資料傳遞與溝通的 管道,且採用的是 Shared Bus 的方式如下圖 2.1 所示,另外圖中的 PE (Processing element)可以代表 CPU、DMA、RAM 或是客製化電路等。

PE_B PE_A

PE_C PE_D PE_E

Shared Bus

圖 2.1 共享匯流排

舉個例子來說明此圖,當有 PE_A 想要傳遞資料給 PE_B 時,首先 A 會將資 料用廣播的方式放在 Bus 上,接下來 B 會在 Bus 抓取需要的資料,即可完成資料 的傳輸。但是若有一組以上 PE 想要相互溝通,如在 PE_A 與 PE_B 互相傳送的 時候,PE_C 也想與 PE_D 溝通,這時,PE_C 與 PE_D 就必須等待 PE_A 與 PE_B 完成後將 Bus 釋出才有辦法進行動作,如此會使之產生額外的等待時間,進而造 成目前的通訊瓶頸。

2.2 Network on Chip

2.2.1 NoC 的發展

由於 SoC 的設計愈來愈複雜,Shared Bus 的結構已不敷使用,而 NoC 的誕 生就是為了解決這個問題。NoC 最核心的概念就是將電腦網路架構的方式移植到 單晶片的設計上,與分散式系統的網路概念有點類似,且每個元件之間有各自連 接的通道,使之擁有較好的擴展性。

隨著製程的進步,在各元件之間因為 Shared Bus 結構所造成溝通的延遲已經 成為整體性能的瓶頸, NoC 中,會利用 Router 將各元件之間連接起來使得大幅 度的降低彼此溝通所造成的延遲以解決 SoC 中遇到的困難與瓶頸。當 NoC 系統 有擴展的需求時,只要再設計一個新的 NI 來配合該元件即可將其加入網路架構 中以完成擴展的動作。由於 NoC 中有全域非同步局部同步(GALS;Globally Asynchronous Locally Synchronous)的概念使得 NoC 比 SoC 擁有更好的擴展性。

2.2.2 NoC 的架構

一般 NoC 的系統內部通常包含了 PE、網路介面(Network interface,NI)、

和路由器(Router),架構如下圖 2.2。NI 為元件與 Router 之間連接的橋樑,每個 NI 會分為兩個部分,分別為 request 與 response,當發出 request 才會產生相對應 的 response 並且這兩個部分為 loosely coupled 的關係。另外 Router 為各元件之間

連接的中介,只要配合 NI 就可以使元件與元件之間可以建立起連線,使資料可 個節點(Node)[1]並利用 Interconnection Network(也稱為 NoC Network)將每個節點 中的 Router 連接起來即可。如圖 2.2 中,Router 與 Router 之間的所有連線組成 Interconnection Network,而 node 是由 Router、NI 與 PE 等三項組合而成的。

2.3 FPGA 系統設計

由於 IC 產品的設計週期愈來愈短,且所要求的功能愈來愈多也愈來愈複雜,

與 ASIC 相比 FPGA 擁有較低研發成本、較短的研發時間與高度彈性等優點,使 得愈來愈多開發人員選用 FPGA 做為開發的平台。另外使用硬體描述語言

(Hardware Description Language, HDL)搭配 FPGA 來設計電路,只要經過簡單的合 成(Synthesis)與繞線佈局(Routing and Placement)可快速的重複燒錄至 FPGA 中來 進行測試。根據上述的優點,使得 FPGA 已成為 IC 設計的主流。

Altera 公司根據不同使用者的需求,提供許多不同系列的 FPGA 開發板,本 論文是使用 Stratix III EP3SL150 (DE3-150)系統開發版作為開發平台以實現主動 型態硬體加速電路。

圖 2.3 Qsys 系統架構圖[2]

Altera 除了提供開發版也提供了 NIOS 與 Qsys 等軟體作為開發人員的開發工 具。圖 2.3 為一個 Qsys 系統架構圖,當中的 Avalon Bus 是 NIOS 在 Qsys 上用以 內部互聯(Interconnect)使得 NIOS processor 與其他設備端口連接再一起的匯流排 架構。開發人員設計出的硬體電路被視為一個客製化邏輯電路(Custom Logic

Circuit),透過此匯流排上的各個訊號線,將電路掛在 Avalon Bus 上與整個系統溝 通。另外 Qsys 系統的開發分硬體和軟體開發兩個部份,其流程如下圖 2.4[3]。

Design Custom Logic

Hardware Development

Software Development

Add Custom Logic

Add

Get the results

Verification

圖 2.4 Qsys 開發流程

2.4 主動型態

2.4.1 主動型態的簡介

在 Qsys 中,PE 可分為兩種:主動型態(Master)與被動型態(Slave),若 PE 代 表了記憶體的存取裝置,則主動 PE 可以主動地向其他 PE 要資料,而被動 PE 會 被動地提供資料,也就是說被動 PE 為接受主動 PE 所提出的要求,而主動 PE 要 主動的產生 address 與告知被動 PE 現在要執行 read 或是 write。以被動 PE 觀點來 看,當 read 時,被動 PE 接收 address 而提供 data;反之在 write 時,被動 PE 接 收 address 與 data。不同於被動 PE,主動 PE 需要產生存取的位址與 read 或 write 的要求,所以在設計上主動 PE 會比被動 PE 複雜許多,經過上述的討論,我們可 以發現被動 PE 與主動 PE 最大的差別在於只有主動 PE 可以對被動 PE 發起傳輸 與被動 PE 在設計上會較為簡單。

此外在 Master 中會提供 waitrequest 的訊號,該訊號扮演了我們在設計 Master 電路中的很重要的角色。相反的在 Slave 中,並沒有提供 waitrequest 這條訊號,

是因為 Slave 大都屬於 On-Chip 的,所以大部分的情況下都不會使用到。由於我 們採用的是 Altera 所生產的 FPGA 開發板作為實作的平台,所以在設計上必須遵 守該公司所提出的 Avalon Interface Specification[4]中所提出各訊號的規範與要 求。

有鑑於 waitrequest 的重要性,將詳細介紹此訊號。當 Master 發出 read 或是 write 的要求時,Slave 就會回傳 waitrequest 給 Master,若此 Slave 正在處理別的 Master 的要求或是尚未處理完上次的工作,則 Slave 會將 waitrequest 設定為 1 並 且回傳給 Master,反之則將 waitrequest 設定為 0。根據上述 waitrequest 的特性,

我們在設計電路時若遇到 waitrequest=1 的情況就必須將要給 Slave 的控制訊號與 資料保持不變,直到 waitrequest=0 時才可以換下個動作,否則會因為 Slave 處於

busy 的狀況下,無法接收 Master 當下的要求,等到 waitrequest=0 的時候,所給 的資訊已經不是正確的,進而導致電路出現錯誤。其他如 address、read、write、

byteenable、readdata、writedata 與 readdatavalid 等用下面表 2.1 來說明。

address 用來指定目前命令(read 或 write)的位址。

read 若為 1,則表示目前命令為 read。

write 若為 1,則表示目前命令為 write。

byteenable 用來決定要忽略 writedata 或 readdata 的 byte 數。

readdata 當 read 執行時,所得到指定位址的資料。

writedata 當 write 執行時,所要寫入指定位址的資料。

readdatavalid 當 readdata 有效時會被設定為 1。

表 2.1 各訊號的簡介

2.4.2 主動型態 Read 的工作流程

在主動型態 Read 中,工作流程如下:

Step1:在 reset=0 的 clk rising edge 之後,會將 address 與 byteenable 設定好,

並觀察 waitrequest 在同一個 clk 之內是否有被設定為 1。若 waitrequest=1 則在下 個 clk rising edge 時必須將 address、read 與 byteenable 等三個訊號保持原樣。

Step2:當 Slave 已經提供正確的 readdata 時,readdatavalid 就會被設定為 1 並且在同一個時間點會將 waitrequest 設定成 0。

Step3:經過上面兩個步驟,已經完整的完成讀取的流程。由於接下來的 waitrequest=0 且 readdatavalid=1,我們可以停止或是開始新的讀取動作,若要執 行下個讀取就將 read 設定為 1 並且提供新的 address 與 byteenable 即可。

下面用圖 2.6 做為例來說明主動型態 Read 的工作流程

a:因為 reset=0 則在 clk 的 rising edge 後,會將 addr1 與 byteenable 設定好,

並且觀察到 waitrequest=0(Step1)。

b:由於 read=1 且 readdatavalid=1 則表示 data1 為正確的,並且 Slave 會將 waitrequest 設定為 0,到此完成讀取 addr1 的動作(Step2)。又此 clk rising edge 後 read=1 表示還有讀取的動作尚未結束,並設定下個 read 的位置(addr2)與 byteenable 並且觀察到 waitrequest=1(Step1)。

c:由於 waitrequest=1,須維持 addr2、read 與 byteenable(Step1)。

d:由於 read=1 且 readdatavalid=1 表示 data2 為正確的,並且 Slave 會將 waitrequest 設定為 0,到此完成讀取 addr2 的動作(Step2)。因為此 clk 後 read=0,

表示沒有下個讀取的動作。

2.4.3 主動型態 Write 的工作流程

在主動型態 Write 中,其工作流程如下:

Step1:在 reset=0 的 clk rising edge 之後,會將整個電路 reset。,會將 address、

byteenable 與 writedata 設定好,並觀察 waitrequest 在同一個 clk 之內是否有被設 定為 1。若 waitrequest=1 則在下個 clk rising edge 時必須將 address、write、byteenable 與 writedata 等四個訊號保持原樣。

Step2:若 waitrequest=0 則 Slave 得到 writedata,且將 writedata 寫入指定的 address 上。

Step3:經過上面兩個步驟,已經完整的完成寫入的流程。由於 waitrequest=0,

我們可以停止或是開始新的寫入動作,若要執行下個寫入就將 write 設定為 1 並 且提供新的 address、byteenable 與 writedata 即可。

圖 2.7 主動型態 write 之時序圖

下面利用圖 2.7 做為例來說明主動型態 Write 的工作流程

a:因為 reset=0 則在 clk rising edge 後,會設定 addr1、byteenable 與 data1,

並且觀察到 waitrequest=0(Step1)。

b:由於 waitrequest=0 表示此時會將 data1 寫入 addr1 中,到此完成寫入的動 作 (Step2)。又此 clk 後 write=1 表示還有 write 的動作尚未結束,並設定下個 write 的位置 addr2、byteenable 與 data2 並且觀察到 waitrequest=1(Step1)。

c:由於 waitrequest=1,須維持 addr2、byteenable 與 data2 (Step1)。

d:由於 waitrequest=0 表示此時會將 data2 寫入 addr2 中,到此完成將 data2 寫到 addr2 的動作 (Step2)。因為此 clk 後 write=0,表示整個寫入的動作結束。

2.5 SDRAM Controller

在 Qsys 中,常見的主動 PE 為 CPU,而被動 PE 為 SDRAM Controller[5]。由 於我們後續的電路會存取 SDRAM,而存取 SDRAM 需要用到 SDRAM Controller,

所以在此對 SDRAM controller 作介紹。那為什麼在存取 SDRAM 時需要用到

SDRAM controller 呢?因為 SDRAM 為 Off-Chip RAM 而非放在 FPGA 上,所以 每當我要讀寫 SDRAM 時,就必須透過 SDRAM controller 來使 SDRAM 與 FPGA 得以相互交換資料。相同的道理,我們在 Qsys 中若要存取 SDRAM 也必須用 SDRAM controller 才有辦法接受讀或寫的要求。

也因為是透過 SDRAM controller 來與存取 SDRAM,使得我們不需要了解整 個 SDRAM 內部的運作流程也能存取 SDRAM。若要讀取 SDRAM 中的資料,則

也因為是透過 SDRAM controller 來與存取 SDRAM,使得我們不需要了解整 個 SDRAM 內部的運作流程也能存取 SDRAM。若要讀取 SDRAM 中的資料,則

相關文件