基於 sopc 影像處理驗證平台之設計與實作

65
iv ....................................................................................................................... i ABSTRACT ................................................................................................................. ii .....................................................................................................................iii ..................................................................................................................... iv 表目錄..................................................................................................................... vi 圖目錄.................................................................................................................... vii 第一章 緒論 ............................................................................................................... 1 1.1 研究動機與目的 ............................................................................................ 1 1.2 章節架構........................................................................................................ 2 第二章 相關背景........................................................................................................ 3 2.1 色彩模型(Color Space) .................................................................................. 3 2.2 空間濾波器(Spatial Filter) ............................................................................. 4 2.3 影像二值化.................................................................................................... 4 2.4 型態學(Morphology) ...................................................................................... 5 2.5 連通物件標記(Connected-Component Labeling) ........................................... 6 2.6 物件偵測範例 ................................................................................................ 7 第三章 影像驗證平台之發展環境與周邊電路 ......................................................... 8 3.1 NIOS 發展環境簡介 ...................................................................................... 8 3.1.1 開發流程 ............................................................................................ 8 3.1.2 Avalon Bus 簡介 ................................................................................. 9 3.1.3 自定周邊 .......................................................................................... 12 3.1.4 DMA Controller ................................................................................ 14 3.1.5 計時方式 .......................................................................................... 16 3.2 周邊裝置...................................................................................................... 17 3.2.1 CMOS Sensor (外部電路) ................................................................ 18 3.2.2 Bayer Color Pattern Data to 30-Bit RGB ........................................... 20 3.2.3 VGA Controller and Data Request .................................................... 22

Upload: jeff1979

Post on 27-Jul-2015

8.065 views

Category:

Documents


1 download

DESCRIPTION

sopc

TRANSCRIPT

Page 1: 基於 SOPC 影像處理驗證平台之設計與實作

iv

目 錄

摘 要….......................................................................................................................i

ABSTRACT .................................................................................................................ii

誌 謝….....................................................................................................................iii

目 錄….....................................................................................................................iv

表目錄….....................................................................................................................vi

圖目錄…....................................................................................................................vii

第一章 緒論 ...............................................................................................................1

1.1 研究動機與目的 ............................................................................................1

1.2 章節架構........................................................................................................2

第二章 相關背景........................................................................................................3

2.1 色彩模型(Color Space) ..................................................................................3

2.2 空間濾波器(Spatial Filter) .............................................................................4

2.3 影像二值化....................................................................................................4

2.4 型態學(Morphology)......................................................................................5

2.5 連通物件標記(Connected-Component Labeling) ...........................................6

2.6 物件偵測範例 ................................................................................................7

第三章 影像驗證平台之發展環境與周邊電路 .........................................................8

3.1 NIOS發展環境簡介 ......................................................................................8

3.1.1 開發流程 ............................................................................................8

3.1.2 Avalon Bus簡介 .................................................................................9

3.1.3 自定周邊 ..........................................................................................12

3.1.4 DMA Controller ................................................................................14

3.1.5 計時方式 ..........................................................................................16

3.2 周邊裝置......................................................................................................17

3.2.1 CMOS Sensor (外部電路) ................................................................18

3.2.2 Bayer Color Pattern Data to 30-Bit RGB...........................................20

3.2.3 VGA Controller and Data Request ....................................................22

Page 2: 基於 SOPC 影像處理驗證平台之設計與實作

v

3.2.4 VGA DAC(外部電路) ......................................................................23

第四章 影像驗證平台之設計 ..................................................................................24

4.1 元件層級連接架構 ......................................................................................24

4.2 系統層級連接架構 ......................................................................................25

4.3 匯流排頻寬分配 ..........................................................................................26

4.4 輸出界面設計 VGA_IF ...............................................................................29

4.5 輸入界面設計 CCD_IF................................................................................30

4.6 抽象化輸出入界面 ......................................................................................31

第五章 影像驗證平台之實作與使用範例 ...............................................................32

5.1 影像驗證平台之實作 ..................................................................................32

5.1.1 VGA_IF Finite State Machine...........................................................32

5.1.2 Reset電路 ........................................................................................34

5.1.3 Snapshot Operation ...........................................................................35

5.1.4 系統連接與頻寬分配 .......................................................................36

5.2 使用範例......................................................................................................37

5.2.1 初始硬體程式碼...............................................................................37

5.2.2 Example 1:Bypass ..........................................................................38

5.2.3 Example 2:Single Frame Process - RGB2Gray...............................39

5.2.4 Example 3:Scale and Diff ...............................................................40

5.2.5 Example 4:連通物件演算法實作 ..................................................43

第六章 結論 .............................................................................................................46

參考文獻 ....................................................................................................................47

Page 3: 基於 SOPC 影像處理驗證平台之設計與實作

vi

表目錄

表 2. 1 RBG-YUV、RGB-YCbCr轉換公式 ............................................................3

表 3. 1 Avalon Bus特性 ...........................................................................................9

表 3. 2 DMA暫存器...............................................................................................14

表 3. 3 Status暫存器說明.......................................................................................14

表 3. 4 Control 暫存器說明 ...................................................................................15

表 4. 1 VGA_IF暫存器規劃 ..................................................................................29

表 4. 2 CCD_IF暫存器規劃...................................................................................30

表 5. 1 VGA_IF Finite State Machine動作 .............................................................33

表 5. 2 CCL演算法測試結果(單位 clock) .............................................................44

Page 4: 基於 SOPC 影像處理驗證平台之設計與實作

vii

圖目錄

圖 2. 1 Mean Filter ....................................................................................................4

圖 2. 2 侵蝕(Erosion)示意圖 ....................................................................................5

圖 2. 3 膨脹(Dilation)示意圖....................................................................................5

圖 2. 4 4鄰與 8鄰連接 ............................................................................................6

圖 2. 5 連通物件標記運算範例................................................................................6

圖 2. 6 物件偵測流程 ...............................................................................................7

圖 3. 1 開發流程圖...................................................................................................8

圖 3. 2 主裝置-讀時序............................................................................................10

圖 3. 3 從裝置-讀時序............................................................................................10

圖 3. 4 主裝置-寫時序............................................................................................ 11

圖 3. 5 從裝置-寫時序............................................................................................ 11

圖 3. 6 自定模組信號分配設定..............................................................................12

圖 3. 7 自定模組.....................................................................................................13

圖 3. 8 使用 SOPC Builder 指定匯流排連接........................................................13

圖 3. 9 設定計時函數所使用的 Timer ...................................................................16

圖 3. 10 DE2開發平台...........................................................................................17

圖 3. 11 130萬像素數位相機開發平台參考設計介紹 ..........................................17

圖 3. 12 MT9M011接腳.........................................................................................18

圖 3. 13 Timing Example of Pixel Data ...................................................................18

圖 3. 14 Row Timing and FRAME_VALID/LINE_VALID Signals .........................18

圖 3. 15 Bayer Color Pattern ...................................................................................19

圖 3. 16 Bayer Color Pattern周邊顏色關係 ...........................................................19

圖 3. 17 Line Buffer 參考波形 ...............................................................................20

圖 3. 18 Stack參考波形 .........................................................................................21

圖 3. 19 VGA Controller 信號模擬波形 ................................................................22

圖 3. 20 VGA D/A Converter方塊圖 ......................................................................23

Page 5: 基於 SOPC 影像處理驗證平台之設計與實作

viii

圖 4. 1 利用 FIFO進行頻寬分配 ...........................................................................24

圖 4. 2 系統方塊圖.................................................................................................25

圖 4. 3 VGA測試資料安排....................................................................................26

圖 4. 4 Signal Tap II Trigger 設置方式...................................................................27

圖 4. 5 Arbitration (1,1,1),無法提供穩定頻寬,畫面抖動 ..................................27

圖 4. 6 Arbitration (2,2,6),無法提供穩定頻寬,畫面抖動 ..................................27

圖 4. 7 Arbitration (20,20,60) 可提供穩定頻寬,畫面正常顯示 ..........................28

圖 4. 8 VGA_IF設計方塊圖 ..................................................................................29

圖 4. 9 CCD_IF設計方塊圖...................................................................................30

圖 4. 10輸出入介面應用方塊圖...............................................................................31

圖 5. 1 VGA_IF State Machine ...............................................................................32

圖 5. 2 VGA_IF Raise DMA內部 State Machine ..................................................33

圖 5. 3 重置時序.....................................................................................................34

圖 5. 4 Snapshot Operation 示意圖 ........................................................................35

圖 5. 5 系統規劃與匯流排連接..............................................................................36

圖 5. 6 頻寬分配.....................................................................................................36

圖 5. 7 Example 1 Buffer 規劃 ...............................................................................38

圖 5. 8 Example 2 Buffer 規劃 ...............................................................................39

圖 5. 9 Example 3 VGA顯示畫面規劃 ..................................................................40

圖 5. 10 Example 3 Buffer 規劃及內部處理示意 ..................................................40

圖 5. 11 Example 3 執行結果 ................................................................................42

圖 5. 12 Example 4 VGA與 LCM顯示畫面規劃 .................................................44

圖 5. 13 Example 4 系統規劃方塊圖.....................................................................44

圖 5. 14 Example 4 系統配置 ................................................................................45

圖 5. 15 LCM上的執行結果 ..................................................................................45

Page 6: 基於 SOPC 影像處理驗證平台之設計與實作

1

第一章 緒論

1.1 研究動機與目的 現今監視系統幾乎隨處可見,顯示人們對安全的重視,但大部分的系統仍

舊停留在錄影的階段,為了使所獲得的影像資訊即時發生用途。許多廠商已開

發具有即時辨識功能的監視系統,為了達到即時處理資訊的目的,必需要在前

端系統進行運算,目前監視器大多已提供網路介面,若將影像傳至 Server 端後

再進行分析, Server端則將會有較大的負擔,若能以嵌入式裝置的方式設計監

視系統,於前端裝置提供影像的特徵值,後端軟體直接對特徵值進行分析,可

提高系統的效率,因此需要具備影像處理能力的嵌入式裝置。其中 ObjectVideo,

Inc.所發展的 ObjectVideo OnBoard是利用 TI所提供的 DaVinci技術所發展出來

具運算能力的終端監視設備。本論文則是以 SOPC的方式建構影像處理平台,提

供一個可進行軟硬體協同設計及系統層級規劃的驗證環境。

要實作相關的演算法,首先要處理的問題就是影像輸入、輸出的問題,隨

著 FPGA 技術的成熟已可達規劃系統的能力,進而發展出 SOPC(System On

Programmable Chip )的觀念,開發者可自行規畫的系統直接合成於一個晶片之

中,NIOS是 Altera所提供的 SOPC解決方案,藉由模組化、介面化的開發環境

讓使用者可以自定周邊以及規劃符合自己需求的系統,提高了 FPGA 在設計上

的靈活性。

本論文目的在於發展一個可以適用於 NIOS 系統的影像處理驗證平台,將

影像擷取裝置與影像輸出裝置,進行系統層級連接,利用該平台驗證相關的影

像處理演算法。平台主要實作兩個部分,(1)輸入介面(2)輸出介面。介面之功能

為協調頻寬,提供穩定頻寬給周邊裝置進行操作;輸入介面部分,由 CMOS

Sensor 擷取影像後透過輸入介面及 Avalon Bus存於 SDRAM中已宣告的變數區

塊中。輸出介面部分,VGA 控制電路可透過輸出介面及Avalon Bus取用 SDRAM

中已宣告的變數區塊進行影像顯示,輸出入介面包含一個 Avalon Master

Interface、兩個 Avalon Slave Interface及一個 FIFO組成。一個介面需搭配一個

Page 7: 基於 SOPC 影像處理驗證平台之設計與實作

2

DMA使用,藉由 Master Device及 FIFO來協調分配 SDRAM的頻寬。輸出入的

主要差異在於讀寫方向的不同;輸入部分為了要能控制 CMOS Sensor以 Frame

為單位進入 SDRAM,需包含一個模擬拍照行為的電路。主要的發展概念在使

CMOS Sensor控制電路、VGA控制電路及 CPU可對同一記憶體區塊進行存取,

達到對影像可進行擷取、軟體運算及顯示三種不同的動作。使用該平台與提供

的介面,能實際的使用 CMOS Sensor所接收的資料,並以軟硬體協同設計方式,

逐步將軟體執行效能瓶頸部分轉為硬體電路。

1.2 章節架構 本論文共分為六章。第一章闡述研究動機。第二章相關背景,簡要說明相

關的影像處理演算法及物件偵測範例。第三章簡介 Altera 的 NIOS 開發流程匯

流排週期、自定周邊的方式及平台所使用周邊電路的運作方式。第四章建立影

像輸出入介面,並說明在不同頻寬分配下的仲裁現象。第五章針對實作中重要

的幾個設計方式進行說明,並合成系統實際以範例來說明平台的使用方式。第

六章為本論文的結論。

Page 8: 基於 SOPC 影像處理驗證平台之設計與實作

3

第二章 相關背景

電腦視覺(Computer Vision),是藉由電腦來幫我們處理及判讀影像資料,在

工業、醫學及監視系統中都可以看到相關的應用,在電腦的協助下得以處理更

為龐大的資料,而相關的影像處理技術也因應而生。影像處理可以簡單分為影

像擷取、影像數位化、影像儲存、電腦處理及影像傳送等步驟。影像處理過程

中運用到的基本技術包含影像強化、影像還原、影像壓縮、影像分割及影像特

徵擷取。這裡針對物件偵測所涉及相關的影像處理技術加以介紹。

2.1 色彩模型(Color Space) 色彩模型[1]的目的是便於以某種標準且被廣為接受的方式來指定色彩,實

質上色彩模型是座標系統和該系統內一個子空間的一個規定,其中每一個色彩

用一個點來表示,常用的色彩模型有:三原色系列(RGB等)、亮度彩度系列(YUV

等)及等色差系列(U*V*W等),其中 RGB為一般感光原件所感測光的方式,YUV

亮度彩度則為比較適合人眼對色彩的感受,在數位處理中通常是採用 YCbCr,

YCbCr是將 YUV向上提升準位,使數值皆落在正數部分,轉換關係如表 2. 1:

參考 YUV to RGB即可得到若欲在彩色顯示器上顯示灰階影像時則將 UV設為

0,使 R=G=B=Y,顯示器所得影像即為灰階。

表 2. 1 RBG-YUV、RGB-YCbCr轉換公式 色彩模型轉換 轉換公式

RGB to YUV Y = 0.299R + 0.587G + 0.114B U =-0.196R - 0.331G + 0.500B V = 0.500R - 0.419G - 0.081B

YUV to RGB R = 1.000Y + 1.402V G = 1.000Y - 0.344U - 0.714V B = 1.000Y + 1.722U

RGB to YCbCr Y = 0.257R + 0.504G + 0.098B + 16 Cb=-0.148R - 0.291G + 0.439B + 128 Cr= 0.439R - 0.368G - 0.071B + 128

YCbCr to RGB R = 1.164(Y-16) + 1.596(Cr-128) G = 1.164(Y-16) - 0.391(Cb-128) - 0.813(Cr-128) B = 1.164(Y-16) + 2.018(Cb-128)

Page 9: 基於 SOPC 影像處理驗證平台之設計與實作

4

2.2 空間濾波器(Spatial Filter) 在影像強化(Image Enhancement)[1]的技術中,常使用空間濾波器來強化原始

影像,依濾波器的特性可分為三種:低通濾波器(Low-Pass Filter)、帶通濾波器

(Band-Pass Filter)及高通濾波器(High-Pass Filter);在空間濾波器中應用平均概念運

算的方式,一般為低通濾波器,可用於去雜訊及忽略細節。應用差值運算的方式,

一般為高通濾波器,可用在邊緣偵測及強調細節。監控系統中常使用低通濾波器

來使畫面平滑,降低雜訊對影像的影響,在偵測物件時則可用來忽略細節的變化。

低通濾波器較常用的有Mean Filter (圖 2. 1)及Median Filter。

0000

0900

09000

0000

1110

1111110

1111110

1010100

1/91/91/9

1/91/91/9

1/91/91/9

Mean filter

3x3 mask

輸入影像 輸出影像

圖 2. 1 Mean Filter

2.3 影像二值化 影像二值化[2]為一種影像的表示方式,一般以 0與 1兩個值來表示影像 0代

表暗點,1代表亮點,可由灰階影像經一個臨界值(Threshold)測試產生。在物件偵

測時,會檢查目前影像與背景的差異(減法運算),再對差值取絕對值接著判斷是否

大於臨界值,則可產生一影像。其中 0即可代表與背景相同,1則代表與背景不同,

而 1的部分通常就會被視為物件。

Page 10: 基於 SOPC 影像處理驗證平台之設計與實作

5

2.4 型態學(Morphology) 型態學[1]是一種根據形狀來做運算的一種技術,型態學中包含 4個基本運算:

侵蝕(Erosion)(圖 2. 2)、膨脹(Dilation) (圖 2. 3)、斷開(Opening)、閉合(Closing)。

在運算時使用 A、B 兩物件進行運算,B 物件會在 A 物件的邊緣上進行運算,如

圖 2. 2、圖 2. 3所示。Opening運算為先 Erosion再進行 Dilation,而 Closing運算

為先 Dilation再進行 Erosion,標記方式為:

Dilation: BA ⊕

Erosion: BAΘ

Opening: BBABA ⊕Θ= )(o

Closing: BBABA Θ⊕=• )(

B物件

A物件

使用B對A進行侵蝕

運算結果

圖 2. 2 侵蝕(Erosion)示意圖

B物件

A物件

使用B對A進行膨脹

運算結果

圖 2. 3 膨脹(Dilation)示意圖

Page 11: 基於 SOPC 影像處理驗證平台之設計與實作

6

2.5 連通物件標記(Connected-Component Labeling) 連通物件標記 (CCL)[3]是用在影像分割 (Segmentation)及影像辨識 (Pattern

Recognition )的一個基礎運算,主要目的是使相連接的件物標記為同一值,處理的

對象一般為二值化的二維資料,針對連接(Connected-Component)的定義有兩種,4

鄰(4-adjacent)與 8鄰(8-adjacent),關係如圖 2. 4所示,而標記(Labeling)動作是指

所有相連接的點必須標記為同一值。

在處理過程中包含兩個主要的步驟 (1)Label-Assigning:給定標記值

(2)Label-Merging:處理標記值不同但相鄰的物件。而第二個步驟是在處理物件合

併的動作,基本上是進行 Union-Find的動作,參考圖 2. 5運算範例。

010

1P1

010

111

1P1

111

4-adjacent 8-adjacent

圖 2. 4 4鄰與 8鄰連接

v Component labeling process example§ Setp1: Label-Assigning

§ Step2: Label-Merging

00100110101100110001

00100220102200120001

00100110101100110001

00100220102200120001

Equivalent relation:Pair(1,2)

00100110101100110001

圖 2. 5 連通物件標記運算範例

Page 12: 基於 SOPC 影像處理驗證平台之設計與實作

7

2.6 物件偵測範例 監控系統主要分為物件偵測及物件追蹤兩部分,這裡說明物件偵測相關的運

算及系統的流程。在物件偵測的作法上,常看到的有變動統計 (Temporal

Differencing)與背景相減(Background Subtraction)[2]及光流法(Optical Flow)來實

現,這裡以舉一個簡單背景相減範例(圖 2. 6)並對所涉及相關的運算及流程進行說

明:

RGB轉Y

影像擷取

設定為背景設定為目前影像

目前影像與背景相減取絕對值

臨界值檢查

連通物件標記

Mean Filter

背景?F T

圖 2. 6 物件偵測流程

首先由感光元件擷取影像,將影像以灰階方式進行處理,關於背景的更新有

許多方式,圖 2. 6中為採取以手動設定的方式,接著進行目前影像與背景的差值

運算並取絕對值,利用Mean Filter及臨界值檢查及去除獨立單點,再將物件進行

編號標記,以利後續處理。

Page 13: 基於 SOPC 影像處理驗證平台之設計與實作

8

第三章 影像驗證平台之發展環境與周邊電路

3.1 NIOS發展環境簡介 在 NIOS發展環境簡介部分,首先簡介系統的開發流程並說明匯流排的特性及

自定周邊的配置,以利後續製作匯流排上的主從裝置。並說明 NIOS所提供的 DMA

Controller的使用方式及 NIOS所提供的計時機制。

3.1.1 開發流程

NIOS的開發流程是先以 SOPC Builder配置系統,硬體部分是產生 Symbol,

Quartus 可以引用所產生系統的 Symbol,其中會包含被宣告為 Export 的接腳,可

以與外部電路連接;軟體部分則是於 NIOS IDE引用 SOPC Builder所產生的.ptf檔

自動產生 system.h,其中會包含周邊及記憶體規劃的資訊,執行時則是先完成硬體

編譯並燒錄,再使用編譯軟體下載至開發板,即可執行所規劃的系統。在 Pin 腳

Assign部分以 .v檔作為 Top-Level Entity在開發時會更為便利,開發流程如圖 3. 1

所示。

參考.ptfè產生system.h

產生symbol

2

4

燒錄硬體

燒錄軟體執行

1

3

圖 3. 1 開發流程圖

Page 14: 基於 SOPC 影像處理驗證平台之設計與實作

9

3.1.2 Avalon Bus簡介

Avalon Bus[4][5]是一種相對簡單的匯流排結構,主要用於連接處理器與周邊

裝置,以構成可程式系統晶片。Avalon Bus支援一些高級傳輸模式和特性,例如支

援需要延遲操作的周邊裝置、支援需要流傳輸操作的周邊裝置及支援多個匯流排

主設備並行存取。Avalon Bus主從周邊裝置之間的交互是建構在從埠仲裁技術上,

當多個主周邊裝置同時要求存取同一個從埠時,從埠仲裁決定哪一個主周邊裝置

取得存取權。Avalon的其它特性如表 3. 1。

表 3. 1 Avalon Bus特性

Specification Description

最大 4GB的位址空間 記憶體和周邊裝置可以映射到 32位元位址空間中的任

意位置(Memory-Mapped)。

內置位址解碼器 Avalon 匯流排自動產生所有周邊裝置的 Chip Select 信

號,極大地簡化了基於 Avalon 匯流排周邊裝置的設計

工作。

多主設備匯流排結構 Avalon 匯流排上可以包含多個主周邊裝置,並自動產

生仲裁邏輯。

採用嚮導幫助使用者

進行匯流排配置系統

SOPC Builder提供圖形化的嚮導幫助使用者進行匯流

排配置,(添加周邊裝置、指定主/從關係、定址位址映

射等)。Avalon 匯流排結構將根據使用者在嚮導中輸入

的參數自動產生。

動態位址對齊 如果參與傳輸的雙方匯流排寬度不一致,Avalon匯流排

自動處理資料傳輸的細節,使得不同資料匯流排寬度的

周邊裝置能夠方便地連接。

Page 15: 基於 SOPC 影像處理驗證平台之設計與實作

10

以下說明 Avalon匯流排基本的讀寫時序:

l Read 時序:

圖 3. 2中主裝置在 A開始控制,在 D取得資料並釋放匯流排,即在目前 clk

發起讀,下一個 clk讀取資料並釋放匯流排。

圖 3. 2 主裝置-讀時序

圖 3. 3中從裝置關心的是在 E所發生的狀態,即在目前的 clk檢查到 E的狀

態時需將資料置於匯流排上,讓主裝置進行讀取動作。

圖 3. 3 從裝置-讀時序

Page 16: 基於 SOPC 影像處理驗證平台之設計與實作

11

l Write 時序:

圖 3. 4中主裝置在 A開始控制,在 C釋放匯流排,即在目前 clk發起寫,下

一個 clk釋放匯流排。

圖 3. 4 主裝置-寫時序

圖 3. 5中從裝置關心的是在 D所發生的狀態,即在目前的 clk檢查到 D的狀

態時需將資料從匯流排上取出置入對應的暫存器。

圖 3. 5 從裝置-寫時序

Page 17: 基於 SOPC 影像處理驗證平台之設計與實作

12

3.1.3 自定周邊

了解 Avalon Bus的讀寫時序即可自行撰寫 Avalon Bus上的主及從介面,先撰

寫.v檔,藉由 SOPC Builder的 Component Editor匯入成為元件。Component Editor

中設定 Top Level Module後會自動於 Signals頁面取出所有的信號接腳,如圖 3. 6,

接著需自行分配該信號是屬於那個 Interfaces及對應 Avalon Bus相關的訊號,若要

與外部連接或暫時未使用的可設為 Export型態,Export型態接腳可在 Symbol獲得

該連接之接腳,在主裝置 Address Signal Type的 Width是 32bit,即可定址 4G的

位址空間,在從裝置部分則是內部的暫存器數目,若為 3bit則可定址 8組暫存器,

需自行撰寫內部解碼電路,需配合 Chip Select信號才能正確定址。完成相關設定

後即可在 SOPC Builder使用自行建立的元件,點擊元件即新增於系統中(圖 3. 7),

在依據設計連接相關元件完成系統(圖 3. 8)。

圖 3. 6 自定模組信號分配設定

Page 18: 基於 SOPC 影像處理驗證平台之設計與實作

13

圖 3. 7 自定模組

圖 3. 8 使用 SOPC Builder 指定匯流排連接

Page 19: 基於 SOPC 影像處理驗證平台之設計與實作

14

3.1.4 DMA Controller 使用的 DMA Controller[4]為 NIOS所提供,使用 DMA Controller連接 SDRAM

Controller可以避開處理 SDRAM的相關問題,DMA Controller包含兩個主埠(讀、

寫)及一個從埠(控制暫存器)可設定及檢查 DMA目前的狀態,表 3. 2是暫存器內

容的簡要說明。

表 3. 2 DMA暫存器

l status:可讀取暫存器中的內容檢查目前 DMA狀態。

l readaddress:表示在 DMA傳輸中要讀取的第一個資料單元位址。

l writeaddress:表示在 DMA傳輸中要寫入的第一個資料單元位址。

l length:length 暫存器中的值表示從讀埠到寫埠所要傳輸的位元組數(以 byte

為單位),length暫存器寬度在系統產生時確定。

l control:可設定值以控制 DMA的動作及行為。

表 3. 3 Status暫存器說明

位元號碼 位元名稱 描述

0 done DMA傳輸已完成

1 busy DMA傳輸正在進行

2 reop 發生讀埠的封包結束事件

3 weop 發生寫埠的封包結束事件

4 len DMA傳輸已結束,並且傳輸了指定長度的資料

DMA Register Map

Page 20: 基於 SOPC 影像處理驗證平台之設計與實作

15

表 3. 4 Control 暫存器說明

位元號碼 位元名稱 描述

0 byte 位元組(8-位元)傳輸

1 hw 半字(16-位元)傳輸

2 word 字(32-位元)傳輸

3 go 允許 DMA

4 i_en 允許中斷

5 reen 允許讀埠的封包結束事件

6 ween 允許寫埠的封包結束事件

7 leen 當長度暫存器的值到達 0時,結束 DMA傳輸

8 rcon 從一個固定位址讀取資料

9 wcon 從一個固定位址寫入資料

利用軟體設定 DMA Controller範例:

//設置傳輸模式為word傳輸,遞增讀位址,固定寫位址 IOWR_ALTERA_AVALON_DMA_CONTROL(DMA_BASE, 0x0294); //清除中斷旗標 IOWR_ALTERA_AVALON_DMA_STATUS(DMA_BASE, 0); //設定來源位址 IOWR_ALTERA_AVALON_DMA_RADDRESS(DMA_BASE, S_ADDR); //設定目的位址 IOWR_ALTERA_AVALON_DMA_WADDRESS(DMA_BASE, D_ADDR); //設定搬移資料量 IOWR_ALTERA_AVALON_DMA_LENGTH(DMA_BASE, LEN); //啟動DMA IOWR_ALTERA_AVALON_DMA_CONTROL(DMA_BASE, 0x029c);

Page 21: 基於 SOPC 影像處理驗證平台之設計與實作

16

3.1.5 計時方式

在 NIOS IDE中若要執行程式計時的話可使用 alt_timestamp()函數[6],使用該

函數需為 System配置一個 Timestamp Timer即可,配置方式如圖 3. 9所示。

時間計算程式碼:

圖 3. 9 設定計時函數所使用的 Timer

#include <stdio.h> #include "sys/alt_timestamp.h" int main() { alt_u32 time1; alt_u32 time2; if (alt_timestamp_start() < 0) { printf ("No timestamp device available\n"); } else { time1 = alt_timestamp(); //do something time2 = alt_timestamp(); printf("time(2-1)=%u\n",(unsigned int)(time2-time1)); } }

Page 22: 基於 SOPC 影像處理驗證平台之設計與實作

17

3.2 周邊裝置 採用開發平台為友晶科技的 DE2(圖 3. 10),參考設計範例[7](圖 3. 11)的元件

層級連接架構的Multi-Port SDRAM Controller將其修改成系統層級連接架構,使

CPU 可以參與圖形運算及控制等動作。以下就設計範例周邊的動作做基本的說

明,其中包含 CMOS Sensor元件、影像轉換電路、VGA Controller及 VGA數位類

比轉換器。

圖 3. 10 DE2開發平台

圖 3. 11 130萬像素數位相機開發平台參考設計介紹

Page 23: 基於 SOPC 影像處理驗證平台之設計與實作

18

3.2.1 CMOS Sensor (外部電路)

採用的是MT9M011(1/3-Inch Megapixel Image Sensor)[8],如圖 3. 12、圖 3.

13、圖 3. 14中所示,使用 PIXCLK、LINE_VAILD及 FRAME_VAILD,可以判斷

目前 Dout所輸出的資料為何,感測器是採 Bayer Color Pattern排列(圖 3. 15),輸

出時是以右上角為第一點開始以串流的方式,依右至左,上到下的方式將資料輸

出,感測器將右上角定為第一點是由於:感測器接收自反射至物體的光源,原理

同鏡子般所以原始資料為左右相反。

圖 3. 12 MT9M011接腳

圖 3. 13 Timing Example of Pixel Data

圖 3. 14 Row Timing and FRAME_VALID/LINE_VALID Signals

Page 24: 基於 SOPC 影像處理驗證平台之設計與實作

19

圖 3. 15 Bayer Color Pattern

色彩還原的方式有許多,主要的概念是藉由周邊的點來進行還原,Bayer Color

Pattern 為規則排列方式,可以藉由目前點所落在的位置,來判別該點及周邊的顏

色為何如圖 3. 16所示,以進行還原。

奇數行,奇數點奇數行,奇數點 奇數行,偶數點

偶數行,奇數點 偶數行,偶數點

圖 3. 16 Bayer Color Pattern周邊顏色關係

Page 25: 基於 SOPC 影像處理驗證平台之設計與實作

20

3.2.2 Bayer Color Pattern Data to 30-Bit RGB 在收到 CMOS Sensor傳來的資料還需經過一些轉換才能取得適當的影像,在

輸入資料時配合 CMOS Sensor傳來的控制信號進行 X-Y座標計數,接著利用計數

的 X-Y 判斷目前的顏色,並取用周邊的點還原該點的色彩。獲得一個解析度為

1280×1024 的圖形,需要一個 Shift-Register (Ram-Base)製作一行的 Line Buffer,

完成色彩還原後接著是將影像進行鏡射,需要使用 RAM-2port 來進行 Stack 動作

以完成將影像左右相反的動作。最後由於使用的 VGA 作為顯示器解析度為

640×480,所以再進行 1/4取樣,將影像縮小到 640×512。以圖 3.17與圖 3.18簡

要說明 Line Buffer及 Stack的效果;圖 3. 17中資料以依順序輸入因為 Line Buffer

的關係可以獲得前後行及鄰近點的關係。圖 3. 18中資料依順序輸入利用不同的讀

寫位置可以達到反序輸出的效果。

tap distance

Total distance=3*5=15利用鄰近點還原色彩

圖 3. 17 Line Buffer 參考波形

Page 26: 基於 SOPC 影像處理驗證平台之設計與實作

21

圖 3. 18 Stack參考波形

Page 27: 基於 SOPC 影像處理驗證平台之設計與實作

22

3.2.3 VGA Controller and Data Request VGA採用 640×480@60Hz 解析度進行顯示,即每秒更新 60次,每次更新畫

面點數為 640×480,依規格[9]該頻率需操作在 25MHz,該控制器需產生 H-Sync(水

平同步信號)及 V-Sync(垂直同步信號)來控制 VGA顯示器,VGA模擬波形如圖 3.

19。

以 640×480@60Hz為例: H_SYNC_TOTAL =H_SYNC_FRONT+H_SYNC_CYC+H_SYNC_BACK+H_SYNC_ACT =16+96+48+640=800 V_SYNC_TOTAL =V_SYNC_FRONT+V_SYNC_CYC+V_SYNC_BACK+V_SYNC_ACT =10+2+33+480=525 Total pixel 800x525x60=25200000èDotClock=25MHz 需要取用資料的是在 ACT(Active)的狀態就是 640× 480,這裡的設計是採用

H-Cont(水平計數器)及 V-Cont(垂直計數器)來計算並在發出控制信號。

front sync back active640*480@60hz

H front=16H sync=96H back=48

圖 3. 19 VGA Controller 信號模擬波形

Page 28: 基於 SOPC 影像處理驗證平台之設計與實作

23

3.2.4 VGA DAC(外部電路)

使用 ADV7123[10]做為數位類比轉換器,其具備 30bits的解析度,10bits R、

10bits G及 10bits B如圖 3. 20方塊圖所示,將資料轉換為類比訊號傳至 VGA進

行顯示。

圖 3. 20 VGA D/A Converter方塊圖

Page 29: 基於 SOPC 影像處理驗證平台之設計與實作

24

第四章 影像驗證平台之設計

此章節中首先說明,元件層級連接架構,接著說明欲轉換成之系統層級連接

架構及頻寬配置方式,這裡針對頻寬的配置設計一個簡單的實驗觀察在不同頻寬

配置下所呈現的結果,最後針對輸出介面及輸入介面的設計進行介紹。

4.1 元件層級連接架構 設計範例[7]中,在元件層級連接的架構下是採用一個 4-Port 的 SDRAM,這

裡的 4-Port 是概念上的 4-Port;其中 2-Port 作為 16bits 寫,組成 32bits的輸入資

料,2-Port 作為 16bit 讀,組成 32bits 的輸出資料。利用非同步 FIFO(Dual-Clock

FIFO)[11]與 SDRAM Controller將一個資料匯流排為 16bits的實體 SDRAM以分時

的方式使用,將頻寬分配給 4個 Port使用,如圖 4. 1。在寫的一方當儲存寫的 FIFO

大於一半的容量時 SDRAM Controller便會將總容量一半的資料寫入 SDRAM中,

在讀的一方當可讀的資料小於一半的容量時 SDRAM Controller會啟動讀的動作,

將一半的資料搬至 FIFO中以供讀取,在頻寬許可的情況下可使外部如同 4-Port同

時在進行讀寫的動作,這裡所使用非同步的 FIFO,讀與寫可操作不同的頻率,

SDRAM Controller的操作頻率需大於 VGA Block + CCD Block所使用的頻寬。

SDRAM

FIFO SDRAM ControllerCCDBlock

VGABlockFIFO

FIFOFIFO

@25/4MHz x 32bits VGA : @25MHz x 32bitsLCM : @18MHz x 10bits

@100MHz x 16bits

FIFO size total 512, SDRAM Controller 在輸入滿256時寫入SDRAM,在輸出不滿256時從SDRAM讀出資料

圖 4. 1 利用 FIFO進行頻寬分配

Page 30: 基於 SOPC 影像處理驗證平台之設計與實作

25

4.2 系統層級連接架構 要將 CCD Block、VGA Block與 NIOS的系統整合,進行系統層級的連接架構,

需要製作兩個介面來與 Avalon Bus進行互動如圖 4. 2。由於 CCD與 VGA在操作

時需要一個穩定的頻寬,這裡使用非同步 FIFO來進行頻寬分配的概念,在輸入的

部分製作 CCD_IF( CCD Interface ),為一個提供穩定輸入頻寬的介面,內部含有一

個 FIFO來暫存資料,在輸入的資料要到達一定量時啟動DMA將資料搬至 SDRAM

中,保持 FIFO不會有溢出現象,在輸出部分製作 VGA_IF( VGA Interface ),為一

個提供穩定輸出頻寬的介面,內部亦含有一個 FIFO來暫存資料,在輸出資料未達

一定量時啟動 DMA將資料從 SDRAM搬至 FIFO中,保持 FIFO不會發生無資料

可讀的現象。

在系統架構上,為了讓 CPU 能存取該區塊變數,所以資料段亦是規劃於

SDRAM上,由於 NIOS IDE並無提供將變數區塊(存放影像資料區塊)規劃在特定

位址上的功能,操作時是在程式中宣告變數,利用 CCD_IF 及 VGA_IF 所提供的

暫存器告知變數位址,需要在軟體啟動時設置相關暫存器才能正確動作,CCD_IF

依告知的變數位址寫入資料並在寫入後移動至下一次要寫入的位址,VGA_IF依告

知的變數位址讀出資料,並在讀出後移動至下一次要讀出的位址。在實作上將資

料搬移的動作交由 NIOS所提供的 DMA進行處理,這裡需撰寫 Avalon Bus的主裝

置來檢查 FIFO目前的容量並適時啟動 DMA。

Avalon Bus100Mhz

CPU

SDRAMController

SDRAM

Arbitration

VGA_IFCCD_IF

VGA BlockCCD Block

圖 4. 2 系統方塊圖

Page 31: 基於 SOPC 影像處理驗證平台之設計與實作

26

4.3 匯流排頻寬分配 在圖 4. 2中 SDRAM部分,由於有不同的裝置在存取 SDRAM會有仲裁現象

發生,這裡以 Arbitration (instruction master, data_master, dma_read_master)來標示在

存取 SDRAM的頻寬分配設定,若以 Arbitration (1,1,1)方式分配會造成畫面抖動現

象,若以較低頻(1Hz)模擬取用資料則不會有該現象,這裡設計一個實驗來觀察不

同頻寬分配所造成的現象,使用 VGA Controller(25MHz)作為讀取資料的裝置,在

程式中宣告一個 buffer大小為 640×480,變數值則由 0累加至 640×480-1,如圖 4.

3,利用 Signal tap II可設定特定的 Trigger點觀察在不同頻寬分配下是否能正常動

作,設置方式如圖 4. 4 。依 VGA規格 H_COUNT=144、V_COUNT=34,是 VGA

顯示的第一個資料點,依 buffer 設置應為 0 之後依序累加,H_COUNT=144、

V_COUNT=35,則是第二行的第一個資料點,依 buffer 設置應為 640,

H_COUNT=144、V_COUNT=513,則為最後一行的第一個資料點,應為 306560,

藉由對特定點的資料查核可知道是否有資料不足或資料遺失的現象,測試時 CPU

執行無窮迴圈,以使 instruction_master及 data_master佔用該頻寬。

144

34

513

0

306560

35640

圖 4. 3 VGA測試資料安排

Page 32: 基於 SOPC 影像處理驗證平台之設計與實作

27

圖 4. 4 Signal Tap II Trigger 設置方式

圖 4. 5 Arbitration (1,1,1),無法提供穩定頻寬,畫面抖動

圖 4. 6 Arbitration (2,2,6),無法提供穩定頻寬,畫面抖動

Page 33: 基於 SOPC 影像處理驗證平台之設計與實作

28

圖 4. 7 Arbitration (20,20,60) 可提供穩定頻寬,畫面正常顯示

從實驗結果發現,仲裁機制應是利用 clk分配所達成的,DMA需要連續分配

的頻寬才能穩定動作 Arbitration (2,2,6),波形如圖 4. 6,與 Arbitration (20,20,60),

波形如圖 4. 7,雖然比值相同,但使用不連續的頻寬,需在固定 clk後讓出頻寬,

造成資料無法及時傳輸。另外若裝置若未使用該頻寬,則仲裁器會讓出該頻寬,

在 Arbitration (1,1,1) 波形如圖 4. 5中,為執行程式時所發生的抖動現象,但未執

行程式的情況下 VGA在該頻寬分配下仍可以正常顯示畫面。

Page 34: 基於 SOPC 影像處理驗證平台之設計與實作

29

4.4 輸出界面設計 VGA_IF VGA_IF是一個可提供固定頻寬處理輸出資料的裝置動作如下:VGA_IF包含

兩個 Avalon Slave及一個 Avalon Master如圖 4. 8。程式開始時 CPU藉由 Slave_1

設定相關訊息以及動作方式,利用 Control暫存器啟動 Master_0進行檢查由 FIFO

傳來的容量值(wrusedw),若資料未達設定值時,則由Master_0對 DMA發動寫的

動作,DMA由 SDRAM中讀取資料(遞增位址),寫入 Slave_0(固定位址)(將 FIFO

的寫入端包裝成 Avalon Bus 的 Slave),FIFO 的讀取端則設定為 Export 型態,讓

VGA Controller來取用資料。

表 4. 1 VGA_IF暫存器規劃 Interface Offset Description Slave_0 0 寫入 FIFO位址

0 設定是否啟動 DMA 1 設定 buffer所在的位址(read address) 2 設定要寫入 FIFO的位址(write address) 3 設定每次 DMA搬移的長度 4 設定所使用 DMA所在的位址

Slave_1

7 設定資料最大位址(畫面定位)

Avalon Bus100Mhz

CPUDMA

SDRAMController

SDRAM

write readcontrol

asyncFIFO

write

read

VGA Controller25Mhz

MasterDev wrusedw

Arbitration

VGA_IF

Slave_1 Slave_0Master_0

圖 4. 8 VGA_IF設計方塊圖

Page 35: 基於 SOPC 影像處理驗證平台之設計與實作

30

4.5 輸入界面設計 CCD_IF CCD_IF是一個可提供固定頻寬處理輸入資料的裝置動作如下:CCD_IF包含

兩個 Avalon Slave及一個 Avalon Master如圖 4. 9,程式開始時,CPU藉由 Slave_1

設定相關訊息以及動作方式,利用 Control暫存器啟動 Master_0進行檢查由 FIFO

傳來的容量值(rdusedw),若資料已達設定容量時,則由 Master_0 對 DMA發動讀

的動作,DMA由 Slave_0 讀出資料(將 FIFO的讀取端包裝成 Avalon Bus的 Slave)

(固定位址),寫入 SDRAM(遞增位址)中,以確保輸入的資料皆會存於 SDRAM中。

表 4. 2 CCD_IF暫存器規劃 Interface Offset Description Slave_0 0 讀取 FIFO位址

0 設定是否啟動 DMA(拍照行為) 1 設定 buffer所在的位址(read address) 2 設定要寫入 FIFO的位址(write address) 3 設定每次 DMA搬移的長度 4 設定所使用 DMA所在的位址 5 ccdBusy旗標

Slave_1

7 設定資料最大位址(畫面定位)

Avalon Bus100Mhz

CPUDMA

SDRAMController

SDRAM

writereadcontrol

asyncFIFO

read

write

CCD Capture25Mhz

MasterDev rdusedw

Arbitration

CCD_IF

Salve_1 Salve_0Master_0

圖 4. 9 CCD_IF設計方塊圖

Page 36: 基於 SOPC 影像處理驗證平台之設計與實作

31

4.6 抽象化輸出入界面 VGA_IF與CCD_IF可抽象化為一個可以提供穩定輸入與輸出頻寬的輸出入介

面,圖 4. 10 中 Output_IF 對應的為 VGA_IF,Input_IF 對應的為 CCD_IF。配合

CPU協調相關的運作過程可以達到更靈活的使用,例如由 CPU發動 DSP Block,

影像資料以串流的方式從輸出介面傳至硬體演算法處理區塊,再由輸入介面取回

已完成運算的資料。

Avalon Bus

CPU

SDRAMController

SDRAM

Arbitration

Output_IFInput_IF

DSP Block

圖 4. 10輸出入介面應用方塊圖

Page 37: 基於 SOPC 影像處理驗證平台之設計與實作

32

第五章 影像驗證平台之實作與使用範例

此章節主要是依據 4.4節與 4.5節中所提出的架構進行實作,在 5.1節中說

明實作上較為重要的幾個動作,並給出系統的配置方式。在 5.2節中則是利用所

完成的平台進行介面功能測試及影像處理。

5.1 影像驗證平台之實作 此節中以 VGA_IF模組說明如何與 FIFO與 DMA Controller進行互動、重置電

路上需注意的時序問題、非同步情況下設計拍照行為的時序以及系統的連接方式

以及各模組在 SDRAM上的頻寬分配方式。

5.1.1 VGA_IF Finite State Machine VGA_IF 的 Master Port 作為匯流排上的一個主裝置,其主要動作是執行一個

Finite State Machine來協調 FIFO中的容量,主要有兩個狀態,(1)Check FIFO Size

(2)Raise DMA。State Machine的初始狀態為 Check FIFO Size,在檢查大小時不允

許發動 DMA。在啟動 DMA的過程,包含設定、啟動 DMA及搬運資料期間,狀

態需停留在 Raise DMA的狀態中,直到資料搬移完畢才離開,以避免 DMA被重

覆啟動。CCD_IF與 VGA_IF介面的差異部分只是在於讀寫方向的不同。以 VGA_IF

為例說明相關動作如表 5. 1、圖 5. 1、圖 5. 2。

Check FIFO Size Raise DMA

圖 5. 1 VGA_IF State Machine

Page 38: 基於 SOPC 影像處理驗證平台之設計與實作

33

表 5. 1 VGA_IF Finite State Machine動作 State Description

Check FIFO Size 檢查 FIFO是否小於設定值,如果小於則進入 Raise DMA狀

態進行資料搬移,若無則在下一個 clk時繼續執行檢查。

Raise DMA 由 VGA_IF的Master對 DMA發起以下的動作:

(a)設定控制暫存器

(b)清除中斷

(c)設定讀位址(含計算)

(d)設定寫位址(含計算)

(e)設定搬移的數量

(f)發起 DMA

(g)檢查 DMA控制暫存器 Busy狀態,直到為被設為 0

(h)將狀態轉為 Check FIFO Size

Setup Control register

ClearInterrupt

Count readIndexSetup readaddress

Setup writeaddress

Setup length

DMA go

Read status

Exit State

Enter State

Check busy TF

圖 5. 2 VGA_IF Raise DMA內部 State Machine

Page 39: 基於 SOPC 影像處理驗證平台之設計與實作

34

5.1.2 Reset電路

為使資料對齊 VGA及 CCD信號,硬體的初始化需按照以下順序: (1)清除

FIFO。(2)允許發動 DMA(重設搬移位址)。 (3)允許 CCD及 VGA資料。這裡需要

製作一 Delay電路來達成圖 5. 3時序。

FIFO

Master Dev

VGA / CCD

重置發起 重置結束

圖 5. 3 重置時序

Page 40: 基於 SOPC 影像處理驗證平台之設計與實作

35

5.1.3 Snapshot Operation 為了能達到以 Frame 為處理單位,需要設計一個照相的動作,由程式發起,

在 CCD_IF 當檢查到資料進入 FIFO 中(writeIndex 被移動),則還原照相信號,系

統頻率與 CCD Block不同,採用非同步的控制方式,外部的 CCD Block以 25MHz

的頻率檢查 CCD_IF所發出的信號,若前一個狀態為 0,目前狀態為 1時,則允許

輸入 Frame,即利用檢查信號上升緣來達到控制的功能,其動作關係如圖 5. 4。

CPUCCD_IF

@100MHz

CPUCCD_IF

@100MHz

CCDBlock

@25MHz

CCDBlock

@25MHz

CPU設定暫存器發起拍照動作

並設定狀態為busy

CCD Block 檢查到邊緣開始接收一個frame

CCD_IF檢查到已有資料進入重設暫存器

CCD Block 一個frame結束

CCD_IF搬移已達一個frame的資料量解除busy狀態

CCD_IFControl Register

CCDframe data

非同步控制

圖 5. 4 Snapshot Operation 示意圖

Page 41: 基於 SOPC 影像處理驗證平台之設計與實作

36

5.1.4 系統連接與頻寬分配

系統連接及頻寬分配如圖 5. 5與圖 5. 6所示。

圖 5. 5 系統規劃與匯流排連接

圖 5. 6 頻寬分配

Page 42: 基於 SOPC 影像處理驗證平台之設計與實作

37

5.2 使用範例

5.2.1 初始硬體程式碼

初始 VGA

初始 CCD

//setup VGA

//dma addr IOWR(VGA_IF_0_BASE,4,0x00800820); //maxAddr maxaddr=(640*480-128)*4; IOWR(VGA_IF_0_BASE,7,maxaddr); //readAddress IOWR(VGA_IF_0_BASE,1,&buffer2); //writeAddress IOWR(VGA_IF_0_BASE,2,0x00800818); //length length=128*4; IOWR(VGA_IF_0_BASE,3,length); //master start IOWR(VGA_IF_0_BASE,0,0x0001);

//setup CCD //dma addr IOWR(CCD_IF_0_BASE,4,0x00800860); //maxAddr maxaddr=(640*512-128)*4; IOWR(CCD_IF_0_BASE,7,maxaddr); //readAddress IOWR(CCD_IF_0_BASE,1,0x00800880); //writeAddress IOWR(CCD_IF_0_BASE,2,&buffer1); //length length=128*4; IOWR(CCD_IF_0_BASE,3,length); //Snap Operation IOWR(CCD_IF_0_BASE,0,0x0001);

Page 43: 基於 SOPC 影像處理驗證平台之設計與實作

38

5.2.2 Example 1:Bypass

CCD與VGA使用同一塊Buffer,在初始CCD及VGA時指定使用相同 Buffer,

規劃方式如圖 5. 7。

CCD

VGA

640

480

512

SDRAM

CCD Capture VGA Controller

圖 5. 7 Example 1 Buffer 規劃

範例部分程式碼:

while(1){ //capture image IOWR(CCD_IF_0_BASE,0,0x0001); //wait ccd ccdBusy=1; while(ccdBusy){ ccdBusy=IORD(CCD_IF_0_BASE,5); } }

Page 44: 基於 SOPC 影像處理驗證平台之設計與實作

39

5.2.3 Example 2:Single Frame Process - RGB2Gray

處理流程:允許 VGA在任何時刻顯示資料,CCD資料傳輸先置於 Buffer1,

再由程式計算後搬移至 Buffer2,在初始 CCD 及 VGA 時需分別給定 Buffer1 及

Buffer2的所在位置,規劃方式如圖 5. 8。

CCD VGA

buffer1 buffer2

0,0

511,639

0,0

479,639

圖 5. 8 Example 2 Buffer 規劃

範例部分程式碼:

while(1){ IOWR(CCD_IF_0_BASE,0,0x0001); ccdBusy=1; while(ccdBusy){ ccdBusy=IORD(CCD_IF_0_BASE,5); } index=0; for(i=0;i<480;i++){ for(j=0;j<640;j++){ r = buffer1[index]& 0x000003FF; g =( buffer1[index]& 0x000FFC00 ) >> 10; b =( buffer1[index]& 0x3FF00000 ) >> 20; r=(299*r); g=(587*g); b=(114*b); y=(b+g+r)>>10; y=y>=1024?1024:y; buffer2[index]=(y<<20)+(y<<10)+y; index++; } } }

Page 45: 基於 SOPC 影像處理驗證平台之設計與實作

40

5.2.4 Example 3:Scale and Diff

本範例是將畫面分成四個等分,每個解析度為 320×240,用外部開關,可將

其中第一張設為背景(只有在開關為 High 時更新),第二張為目前影像,每次皆更

新,第三張為第一張與第二張取差值運算並進行二值化顯示結果。程式採四個畫

面進行輪流更新方式,如果第一張背景不更新,則最後一張圖會更新兩次。規劃

方式如圖 5. 9。

灰階背景 灰階目前影像

diff 未使用

圖 5. 9 Example 3 VGA顯示畫面規劃

CCD VGA

buffer1 buffer2

軟體分配畫面

0,0 0,320

240,0 240,320

0,0

479,639

圖 5. 10 Example 3 Buffer 規劃及內部處理示意

Page 46: 基於 SOPC 影像處理驗證平台之設計與實作

41

範例部分程式碼:

picnum=1; while(1){ //capture image IOWR(CCD_IF_0_BASE,0,0x0001); //wait ccd ccdBusy=1; while(ccdBusy){ ccdBusy=IORD(CCD_IF_0_BASE,5); } //load sw_conifg switchConfig=IORD(SWITCH_CONIFG_0_BASE,0); if(picnum==1 && switchConfig==1 ){ px=0; py=0; }else if(picnum==2){ px=320; py=0; }else if(picnum==3){ px=0; py=240; //do diff }else if(picnum==4){ px=320; py=240; picnum=0; } picnum++; index=0; for(i=0;i<480;i++){ for(j=0;j<640;j++){ //1/4取樣 if(i%2==0 && j%2==0){ if(picnum==4){ //diff tmp= (buffer2[(0+(i>>1))*640+(320+(j>>1))]&0x000003FF)- (buffer2[(0+(i>>1))*640+(0+(j>>1))]&0x000003FF); //abs tmp=tmp>0?tmp:-tmp; buffer2[(py+(i>>1))*640+(px+(j>>1))]= (tmp&0x000003FF)>64?0xFFFFFFFF:0; }else{ buffer2[(py+(i>>1))*640+(px+(j>>1))]= rgb2gray(buffer1[index]); } } index++; } } }

Page 47: 基於 SOPC 影像處理驗證平台之設計與實作

42

執行結果:

圖 5. 11 Example 3 執行結果

背景 目前影像

Diff

Page 48: 基於 SOPC 影像處理驗證平台之設計與實作

43

5.2.5 Example 4:連通物件演算法實作

這裡的連通物件演算法是採取以軟體的方式進行實作,參考資料[3]實作以下

三種演算法:

(1) An Iterative Algorithm

(2) The Classical Algorithm

(3) A Space-Efficient Two-Pass Algorithm That Uses a Local Equivalence Table

輸入資料樣本為 18×18 陣列(只做16×16,外圍略過)

說明:

方法(1)(2)採用相同的一維陣列實作Union-Find在結果中可發現(1)執行了三次

重覆,方法(2)則是標準的 Two-Pass演算法,在效能上明顯較佳。方法(3)為了重覆

使用較少的空間所以採用二維陣列實作,原因在於(1)(2)可使用位址作為標記的

值,但(3)為了重覆使用有限的空間所以實作上增加一個維度來記錄,造成在索引

資料時產生一次對整個陣列搜尋的成本,使得整個效率下降很多,對於無法採用

位址作為索引標記值,在這只採用一個可行的方法而非最佳的方法。

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 1 1 1 1 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Page 49: 基於 SOPC 影像處理驗證平台之設計與實作

44

測試結果:

表 5. 2 CCL演算法測試結果(單位 clock) 演算法 電腦模擬 下載實測 1 下載實測 2 (1) 73383 177377 177377 (2) 21853 53048 53006 (3) 144872 347662 347639

經測試後在記憶體允可情況下採用第二種演算法 The Classical Algorithm並將

圖輸入圖形縮小至 160×120進行運算,這裡使用製作的 VGA_IF再擴充一個 LCM

進行顯示,系統架構如圖 5. 13,配置方式如圖 5. 14,在 VGA監視器上,則顯示

彩色的背景及目前影像。畫面規劃方式如圖 5. 12:

背景 目前影像

未使用 未使用

VGA

灰階背景 灰階目前影像

Diff CCL

LCM

圖 5. 12 Example 4 VGA與 LCM顯示畫面規劃

Avalon Bus100Mhz

CPU

SDRAMController

SDRAM

Arbitration

VGA_IFCCD_IF

VGA BlockCCD Block

VGA_IF

LCM Block

圖 5. 13 Example 4 系統規劃方塊圖

Page 50: 基於 SOPC 影像處理驗證平台之設計與實作

45

圖 5. 14 Example 4 系統配置

運算流程: 設定背景è擷取目前影像èDiff è Mean Filter è Threshold è CCL

執行結果:

圖 5. 15 LCM上的執行結果

Page 51: 基於 SOPC 影像處理驗證平台之設計與實作

46

第六章 結論 於第五章 Example 1中使用轉換為 NIOS架構之系統層級連接,其功能可等效

於設計參考[7],顯示所設計之界面具其可行性並可適當地處理頻寬問題。Example

2 中可以獲得將架構修改的最大好處 - CPU 可參與運算,在整個架構中雖然付出

了在 SDRAM上發生仲裁的成本,但 CPU可直接定址該記憶體區塊以進行相關圖

形運算,不需再經過額外的搬移。Example 3中則是利用軟體的彈性,進行運算流

程設計及畫面分配,並直接於顯示器顯示,可直接觀察到計算的結果。Example 4

中,示範了該界面的擴充性,使用 VGA_IF也就是輸出界面,增加一個 LCM( LCD

Module )的裝置,來顯示連通物件的運算結果。由以上的範例可以展現該架構在影

像處理驗證的實用性。其中整個運算過程皆於同一平台完成,使得將局部運算轉

換為硬體的可行性提高,此外並可以利用 NIOS所提供的計時函數來計數軟體運算

的成本,了解相關的設計瓶頸。

在本篇論文中,利用 Altera所提供的非同步 FIFO及 DMA Controller及適當的

頻寬分配,以較簡易的方式實作了一個以 SOPC 為基礎的影像處理驗證平台,包

含兩個模組化的介面:VGA_IF可以將執行結果顯示,CCD_IF可以取得影像資料,

將兩個介面與 NIOS合成系統,可以利用 CPU計算所獲得的影像資料。藉由使用

該平台可以較低的門檻切入嵌入式系統相關的影像處理,並實際輸入輸出影像資

料驗證執行結果。

Page 52: 基於 SOPC 影像處理驗證平台之設計與實作

47

參考文獻 [1] 繆紹綱編譯,數位影像處理,台灣培生教育出版股份有限公司,2005

[2] 簡宏恩,以軟/硬體共設計方式實現即時監控系統,國立雲林科技大學電子

工程系研究所碩士論文,民國九十三年

[3] Haralick, Robert M., and Linda G. Shapiro, “Computer and Robot Vision”,

Volume I, Addison-Wesley, 1992, pp. 28-48

[4] 彭澄廉主編,以 NIOS為基礎的 SOPC設計與實作,全華出版社,2005

[5] “Avalon Bus Specification Reference Manual”, Version 1.2, Altera, 2002

[6] “Nios II Software Developer’s Handbook”, Version 7.1 , Altera , 2007 , p11–45

[7] 陳泳男,使用 FPGA 及 CMOS Image Sensor 來達成即時機器視覺,

http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=Taiwan&Category

No=50&No=90

[8] ”MT9M011 1/3-Inch Megapixel CMOS Active-Pixel Digital Image Sensor Data

Sheet” , Micron Technology Inc. 2004

[9] “Monitor Timing Specifications”, Version 1.0, Video Electronics Standards

Association, 1998, p7

[10] ”ADV7123, CMOS, 240 MHz Triple 10-Bit High Speed Video DAC”, Analog

Devices, Inc., 1998

[11] “Single- and Dual-Clock FIFO Megafunction User Guide”, Version 4.0, Altera ,

2007

Page 53: 基於 SOPC 影像處理驗證平台之設計與實作

附錄 A:VGA_IF/CCD_IF模組程式碼

Page 54: 基於 SOPC 影像處理驗證平台之設計與實作

- 1 -

module VGA_IF 1 ( 2 //avalon_slave_0 3 //======data 4 iDATA0, //writedata 5 //======address 6 iADDR0, //address 7 //======control 8 iCS0, //chipselect 9 iWR0, //write 10 iCLK0, //clk 11 iRST_N0,//reset_n 12 //======export 13 erdreq, 14 oDATA_OUT, 15 eVgaCLK, 16 fifo_clr, 17 18 //avalon_slave_1 19 //======data 20 iDATA1, //writedata 21 //======address 22 iADDR1, //address 23 //======control 24 iCS1, //chipselect 25 iWR1, //write 26 iCLK1, //clk 27 iRST_N1,//reset_n 28 29 //avalon_master_0 30 //data 31 iDATAm, //readdata 32 oDATAm, //writedata 33 //address 34 oADDRm, //address 35 //control 36 oRDm, //read 37 oWRm, //write 38 iWaitm,//waitrequest 39 iCLKm, //clk 40 iReaddatavalid,//readdatavalid 41 //export 42 vgareset 43 ); 44 45 //slave_0 46 //======data 47 input [31:0] iDATA0; 48 //======address 49 input iADDR0; 50 //======control 51 input iCS0; 52 input iWR0; 53 input iCLK0; 54 input iRST_N0; 55 //======export 56 input erdreq; 57 output [31:0] oDATA_OUT; 58 input eVgaCLK; 59 input fifo_clr; 60 61

Page 55: 基於 SOPC 影像處理驗證平台之設計與實作

- 2 -

//slave_1 62 //======data 63 input [31:0] iDATA1; 64 //======address 65 input [2:0] iADDR1; 66 //======control 67 input iCS1; 68 input iWR1; 69 input iCLK1; 70 input iRST_N1; 71 72 //master interface 73 //data 74 input [31:0] iDATAm; 75 output [31:0] oDATAm; 76 //address 77 output [31:0] oADDRm; 78 //control 79 output oRDm; 80 output oWRm; 81 input iWaitm; 82 input iCLKm; 83 input iReaddatavalid; 84 //export 85 input vgareset; 86 87 reg oRDm; 88 reg oWRm; 89 reg [31:0] oADDRm; 90 reg [31:0] tmpDATAm; 91 reg [3:0] state; 92 assign oDATAm=tmpDATAm; 93 94 //internal reg 95 //3'b000 96 reg [31:0] control; 97 //3'b001 98 reg [31:0] readAddress; 99 //3'b010 100 reg [31:0] writeAddress; 101 //3'b011 102 reg [31:0] length; 103 //3'b100 dma address 104 reg [31:0] dmaAddr; 105 //3'b111 reg max addr 106 reg [31:0] maxAddr; 107 108 reg [31:0] readIndex; 109 wire [8:0] wrusedw; 110 111 //Avalon Slave0 FIFO in from DMA 112 113 assign wrreq = ((iADDR0==1'b0)&& iCS0) ? iWR0 : 0; 114 115 FIFO u1( 116 .aclr(fifo_clr), 117 .data(iDATA0), 118 .q(oDATA_OUT), 119 .rdclk(eVgaCLK), 120 .rdreq(erdreq), 121 .wrclk(iCLK0), 122

Page 56: 基於 SOPC 影像處理驗證平台之設計與實作

- 3 -

.wrreq(wrreq), 123 .wrusedw(wrusedw) 124 ); 125 126 //Avalon Slave1 Config Coordinator 127 128 always @(posedge iCLK1) 129 begin 130 if((iADDR1==3'b000 )&& iCS1 && iWR1 )begin 131 control<=iDATA1; 132 end 133 if((iADDR1==3'b001 )&& iCS1 && iWR1 )begin 134 readAddress<=iDATA1; 135 end 136 if((iADDR1==3'b010 )&& iCS1 && iWR1 )begin 137 writeAddress<=iDATA1; 138 end 139 if((iADDR1==3'b011 )&& iCS1 && iWR1 )begin 140 length<=iDATA1; 141 end 142 if((iADDR1==3'b100 )&& iCS1 && iWR1 )begin 143 dmaAddr<=iDATA1; 144 end 145 if((iADDR1==3'b111 )&& iCS1 && iWR1 )begin 146 maxAddr<=iDATA1; 147 end 148 end 149 150 //Avalon Master Coordinator 151 152 always@(posedge iCLKm & (~iWaitm)) 153 begin:cnt 154 integer checksize_n; 155 156 if(vgareset) 157 begin 158 oADDRm =32'hz; 159 tmpDATAm =32'hz; 160 oWRm=1'bz; 161 oRDm=1'bz; 162 state=0; 163 checksize_n=0; 164 readIndex=0; 165 end 166 else 167 begin 168 if(checksize_n==0) 169 begin 170 if(wrusedw>=9'h100) 171 begin 172 oADDRm =32'hz; 173 tmpDATAm =32'hz; 174 oWRm=1'bz; 175 oRDm=1'bz; 176 end 177 else 178 begin 179 oADDRm =32'hz; 180 tmpDATAm =32'hz; 181 oWRm=1'bz; 182 oRDm=1'bz; 183

Page 57: 基於 SOPC 影像處理驗證平台之設計與實作

- 4 -

state=0; 184 checksize_n=1; 185 end 186 end 187 else 188 begin 189 //Raise DMA 190 if((control & 32'h0001)==32'h0001) 191 begin 192 case(state) 193 4'h0:begin 194 //setup control reg 195 oADDRm=dmaAddr+6*4; 196 tmpDATAm=32'h0294; 197 oWRm=1; 198 end 199 4'h2:begin 200 //clr int 201 oADDRm=dmaAddr+0*4; 202 tmpDATAm=32'h0; 203 oWRm=1; 204 end 205 4'h4:begin 206 //read address 207 oADDRm=dmaAddr+1*4; 208 if(readIndex>=maxAddr) 209 begin 210 readIndex<=0; 211 end else 212 begin 213 readIndex<=readIndex+length; 214 end 215 tmpDATAm<=readAddress+readIndex; 216 oWRm=1; 217 end 218 4'h6:begin 219 //write address 220 oADDRm=dmaAddr+2*4; 221 tmpDATAm=writeAddress; 222 oWRm=1; 223 end 224 4'h8:begin 225 //length 226 oADDRm=dmaAddr+3*4; 227 tmpDATAm=length; 228 oWRm=1; 229 end 230 4'ha:begin 231 //dma (dma go) 232 oADDRm=dmaAddr+6*4; 233 tmpDATAm=32'h029c; 234 oWRm=1; 235 end 236 4'hc:begin 237 //request dma status 238 oADDRm=dmaAddr+0*4; 239 oRDm=1; 240 end 241 4'hd:begin 242 //get data 243 if(iReaddatavalid==1'b1) 244

Page 58: 基於 SOPC 影像處理驗證平台之設計與實作

- 5 -

begin 245 if((iDATAm & 32'h0002)==0) 246 begin 247 oADDRm=32'hz; 248 tmpDATAm=32'hz; 249 oWRm=1'bz; 250 oRDm=1'bz; 251 checksize_n=0; 252 end else 253 begin 254 //busy reread again 255 state=state-3; 256 end 257 end else 258 begin 259 //wait data 260 state=state-1; 261 end 262 end 263 default:begin 264 oADDRm=32'hz; 265 tmpDATAm=32'hz; 266 oWRm=1'bz; 267 oRDm=1'bz; 268 end 269 endcase 270 state=state+1; 271 end //end of control 272 end //end of checksize_n 273 end//end of reset 274 end //end of always 275 endmodule 276

Page 59: 基於 SOPC 影像處理驗證平台之設計與實作

- 6 -

module CCD_IF 277 ( 278 //=========avalon_slave_0 279 //=========data 280 oDATA0, //readdata 281 //=========address 282 iADDR0, //address 283 //=========control 284 iCS0, //chipselect 285 iRD0, //read 286 iCLK0, //clk 287 iRST_N0, //reset_n 288 //=========export 289 ewrreq, 290 iDATA_IN, 291 eCCDCLK, 292 fifo_clr, 293 294 //=========avalon_slave_1 295 //=========data 296 iDATA1, //writedata 297 oDATA1, //readdata 298 //=========address 299 iADDR1, //address 300 //=========control 301 iCS1, //chipselect 302 iWR1, //write 303 iRD1, //read 304 iCLK1, //clk 305 iRST_N1, //reset_n 306 307 //=========avalon_master_0 308 //=========data 309 iDATAm, //readdata 310 oDATAm, //writedata 311 //=========address 312 oADDRm, //address 313 //=========control 314 oRDm, //read 315 oWRm, //write 316 iWaitm, //waitrequest 317 iCLKm, //clk 318 iReaddatavalid,//readdatavalid 319 //=========export 320 ccdreset, 321 oCapture 322 ); 323 324 //avalon_slave_0 325 //data 326 output [31:0] oDATA0; 327 //address 328 input iADDR0; 329 //control 330 input iCS0; 331 input iRD0; 332 input iCLK0; 333 input iRST_N0; 334 //export 335 input ewrreq; 336 input [31:0] iDATA_IN; 337

Page 60: 基於 SOPC 影像處理驗證平台之設計與實作

- 7 -

input eCCDCLK; 338 input fifo_clr; 339 340 //avalon_slave_1 341 //data 342 input [31:0] iDATA1; 343 output [31:0] oDATA1; 344 //address 345 input [2:0] iADDR1; 346 //control 347 input iCS1; 348 input iWR1; 349 input iRD1; 350 input iCLK1; 351 input iRST_N1; 352 353 reg [31:0] oDATA1; 354 355 //avalon_master_0 356 //data 357 input [31:0] iDATAm; 358 output [31:0] oDATAm; 359 //address 360 output [31:0] oADDRm; 361 //control 362 output oRDm; 363 output oWRm; 364 input iWaitm; 365 input iCLKm; 366 input iReaddatavalid; 367 //export 368 input ccdreset; 369 output oCapture; 370 371 372 reg oRDm; 373 reg oWRm; 374 reg [31:0] oADDRm; 375 reg [31:0] tmpDATAm; 376 reg [4:0] state; 377 reg oCapture; 378 379 assign oDATAm=tmpDATAm; 380 381 //internal reg 382 //3'b000 383 reg [31:0] control; 384 //3'b001 385 reg [31:0] readAddress; 386 //3'b010 387 reg [31:0] writeAddress; 388 //3'b011 389 reg [31:0] length; 390 //3'b100 dma address 391 reg [31:0] dmaAddr; 392 //3'b101 ccdStatus 393 reg [31:0] ccdStatus; 394 //3'b111 reg max addr 395 reg [31:0] maxAddr; 396 397 reg [31:0] pre_control; 398

Page 61: 基於 SOPC 影像處理驗證平台之設計與實作

- 8 -

reg [31:0] writeIndex; 399 reg start; 400 401 wire [8:0] rdusedw; 402 403 //Avalon Slave0 FIFO in from DMA 404 405 assign rdreq = ((iADDR0==1'b0)&& iCS0) ? iRD0 : 0; 406 407 FIFO u1( 408 .aclr(fifo_clr), 409 .q(oDATA0), 410 .rdclk(iCLK0), 411 .rdreq(rdreq), 412 .data(iDATA_IN), 413 .wrclk(eCCDCLK), 414 .wrreq(ewrreq), 415 .rdusedw(rdusedw) 416 ); 417 418 419 //Avalon Slave1 Config Coordinator 420 421 always @(posedge iCLK1) 422 begin 423 424 if((iADDR1==3'b000 )&& iCS1 && iWR1 )begin 425 control<=iDATA1; 426 end else if(writeIndex>length*10) 427 begin 428 control<=2; 429 end 430 if((iADDR1==3'b001 )&& iCS1 && iWR1 )begin 431 readAddress<=iDATA1; 432 end 433 if((iADDR1==3'b010 )&& iCS1 && iWR1 )begin 434 writeAddress<=iDATA1; 435 end 436 if((iADDR1==3'b011 )&& iCS1 && iWR1 )begin 437 length<=iDATA1; 438 end 439 if((iADDR1==3'b100 )&& iCS1 && iWR1 )begin 440 dmaAddr<=iDATA1; 441 end 442 if((iADDR1==3'b101 )&& iCS1 && iRD1 )begin 443 oDATA1<=ccdStatus; 444 end 445 if((iADDR1==3'b110 )&& iCS1 && iWR1 )begin 446 display<=iDATA1; 447 end 448 if((iADDR1==3'b111 )&& iCS1 && iWR1 )begin 449 maxAddr<=iDATA1; 450 end 451 452 end 453 454 //Avalon Master Coordinator 455 456 always@(posedge iCLKm & (~iWaitm)) 457 begin:cnt 458 integer i,flag,checksize_n; 459

Page 62: 基於 SOPC 影像處理驗證平台之設計與實作

- 9 -

460 if(ccdreset) 461 begin 462 oADDRm =32'hz; 463 tmpDATAm =32'hz; 464 oWRm=1'bz; 465 oRDm=1'bz; 466 state=0; 467 checksize_n=0; 468 writeIndex=0; 469 end 470 else 471 begin 472 pre_control<=control; 473 474 if({pre_control[0],control[0]}==2'b01) 475 begin 476 start<=1; 477 //ccd busy 478 ccdStatus<=1; 479 end else if(writeIndex==0 && state==5'he) 480 begin 481 start<=0; 482 //ccd stand-by 483 ccdStatus<=0; 484 end 485 486 if(start==1) 487 begin 488 if(checksize_n==0) 489 begin 490 state<=0; 491 if(rdusedw<9'h80) 492 begin 493 oADDRm =32'hz; 494 tmpDATAm =32'hz; 495 oWRm=1'bz; 496 oRDm=1'bz; 497 if(writeIndex==0) 498 begin 499 oCapture<=1; 500 end 501 end 502 else 503 begin 504 oADDRm =32'hz; 505 tmpDATAm =32'hz; 506 oWRm=1'bz; 507 oRDm=1'bz; 508 checksize_n=1; 509 end 510 end 511 else 512 begin 513 case(state) 514 5'h0:begin 515 //setup control reg 516 oADDRm=dmaAddr+6*4; 517 tmpDATAm=32'h0194; 518 oWRm=1; 519 end 520

Page 63: 基於 SOPC 影像處理驗證平台之設計與實作

- 10 -

5'h2:begin 521 //clr int 522 oADDRm=dmaAddr+0*4; 523 tmpDATAm=32'h0; 524 oWRm=1; 525 end 526 5'h4:begin 527 //read address 528 oADDRm=dmaAddr+1*4; 529 tmpDATAm=readAddress; 530 oWRm=1; 531 end 532 5'h6:begin 533 //write address 534 oADDRm=dmaAddr+2*4; 535 if(writeIndex>=maxAddr) 536 begin 537 writeIndex<=0; 538 end else 539 writeIndex<=writeIndex+length; 540 begin 541 end 542 tmpDATAm<=writeAddress+writeIndex-length; 543 oWRm=1; 544 end 545 5'h8:begin 546 //length 547 oADDRm=dmaAddr+3*4; 548 tmpDATAm=length; 549 oWRm=1; 550 end 551 5'ha:begin 552 //dma (dma go) 553 oADDRm=dmaAddr+6*4; 554 tmpDATAm=32'h019c; 555 oWRm=1; 556 end 557 5'hc:begin 558 //request dma status 559 oADDRm=dmaAddr+0*4; 560 oRDm=1; 561 end 562 5'hd:begin 563 //get data 564 if(iReaddatavalid==1'b1) 565 begin 566 if((iDATAm & 32'h0002)==0) 567 begin 568 oADDRm=32'hz; 569 tmpDATAm=32'hz; 570 oWRm=1'bz; 571 oRDm=1'bz; 572 end else 573 begin 574 //busy reread again 575 state=state-3; 576 end 577 end else 578 begin 579 //wait data 580 state=state-1; 581

Page 64: 基於 SOPC 影像處理驗證平台之設計與實作

- 11 -

end 582 end 583 5'he:begin 584 checksize_n=0; 585 if(writeIndex>length*100) 586 begin 587 oCapture<=0; 588 end 589 oADDRm=32'hz; 590 tmpDATAm=32'hz; 591 oWRm=1'bz; 592 oRDm=1'bz; 593 end 594 default:begin 595 oADDRm=32'hz; 596 tmpDATAm=32'hz; 597 oWRm=1'bz; 598 oRDm=1'bz; 599 end 600 endcase 601 state=state+1; 602 end //end of checksize_n 603 end //end of control 604 end //end of reset 605 end //end of always 606 endmodule607

Page 65: 基於 SOPC 影像處理驗證平台之設計與實作