Está en la página 1de 84

www.ngohaibac.

net

ĐẠI HỌC BÁCH KHOA HÀ NỘI


KHOA ĐIỆN – BỘ MÔN ĐIỀU KHIỂN TỰ ĐỘNG

THIẾT KẾ HỆ THỐNG XỬ LÝ ẢNH SỐ TRÊN


NỀN FPGA

Nhóm sinh viên thực hiện: Ngô Hải Bắc


Đỗ Trung Hiếu
Lớp Điều khiển tự động 1 – K48
Giáo viên hướng dẫn: Ts. Lưu Hồng Việt

HÀ NỘI - 2008

1
www.ngohaibac.net

Lời cảm ơn
Trước hết, chúng em xin gửi lời cảm ơn sâu sắc đến thầy giáo TS. Lưu
Hồng Việt, người đã giúp đỡ rất nhiều về định hướng nghiên cứu, thiết bị thí
nghiệm phục vụ cho nghiên cứu.

Chúng em xin chân thành cảm ơn các thầy cô giáo đã giảng dạy chúng
em, đặc biệt là các thầy cô giáo trong Bộ môn Điều khiển tự động – Khoa
Điện, TS. Phạm Ngọc Nam – Phó Trưởng bộ môn Điện tử - Tin học – Khoa
Điện tử Viễn Thông – Trường Đại học Bách Khoa Hà Nội đã tạo điều kiện
giúp đỡ chúng em hoàn thành đồ án tốt nghiệp này.

Xin chân thành cảm ơn Dave Vanden Bout, kĩ sư của công ty XESS
Corporation đã trả lời tận tình những thắc mắc của chúng em về KIT XSA-
3S1000 và XST-3.0.

Và cuối cùng, chúng em xin dành tất cả lòng biết ơn và kính trọng sâu sắc
nhất tới bố mẹ chúng em, những người đã sinh thành, nuôi dưỡng chúng em
nên người, đã lo lắng, chỉ bảo từ những việc nhỏ nhất, đã tạo mọi điều kiện
cho chúng em được sống và học tập một cách tốt nhất để vươn tới những ước
mơ và hoài bão của mình.

Mặc dù đã rất nỗ lực và cố gắng để hoàn thành luận văn tốt nghiệp này,
song chắc chắn không thể tránh khỏi sai sót. Vì vậy, chúng em rất mong được
sự chỉ bảo của thầy cô giáo để đề tài tốt nghiệp này hoàn thiện hơn.

2
www.ngohaibac.net

Mục lục

Lời cảm ơn.................................................................................................................................................. 2

Mục lục ....................................................................................................................................................... 3


Danh mục các hình vẽ trong đồ án tốt nghiệp...................................................................................... 6

Mở đầu........................................................................................................................................................ 8

Phần 1 : Cơ sở lý thuyết xử lý ảnh số ................................................................................................... 10

1.1. Khái quát về hệ thống Thị giác máy tính và Cảm biến thị giác........................................ 10

1.3. Các thành phần của hệ thống xử lý ảnh: ............................................................................. 16

1.3.1. Thành phần thu thập ảnh, Camera và vấn đề định dạng ảnh.................................. 16

1.3.2. Thành phần xử lý ảnh .................................................................................................... 17

1.3.2.1. Các khái niệm cơ bản của xử lý ảnh số ................................................................ 17

1.3.2.2. Các thuật toán xử lý ảnh số ................................................................................... 18

1.4. Một số giải pháp phần cứng cho hệ thống thị giác máy ................................................... 28

FPGA ................................................................................................................................................ 28

DSP Processor ................................................................................................................................. 28

Mainboard, laptop ......................................................................................................................... 29

Phần 2 : Khái quát về FPGA và mạch phát triển XST 3S1000 của XESS...................................... 31

2.1. Giới thiệu chung về FPGA và ngôn ngữ VHDL .............................................................. 31


2.1.1. Khái niệm và ứng dụng FPGA .................................................................................... 31

2.1.2. Kiến trúc FPGA............................................................................................................... 32

2.1.2.1. Kiến trúc chung FPGA .......................................................................................... 32

Configurable Logic Blocks (CLBs)...................................................................................... 33

Configurable I/O Blocks....................................................................................................... 34

Programmable Interconnect................................................................................................. 34

Mạch đồng hồ (Clock Circuitry )......................................................................................... 35

2.1.2.2. So sánh giữa cấu trúc nhỏ và cấu trúc lớn ......................................................... 36

2.1.2.3. So sánh giữa SDRAM Programming và Anti-fuse programming................ 36

2.1.2.4. Cấu trúc FPGA của Spartan 3............................................................................... 37

2.1.3. Trình tự thiết kế một chip ............................................................................................ 38


3
www.ngohaibac.net

Ghi các đặc điểm kĩ thuật ..................................................................................................... 39

Chọn công nghệ...................................................................................................................... 40

Chọn một hướng tiếp cận thiết kế ...................................................................................... 40

Chọn công cụ tổng hợp ......................................................................................................... 40

Thiết kế chip ........................................................................................................................... 41

Mô phỏng – cái nhìn tổng quan về thiết kế ...................................................................... 41

Tổng hợp.................................................................................................................................. 41

Place and Route ...................................................................................................................... 41

Mô phỏng lại – tổng quan cuối cùng.................................................................................. 42

Kiểm tra.................................................................................................................................... 42

2.1.4. Ngôn ngữ mô tả phần cứng VHDL............................................................................. 42

Trình tự thiết kế một chíp dựa trên VHDL........................................................................... 43

2.2. Giới thiệu mạch phát triển XST 3S 1000 của hãng XESS................................................ 44
2.2.1. XSA-3S1000...................................................................................................................... 45

2.2.2. XST-3.0 (XStend Board)................................................................................................. 46

2.3. Giới thiệu hãng Xilinx và các công cụ lập trình: .............................................................. 49

Hãng Xilinx ..................................................................................................................................... 49

ISE 9.2 ............................................................................................................................................... 49

LogicCore 9.2................................................................................................................................... 49

EDK 9.2............................................................................................................................................. 50

System Generator 9.2..................................................................................................................... 50

Phần 3 : Xây dựng hệ thống xử lí ảnh động trên nền FPGA.......................................................... 51


3.1. Sơ đồ cấu trúc hệ thống xử lí ảnh động ............................................................................. 51

3.2. Xây dựng hệ thống thu thập, lưu trữ, xử lý và hiển thị ảnh .......................................... 53

3.2.1. Thành phần thu thập ảnh Framegrabber................................................................... 53

3.2.2. Lưu dữ liệu từ Framegrabber vào SDRAM .............................................................. 55

3.2.3. Các cơ chế ghi đọc SDRAM: SDRAM Controller, Dual Port SDRAM................ 55

SDRAM Controller .................................................................................................................... 55

Pipeline Read Operation ...................................................................................................... 56

Pipeline Write Operation ..................................................................................................... 56

Dualport Module for the SDRAM Controller...................................................................... 58

4
www.ngohaibac.net

3.2.4. Image Processing core ................................................................................................... 60

3.2.5. Hiển thị ảnh lên VGA: VGA Generator .................................................................... 67

VGA Color Signals .................................................................................................................... 67

VGA Signal Timing................................................................................................................... 68

Nguyên tắc hoạt động của VGA Generator .......................................................................... 69

3.2.6. Picoblaze và hệ thống điều khiển trung tâm ............................................................ 71

3.2.6.1. Khái quát PicoBlaze............................................................................................... 71

KCPSM3 Module ................................................................................................................... 73

Kết nối với bộ nhớ ROM chương trình.............................................................................. 73

3.2.6.2. Sơ đồ cấu trúc của khối xử lý trung tâm ............................................................ 75

Thuật toán của chương trình................................................................................................. 75

3.3. Thiết kế giao diện điều khiển hệ thống............................................................................. 76

Chức năng .................................................................................................................................... 77

3.4. Mô phỏng và kết quả............................................................................................................. 77

Phương án mô phỏng ..................................................................................................................... 77

Kết quả.............................................................................................................................................. 78
Kết luận .................................................................................................................................................... 79

Tài liệu tham khảo ................................................................................................................................. 82

5
www.ngohaibac.net

Danh mục các hình vẽ trong đồ án tốt nghiệp


Hình 1.1 Một tay máy thực hiện gắp đối tượng với sự trợ giúp của hệ thống thị giác
máy tính
Hình 1.2 Các bước cơ bản của xử lý ảnh số.
Hình 1.3 Những kiểu liên kết giữa các điểm ảnh.
Hình 1.4 Những kiểu đường liên kết giữa các điểm ảnh.
Hình 1.5 Kết quả của phép lọc Gaussian với cửa sổ 3x3.
Hình 1.6 Kết quả thuật toán dò biên.
Hình 1.7 Phân ngưỡng theo lược đồ xám.
Hình 1.8 Loại bỏ nhiễu và khôi phục đối tượng bằng quá trình làm mảnh-làm đầy.
Hình 1.9 Sơ đồ thuật toán gán nhãn đối tượng.
Hình 2.1 Kiến trúc chung của FPGA.
Hình 2.2 Một Logic Block điển hình.
Hình 2.3 Configurable Logic Blocks.
Hình 2.4 Programmable Interconnect.
Hình 2.5 Cấu trúc các thành phần của Spartan 3A.
Hình 2.6 Design Flow.
Hình 2.7 Qui trình thiết kế chip dựa trên VHDL.
Hình 2.8 KIT XSA-3S1000.
Hình 2.9 Sơ đồ cấu trúc của XSA-3S1000.
Hình 2.10 XST-3.0 Board.
Hình 2.11 XST-3S1000.
Hình 3.1 Một ảnh cần được xử lý.
Hình 3.2 Sơ đồ chung của hệ thống.
Hình 3.3 Pixel stream waveform.
Hình 3.4 Framegrabber state machine.
Hình 3.5 Pipelined Read Operation timing waveforms.
Hình 3.6 Pipelined Write Operation timing waveforms.
Hình 3.7 Ghép nối với SDRAM Controller.
Hình 3.8 Ghép nối dualport với SDRAM Controller.
Hình 3.9 Xây dựng 4 ports SDRAM interface.
Hình 3.10 Sơ đồ khối xử lý ảnh.
Hình 3.11 Khối ghi dữ liệu từ read_fifo vào Buffer.

6
www.ngohaibac.net

Hình 3.12 Khối thuật toán xử lý ảnh.


Hình 3.13 Cơ chế ghi và đọc buffer.
Hình 3.14 Khối đọc dữ liệu từ buffer.
Hình 3.15 Sơ đồ khối thanh ghi dịch Pixel register
Hình 3.16 Cấu trúc nhân chập.
Hình 3.17 Cấu trúc bộ xử lý đồng cấu ảnh nhị phân.
Hình 3.18 Khối gán nhãn đối tượng.
Hình 3.19 VGA Connection.
Hình 3.20 8 màu cơ bản.
Hình 3.21 CRT Display Timing Example.
Hình 3.22 640 x 480 Mode VGA Control Timing.
Hình 3.23 Sơ đồ khối cấu trúc của VGA Generator.
Hình 3.24 Sơ đồ khối cấu trúc của PicoBlaze.
Hình 3.25 Sơ đồ cấu trúc PicoBlaze Microcontroller.
Hình 3.26 Sơ đồ khối điều khiển trung tâm và giao tiếp UART.
Hình 3.27 Giao diện điều khiển.

7
www.ngohaibac.net

Mở đầu

Thị giác máy là một lĩnh vực đã và đang rất phát triển. Khái niệm thị giác

máy – Computer vision có liên quan tới nhiều ngành học và hướng nghiên

cứu khác nhau. Từ những năm 1970 khi mà năng lực tính toán của máy tính

ngày càng trở nên mạnh mẽ hơn, các máy tính lúc này có thể xử lý được

những tập dữ liệu lớn như các hình ảnh, các đoạn phim thì khái niệm và kỹ

thuật về thị giác máy ngày càng được nhắc đến và nghiên cứu nhiều hơn cho

tới ngày nay.

Thị giác máy bao gồm lý thuyết và các kỹ thuật liên quan nhằm mục đích

tạo ra một hệ thống nhân tạo có thể tiếp nhận thông tin từ các hình ảnh thu

được hoặc các tập dữ liệu đa chiều.

Ngày nay, ứng dụng của thị giác máy đã trở nên rất rộng lớn và đa dạng,

len lỏi vào mọi lĩnh vực từ quân sự, khoa học, vũ trụ, cho đến y học, sản xuất,

và tự động hóa tòa nhà.

Mục đích của đồ án này là nghiên cứu các khái niệm cơ bản của Thị giác

máy tính và xử lý ảnh số. Đồng thời trên cơ sở đó, chúng em xây dựng một

hệ thống cảm biến thị giác trên nền phần cứng vi mạch khả trình FPGA. Cảm

biến này thực hiện các chức năng cơ sở của một cảm biến thị giác : đó là tiếp

nhận thông tin từ hình ảnh thu được để xử lý và phục vụ cho các quá trình

phân tích cao hơn.

8
www.ngohaibac.net

Trong phần 1 của đồ án, chúng em đề cập đến những các khái niệm của hệ

thống thị giác máy tính, những ứng dụng và các thành phần của nó. Đồng

thời chúng em trình bày cơ sở kiến thức xử lý ảnh số sẽ được dùng trong việc

xây dựng hệ thống cảm biến thị giác.

Trong phần 2, chúng em trình bày những khái niệm cơ bản về chip khả

trình FPGA, hãng Xilinx và những công cụ lập trình và phát triển hệ thống

với FPGA. Chúng em cũng đề cập đến vi mạch tích hợp XST 3S 1000 của

hãng XESS, được sử dụng trong đồ án này.

Phần 3, chúng em trình bày phương án thực thi hệ thống thị giác máy trên

nền FPGA. Việc xây dựng các thành phần thu thập ảnh, lưu trữ ảnh, xử lý

ảnh và hiện thị ảnh trên mạch tích hợp XST 3S 1000 được đề cập chi tiết trong

phần này. Trong phần này, chúng em cũng trình bày phương án chạy mô

phỏng kiểm tra hoạt động của hệ thống.

Và cuối cùng, chúng em tổng kết những kết quả đạt được, những ưu

điểm, nhược điểm của giải pháp, hiệu quả của giải pháp và những hướng

phát triển.

9
www.ngohaibac.net

Phần 1 : Cơ sở lý thuyết xử lý ảnh số

1.1. Khái quát về hệ thống Thị giác máy tính và Cảm biến thị giác

Theo định nghĩa từ [1] : Hệ thống thị giác - bao gồm cả thị giác máy
(machine vision) và thị giác máy tính (computer vision)- là những hệ thống
tiếp nhận thông tin từ các cảm biến thị giác (vision sensor) với mục đích cho
phép máy móc đưa ra những quyết định thông minh.

Thị giác máy tính là một ngành khoa học mới phát triển. Mặc dù đã có
những ứng dụng của xử lý ảnh số trong những thập niên đầu của thế kỉ XX
vào một số lĩnh vực, nhưng phải đến những năm 1970, những nghiên cứu về
lĩnh vực này mới được bắt đầu khi máy tính đã có thể quản lý các quá trình
xử lý một lượng lớn dữ liệu như các ảnh số.

Lĩnh vực nghiên cứu của thị giác máy rất rộng, và đặc điểm chung là các
bài toán về thị giác máy tính đều không có một đề bài chung và cách giải duy
nhất. Mỗi giải pháp giải quyết vấn đều được một kết quả nhất định cho
những trường hợp cụ thể. Ta có thể thấy sự tương quan giữa Computer
vision với các lĩnh vực khác như sau:

10
www.ngohaibac.net

Qua sơ đồ trên, ta có thể thấy thị giác máy tính và thị giác máy có liên
quan đến rất nhiều ngành như tự động điều khiển, xử lý ảnh số, quang học,
sinh học, toán học, máy học. và Trí tuệ nhân tạo. Sự kết hợp của những
ngành này tạo cho Thị giác máy tính một khả năng ứng dụng hết sức rộng
lớn trong mọi lĩnh vực của khoa học, sản xuất và đời sống. Có thể liệt kê một
số ứng dụng của thị giác máy tính như sau :

Điều khiển tiến trình (ví dụ: trong các robot công nghiệp, hay các thiết bị,
xe tự hành).

Phát hiện sự kiện (ví dụ: các thiết bị giám sát)

Tự động hóa tòa nhà.

Mô hình hoá đối tượng (ví dụ: quá trình kiểm tra trong môi trường công
nghiệp, xử lý ảnh trong y học).

Tương tác (đóng vai trò làm đầu vào cho thiết bị trong quá trình tương
tác giữa người và máy).

Nhận dạng

Quân sự.

Trong lĩnh vực điều khiển tiến trình, thị giác máy tính đóng vai trò đặc
biệt quan trọng như một cảm biến vị trí cho robot công nghiệp hoặc xe tự
hành.

Trong hệ thống máy CNC, hoặc các dây chuyền công nghệ, các cảm biến
thị giác thu thập dữ liệu ảnh về đối tượng công nghiệp, xử lý và tách đối
tượng ra khỏi ảnh. Sau khi tách đối tượng, hệ thống thị giác máy tính toán
các đặc trưng của đối tượng, như vị trí, hướng, để giúp cánh tay máy của
robot công nghiệp thao tác chính xác việc gắp hoặc gia công đối tượng.

Với những hệ thống thị giác được tích hợp các camera có độ phân giải lớn,
được lập trình chính xác, có thể điều khiển tay máy để thao tác với những vi
mạch nhỏ đòi hỏi độ chính xác gần như tuyệt đối.

11
www.ngohaibac.net

Hình 1.1: Một tay máy thực hiện gắp đối tượng với sự trợ giúp của hệ thống thị giác
máy tính

Cũng như vậy, với xe tự hành đi trong môi trường phức tạp, nhiều vật
cản, hệ thống thị giác máy giúp cho xe phát hiện ra những đối tượng, vị trí và
khoảng cách của chúng đối với xe. Trong trường hợp này, hệ thống thị giác
máy không chỉ đóng vai trò như môt cảm biến thị giác, mà còn thực hiện việc
vẽ bản đồ đối tượng, cho phép xe tự hành chọn được đường đi thích hợp
nhất.

Hệ thống thị giác máy còn được ứng dụng trong những lĩnh vực công
nghiệp với vai trò như một cảm biến kiểm soát lỗi bề mặt sản phẩm. Camera
thu thập hình ảnh về bề mặt sản phẩm, sẽ truyền dữ liệu vào cho hệ thống xử
lý để tìm ra lỗi trên sản phẩm, vị trí lỗi và kích thước lỗi. Với những hệ thống
thị giác sử dụng camera hồng ngoại, ta còn có thể đo nhiệt độ sản phẩm và sự
phân bố nhiệt độ trên sản phẩm.

Như vậy, có thể nói, trong lĩnh vực công nghiệp, thị giác máy và cảm biến
thị giác có thể thay thế một lượng lớn các cảm biến ví trí thông thường, vốn
cần rất nhiều trong một dây chuyền sản xuất hoặc CNC, giúp giảm thiểu chi
phí và công sức lắp đặt cảm biến, và quan trọng nhất là tạo nên một hệ thống
xử lý thống nhất những thông tin về quá trình và đối tượng công nghiệp.

Trong lĩnh vực tự động hóa tòa nhà, hệ thống thị giác máy cũng đóng một
vai trò ngày càng quan trọng.

12
www.ngohaibac.net

Với sự phát triển của các thuật toán xử lý dữ liệu ảnh, ứng dụng các thành
tựu mới nhất của công nghệ xử lý và trí tuệ nhân tạo, các cảm biến thị giác
ngày nay có thẻ thực hiện những chức năng thông minh như đếm số người
trong phòng, nhận dạng đối tượng chuyển động, nhận dạng khuôn mặt, cảnh
báo sự kiện, nhận dạng vân tay....

Các hãng như ALTALS và SELTEC, đã cho ra đời những máy đếm số
người, dựa trên chuỗi hình ảnh. Bằng cách quan sát sự di chuyển của dòng
người và số người , hệ thống thị giác máy sẽ tính toán tốc độ và mật độ dòng
người di chuyển. Bài toán này được ứng dụng nhiều trong những khu công
cộng như nhà ga, tàu điện ngầm để kiểm soát lưu lượng người ra vào nhằm
đưa ra những quyết định điều hành chính xác.[2]

Hệ thống thị giác máy còn được ứng dụng rộng rãi trong việc nhận dạng,
chuẩn đoán y học, quân sự ( xác định vị trí đối phương) và vũ trụ...

Xu thế phát triển của các cảm biến ngày nay, đó là độ chính xác cao, kèm
với tính phân tán, thông minh, khả năng loại bỏ lỗi (fault tolerance). Các hệ
thống cảm biến thị giác đang chứng tỏ ngày càng đáp ứng được xu thế đấy.
Các hệ thống cảm biến thị giác ngày nay, đã có thể thay thế được một lượng
lớn cảm biến vị trí trong những bài toán cụ thể, đồng thời, khả năng xử lý
thông tin không cần đến sự điều khiển của bộ điều khiển trung tâm, cho
phép chúng có thể tích hợp rộng rãi vào những hệ thống điều khiển phân tán.
Thêm vào đó, các cảm biến thị giác có tính linh hoạt rất cao, có thể ứng dụng
trong nhiều bài toán với những yêu cầu đo đạc và giám sát khác nhau. Và
cuối cùng, do đặc điểm hoạt động của mình, các cảm biến thị giác có thể hoạt
động tốt trong những môi trường khắc nghiệt, như nhiệt độ cao, phóng xạ,
bụi, điện trường, độ ẩm lớn...

Với những lý do đó, hệ thống thị giác máy và cảm biến thị giác đang ngày
càng được ứng dụng nhiều trong những hệ thống phức tạp và hiện đại, hoạt
động liên tục và đòi hỏi yêu cầu về độ chính xác và xử lý thông tin cao.

1.2. Khái quát quá trình xử lý ảnh số trong hệ thống thị giác máy
tính

Hệ thống thị giác máy tính bao gồm nhiều lĩnh vực, trong đó xử lý ảnh số
đóng một vai trò quyết định.

13
www.ngohaibac.net

Hệ thống xử lý ảnh số bao gồm một phạm vi rộng các kiến thức về phần
cứng, phần mềm và cơ sở lý thuyết.

Các bước cơ bản của xử lý ảnh số được mô tả trong sơ đồ dưới đây:

Phân vùng,
Biểu diễn
phân ngưỡng

Tiền xử lý

Xử lý và
Cơ sở kiến thức nhận dạng

Thu nhận
ảnh

Hình 1.2 : Các bước cơ bản của xử lý ảnh số

Thu thập ảnh(image acquision) : Ảnh số được thu thập bằng một cảm
biến ảnh có khả năng biến thông tin về cường độ sáng và mức xám của ảnh
thực thành tín hiệu điện áp dưới dạng analog. Tín hiệu này sau đó được số
hóa để trở thành tín hiệu số.

Hiện nay có một số cảm biến ảnh thực hiện cả việc thu nhận tín hiệu về
cường độ sáng của ảnh và số hóa tín hiệu. Trong trường hợp cảm biến không
có chức năng số hóa thì cần phải có một bộ biến đổi ảnh tương tự thành ảnh
số (video decoder). Tín hiệu ảnh sau khi được số hóa còn được mã hóa theo
những chuẩn video (video format) nhất định trước khi được đưa vào quá
trình lưu trữ và xử lý. Các chuẩn video thường gặp như IUT-R-BT 656, 601...

Tiền xử lý ảnh : Sau khi ảnh số được thu thập dưới dạng tín hiệu số, cần
phải trải qua giai đoạn tiền xử lý. Chức năng chủ yếu của tiền xử lý là cải
thiện ảnh, nâng cao các tính chất của ảnh giúp cho các quá trình xử lý về sau
14
www.ngohaibac.net

được thuận tiện hơn. Các công đoạn cơ bản của tiền xử lý là : nâng cao độ
tương phản, lọc nhiễu...

Phân vùng ảnh: Bước tiếp theo của quá trình xử lý là phân vùng ảnh. Ảnh
sau khi đã được cải thiện, sẽ trở nên thuận tiện hơn cho việc phân ngưỡng và
phân vùng. Nhiệm vụ chính của phân ngưỡng và phân vùng ảnh là tách ảnh
đầu vào thành các đối tượng, vật thể riêng biệt. Kết quả của quá trình phân
vùng ảnh, ta sẽ được một tập hợp các điểm ảnh có liên kết với nhau thành các
đối tượng, được đánh số phân biệt, thuận tiện cho các quá trình xử lý cao
hơn.

Đầu ra của quá trình phân vùng ảnh là các pixel chưa được lọc, bao gồm
liên kết của 1 vùng hoặc tất cả các điểm ảnh trong vùng đó. Số liệu này cần
được biến đổi thành dạng thích hợp cho máy tính xử lý.

Phân tích ảnh: đây là giai đoạn xử lý bậc cao trong hệ thống xử lý ảnh số.
Ảnh sau khi được phân vùng thành các đối tượng riêng biệt, đã được đánh số
phân biệt, sẽ được phân tích để phục vụ những mục đích khác nhau như:

Xác định các đặc trưng hình học của đối tượng: dựa trên cơ sở đối tượng
đã được xác định và phân biệt, ta có thể thực hiện xác định các đặc trưng
hình học của mỗi đối tượng đấy, như : vị trí, kích thước, hướng, ... và số đối
tượng hay mật độ đối tượng trong ảnh. Đây là các đặc trưng được dùng
nhiều trong hệ thống thị giác máy (machine vision)

Nhận dạng : các đối tượng có thể là các vật thể có hình dạng nhất định,
hoặc các kí tự số, chữ cái, dấu vân tay...Ảnh sau khi được phân vùng có thể
được nhận dạng theo những phương pháp nhất định như phương pháp
neural, để tìm ra mẫu hình dạng mà đối tượng đó thuộc về.

Để hướng dẫn hoạt động của từng module xử lý, cần có một hệ cơ sở kiến
thức để kiểm tra hoạt động và tương tác giữa các module. Hệ này có nhiệm
vụ kiểm soát hoạt động của từng module và sắp xếp trình tự hoạt động của
chúng trong từng thời điểm, giải quyết bài toán xung đột.

15
www.ngohaibac.net

1.3. Các thành phần của hệ thống xử lý ảnh:

1.3.1. Thành phần thu thập ảnh, Camera và vấn đề định dạng ảnh.

Giới thiệu chung về camera : Trong hệ thống xử lý ảnh số, camera là một
thiết bị rất quan trọng có chức năng quan sát và thu nhận ảnh đầu vào của
hệ thống. Nó thường được coi là hộp đen trong đó có các quá trình biến đổi
để chuyển một ảnh thành dạng lưu trữ trong máy tính. Các bước xử lý này
bao gồm sự phát sáng, thấu kính, sensor, các phần tử quang điện và bộ số
hoá, mỗi thành phần này phối hợp nhằm đưa ra ảnh số cuối cùng. Điểm đặc
biệt quan trọng trong nhận dạng ảnh là đặc tính thời gian của camera, vì vậy
quá trình xử lí ảnh có vai trò như bộ lấy mẫu trong hệ thống nhận dạng ảnh.

Cảm biến nhìn chung gồm 2 thành phần chính. Thành phần thứ nhất tạo
ra tín hiệu điện ở đầu ra tỉ lệ với mức năng lượng mà nó nhận được. Thành
phần thứ 2 là bộ số hóa(digitalize) , là phần tử biến đổi tín hiệu tương tự
thành tín hiệu số. Tùy thuộc vào thành phần số hóa thực chất là bộ chuyển
đổi ADC, chúng ta có các tín hiệu với số bit khác nhau: 4 bit, 8bit, 10 bit, 12
bit..., tương ứng ta sẽ được các ảnh có 16, 256....mức xám khác nhau.

Trước đây, người ta sử dụng các camera dựa trên thiết bị phóng tia điện
tử, linh kiện bán dẫn, tuy nhiên những thiết bị này thường cồng kềnh, thiếu
bền vững, độ ổn định thấp. Từ những năm 1980, đã bắt đầu xuất hiện các
sensor ảnh trong các camera như sensor CMOS, CCD. Các sensor này chứa
một số lượng phần tử quang rời rạc, hay các điểm ảnh (pixel), mỗi phần tử
chứa thông tin liên quan đến độ sáng chiếu vào nó.

Độ phân giải của các sensor phụ thuộc vào số điểm ảnh trên nó. Số điểm
ảnh của các sensor là đa dạng, từ thấp (32x32 điểm ảnh), đến trung bình
(256x256 điểm ảnh) cho đến cao (640x480 ) hoặc cao hơn nữa là 1280x1024
điểm ảnh.

Trong đề tài này, chúng em sử dụng loại camera AVC 301D của hãng
AVTech, đây là một loại camera quan sát cho ảnh xám, sử dụng sensor có độ
phân giải tương đối lớn (510x482 điểm ảnh), cho ra tín hiệu ảnh dạng tương
tự và cần phải được số hóa trước khi đi vào quá trình xử lý. Tín hiệu ảnh

16
www.ngohaibac.net

tương tự được số hóa thành ảnh số bởi bộ video decoder TVP5150 theo chuẩn
ITU-R-BT 601.

Mỗi frame ảnh thu về được biểu diễn dưới dạng I(x,y) trong đó x,y là tọa
độ của pixel trên frame và I là mức xám tương ứng của pixel đó.

Như vậy 1 frame ảnh thu được sẽ được biểu diễn dưới dạng một ma trận
2 chiều n x m với n là số pixel trên 1 hàng, m là số hàng trong 1 frame. Trong
đồ án này, ảnh thu được từ camera có kích thước 510x482, tuy nhiên sau quá
trình số hóa theo chuẩn ITU 601 ta có ảnh số 8bit với kích thước chuẩn là
720x525.

1.3.2. Thành phần xử lý ảnh

1.3.2.1. Các khái niệm cơ bản của xử lý ảnh số

Pixel và các lân cận : Như đã biết, mỗi frame ảnh được mô tả dưới dạng
ma trận 2 chiều, trong đó mỗi phần tử của ma trận tương ứng với mức xám
của 1 điểm ảnh (pixel). Mỗi điểm ảnh này có các lân cận xung quanh. Nếu
hiển thị mỗi pixel dưới dạng một ô vuông, mỗi điểm có chung biên với 4
điểm lân cận, và có chung góc với 4 điểm lân cận khác.

Hai điểm lân cận gọi là "liên kết 4" nếu chúng có chung biên với nhau, và
"liên kết 8" nếu chung góc và chung biên với nhau.

Hình 1.3 : Những kiểu liên kết giữa các điểm ảnh

Đường liên kết: Đường liên kết là đường nối từ pixel [i1, j1 ] đến pixel
[in , jn ] , qua một chuỗi các pixel [i1, j1 ] , [i2, j2 ] ,... [ik , jk ] ..., trong đó mỗi pixel

17
www.ngohaibac.net

liên kết với pixel trước nó. Ta có đường liên kết 4 hoặc liên kết 8 nếu các pixel
liên kết 4 hoặc 8 với nhau

a) Liên kết 4 b) Liên kết 8

Hình 1.4 : Những kiểu đường liên kết giữa các điểm ảnh.

Có thể dễ dàng nhận thấy, nếu có một đường liên kết giữa 2 điểm [ia , ja ] ,
[ib , jb ] , và giữa 2 điểm [ia , ja ] , [ic , jc ] thì cũng sẽ có đường liên kết giữa 2
điểm [ib jb ] và [ic jc ] . Liên kết có tính tương đối.

Đối tượng và nền : Ảnh sau khi được nhị phân hóa ( các điểm ảnh chỉ có
giá trị 0 hoặc 1) sẽ phân biệt được đối tượng và nền. Trong đề tài này, ta giả
định đối tượng là tập hợp các điểm ảnh có liên kết với nhau và có mức xám là
0 (đen), ta ký hiệu là S, và nền là những điểm có mức xám 1 (trắng) .

Biên: biên của một đối tượng S là tập các điểm trên S và có liên kết 4 với
~S (phần bù của S) hay nền của ảnh.

Miền trong của S : là các điểm thuộc S nhưng không nằm trên biên của
nó.

1.3.2.2. Các thuật toán xử lý ảnh số

Toán tử cửa sổ (windowing operator): Trong việc thực thi các thuật toán
xử lý ảnh số cơ bản, người ta thường sử dụng một toán tử đặc biệt gọi là toán
tử cửa sổ. Toán tử cửa sổ là một tập hợp có hình dạng nhất định, gồm các
pixel có liên kết với một pixel trung tâm, là pixel đang được xử lý. Các phép

18
www.ngohaibac.net

toán trên các pixel này sẽ có ảnh hưởng đến các pixel trung tâm cũng là các
pixel đang được xử lý trong một thuật toán xử lý ảnh.

Toán tử cửa sổ có nhiều hình dạng, tùy thuộc vào thuật toán thực hiện.
Tuy nhiên thường dùng nhất là các toán tử có dạng hình vuông với các cạnh
là một số lẻ, ví dụ :3x3, 5x5, 7x7...

Trong đồ án này, chúng em sử dụng thường xuyên toán tử cửa sổ có dạng


3x3, vì đây là kích thước hợp lý để thực hiện hiệu quả tất cả các thuật toán xử
lý cơ bản và nâng cao, đồng thời lại dễ thực hiện và rút ngắn tối đa quá trình
xử lý. Nếu sử dụng cửa sổ 5x5 và 7x7, thời gian xử lý sẽ tăng lên rất nhiều.

Tăng độ tương phản : Ảnh sau khi thu được từ camera, có thể do sự
tương phản ảnh sáng kém, dẫn đến độ chói quá cao, khó phân biệt. Để cải
thiện ảnh, hỗ trợ các quá trình xử lý cao hơn, ta sử dụng các phương pháp
hiệu chỉnh: hiệu chỉnh min-max, hiệu chỉnh histogram, hiệu chỉnh Gamma, ...

Ở đây ta sử dụng phương pháp hiệu chỉnh min-max vì nó dãn đều mức
xám của ảnh trong dải cho phép (không ảnh hưởng đến mức xám chung).
Công thức để nâng cấp ảnh theo hiệu chỉnh min-max:

I old  I min
I new  .256
I max  I min

Trong đó: I max , I min - là các mức xám cao nhất và thấp nhất.

I new , I old - là mức xám sau khi hiệu chỉnh và trước khi hiệu chỉnh.

Sau khi hiệu chỉnh mức xám, ta sẽ dãn mức xám của ảnh ra các giá trị cách
biệt nhau hơn, tạo thuật tiện cho việc xử lý và nhận dạng sau này.

Các thuật toán nhân chập

Nhân chập (convolution) : nhân chập không phải là một thuật toán xử lý
ảnh, mà là phép toán thông dụng trong các thuật toán xử lý ảnh sử dụng toán

19
www.ngohaibac.net

tử cửa sổ. Nhân chập được sử dụng trong các bài toán dò biên (edge
detection) và lọc tuyến tính (linear filter).

Nhân chập tính toán ra giá trị mới của pixel trung tâm của toán tử cửa sổ,
bằng cách thực hiện phép tính với các pixel lân cận và chính pixel trung tâm.

Việc thực thi phép nhân chập như sau: cho một cửa sổ với pixel trung tâm
chạy trên toàn bộ frame ảnh, với mỗi cửa sổ 3x3 thu được, ta thực hiện phép
toán :

i 1 j 1
I (i, j )    c(n, m).I (n, m) (1.1).
n  i 1 m  j 1

Kết quả tính được cho ra giá trị mới của pixel trung tâm.

Trong (1.1), c(n,m) là các phần tử của một ma trận gọi là mặt nạ (mask).
Mỗi thuật toán xử lý khác nhau sử dụng một mặt nạ khác nhau để tính giá trị
của các điểm ảnh.

Lọc tuyến tính, dò biên: Đây là 2 thuật toán cơ sở sử dụng phép nhân
chập.

Lọc tuyến tính(linear filter) có tác dụng cải thiện ảnh, loại bỏ nhiễu hỗ trợ
cho các quá trình xử lý cao hơn.

Mỗi bộ lọc khác nhau sử dụng một mặt nạ khác nhau, cho hiệu quả khác
nhau tùy vào mục đích sử dụng và tình trạng của ảnh sau khi thu thập. Ví dụ
đối với ảnh có nhiễu phân bố đều, ngẫu nhiên độc lập với mỗi pixel, ta có thể
sử dụng mặt nạ dành cho lọc trung bình, mặt nạ này sẽ làm giảm ảnh hưởng
của nhiễu đối với pixel trung tâm bằng cách lấy trung bình cộng các pixel lân
cận trong cửa sổ.

 c11 c12 c13   1 1 1


  1  
c   c21 c22 c23   1 1 1
c 9
 31 c32 c33  
 1 1 1

Nếu ảnh có nhiễu Gaussian, ta sử dụng mặt nạ


20
www.ngohaibac.net

 c11 c12 c13  1 2 1


  1  
c   c21 c22 c23    2 4 2 
c 16 
 31 c32 c33  
1 1 1

a) Trước khi lọc b)Sau khi lọc

Hình 1.5 : Kết quả của phép lọc Gaussian với cửa sổ 3x3

Dò biên : Biên của một đối tượng được xác định ở nơi mức xám của các
pixel có sự thay đổi đột ngột. Có nhiều cách xác định biên, như dò biên theo
gradient, dò biên bằng cách lấy đạo hàm bậc 2 của mức xám theo tọa độ
pixel. Hầu hết các thuật toán dò biên sử dụng nhân chập, dù không phải là
tất cả . Thuật toán dò biên mà chúng em sử dụng trong đồ án này là thuật
toán Laplacien.

Thuật toán Laplacien dò biên chỉ quan tâm đến sự thay đổi đột ngột của
mức xám ( lấy đạo hàm bậc 2 ) mà không quan tâm đến hướng của biên.
Thuật toán này được thực thi bằng cách sử dụng mặt nạ:

 c11 c12 c13   1 1 1


   
c   c21 c22 c23    1 8 1 cho liên kết 8
c c33   1 1 1
 31 c32

21
www.ngohaibac.net

 c11 c12 c13   0 1 0 


   
c   c21 c22 c23    1 4 1  cho liên kết 4
c c32 c33   0 1 0 
 31

a) Ảnh gốc b) Kết quả dò biên

Hình 1.6 : Kết quả thuật toán dò biên

Phân ngưỡng, phân vùng và nhị phân hóa ảnh số: Ảnh sau quá trình tiền
xử lý, nâng cấp, để tới những quá trình xử lý cao hơn cần được nhị phân hóa,
phân vùng thành các đối tượng riêng biệt.

Tìm ngưỡng : đây là quá trình tìm ra ngưỡng của một ảnh để thực hiện
việc phân vùng. Ngưỡng đóng vai trò quyết định quá trình nhị phân hóa ảnh
số có hiệu quả hay không. Nếu chọn ngưỡng không tốt, sẽ bỏ qua một số đối
tượng, hoặc cho đối tượng với kích thước, vị trí không đúng, hoặc tệ hơn là
làm các đối tượng không phân biệt được với nhau.

Có nhiều thuật toán tìm ngưỡng, cho kết quả khác nhau : Trong đó điển
hình là tìm ngưỡng trung bình và tìm ngưỡng theo histogram.

Tìm ngưỡng trung bình, ngưỡng được tính theo công thức:

22
www.ngohaibac.net

1 n m
I tb   I (i, j )
n.m i 1 j 1
I ng  I tb  

n x m - kích thước ảnh

Itb , I ng ,  - mức xám trung bình, giá trị ngưỡng và số gia hiệu chỉnh.

Tìm ngưỡng theo histogram: là phương pháp tìm ngưỡng dựa theo lược
đồ xám.

Hình 1.7 : Phân ngưỡng theo lược đồ xám

Ngưỡng tìm được theo công thức: I ng =( I max1 + I max2 )/2. Trong đó I max1
và I max2 là 2 mức xám tương ứng cực đại trên histogram.

Phân vùng và nhị phân hóa ảnh số: sau khi tìm ngưỡng, ta có thể nhị
phân hóa ảnh số và tách các đối tượng. Trong ảnh xám ban đầu, ta coi đối
tượng là những vùng ảnh có mức xám thấp, nền là vùng ảnh có mức xám
cao. Ta có thể tách đối tượng ra bằng thuật toán phân ngưỡng:

23
www.ngohaibac.net

Ta sẽ được đối tượng có màu đen( mức xám 1) và nền có màu trắng (mức
xám 0).

Xử lý đồng cấu ảnh nhị phân

Ảnh nhị phân thu được sau khi phân ngưỡng, phân vùng ảnh thành các
đối tượng, vẫn có thể chưa hoàn chỉnh để thực hiện các quá trình phân tích
tiếp theo. Đó là do trên ảnh vẫn có thể tồn tại các nhiễu là các chấm đen chưa
bị loại bỏ sau các thuật toán nâng cấp ảnh và lọc, hoặc do ngưỡng được chọn
chưa thực sự tốt để tách hoàn toàn các đối tượng. Để giải quyết vấn đề này, ta
sử dụng các thuật toán xử lý đồng cấu ảnh nhị phân (morphological
algorithms) .

Có 2 phương pháp xử lý tiêu biểu : Thuật toán làm đầy( dilation) và làm
mảnh (erosion).

2 phương pháp này đều sử dụng một cửa sổ- phần tử cấu trúc(structure
element) quét qua ảnh. Dựa trên việc phân tích cửa sổ này ta tính ra giá trị
của pixel trung tâm.

 Làm đầy (dilation) I (i, j ) = 0 chỉ khi tất cả các pixel trong phần tử
cấu trúc có giá trị bằng 0 (cửa sổ nằm hoàn toàn bên ngoài đối
tượng)

 Làm mảnh (erosion) I (i, j ) = 1 chỉ khi tất cả các pixel trong phần tử
cấu trúc có giá trị bằng 1 ( cửa sổ nằm hoàn toàn trong đối tượng )

Kết quả của quá trình làm mảnh là ảnh sẽ loại bỏ bớt được những nhiễu
nhỏ, đồng thời làm nhỏ bớt đối tượng, tách các đối tượng gần nhau ra. Để
khôi phục đối tượng trở lại như cũ, ta dùng thuật toán làm đầy. Sau quá trình
này các nhiễu đã bị loại bỏ sẽ không xuất hiện trở lại. Có thể loại bỏ hẳn các
nhiễu tương đối lớn bằng cách thực hiện nhiều lần thuật toán làm mảnh và
làm đầy. Tuy nhiên sau đó hình dạng đối tượng không được khôi phục hoàn
toàn như trước.

24
www.ngohaibac.net

Hình 1.8 : Loại bỏ nhiễu và khôi phục đối tượng bằng quá trình làm mảnh-làm đầy.

Bài toán đánh nhãn đối tượng: với phương pháp xử lý đồng cấu ảnh nhị
phân, ta đã được 1 ảnh nhị phân với các đối tượng được tách ra rõ rệt, và loại
bỏ được các nhiễu. Để thực hiện việc xác định các đặc trưng hình học của đối
tượng, phục vụ cho hệ thống định vị và nhận dạng, cần phải phân biệt các
đối tượng (các vùng ảnh đen) với nhau bằng cách gán cho chúng các nhãn
khác nhau.

Thuật toán gán nhãn đối tượng cũng sử dụng một cửa sổ 3x3 chạy khắp
frame. Pixel trung tâm sẽ được kiểm tra để gán nhãn, và các pixel lân cận
được dùng để xác định nhãn mới cho pixel trung tâm. Thuật toán thực hiện
như sau:

25
www.ngohaibac.net

Hình 1.9 : Sơ đồ thuật toán gán nhãn đối tượng

Thuật toán gán nhãn đối tượng được thực hiện như sau: ban đầu ta khởi
tạo biến đếm đối tượng n_object=0. Cửa sổ đọc từ vị trí xuất phát (góc trái

26
www.ngohaibac.net

phía trên của frame). Kiểm tra xem pixel trung tâm có bằng 0. Nếu khác 0 thì
dịch cửa sổ. Nếu bằng 0, kiểm tra nhãn của pixel trung tâm(pixel_index). Nếu
khác 0 thì quay trở lại. Nếu bằng 0 thì kiểm tra nhãn các pixel lân cận
(pixel_nei_index) và gán pixel_cen_index=min(pixel_nei_index). Nếu
pixel_cen_index khác 0 thì dịch cửa sổ. Nếu bằng 0 thì pixel đó là thuộc đối
tượng chưa đánh nhãn. Ta tăng biến đếm đối tượng n_object thêm 1, đồng
thời gán pixel_cen_index = n_object. Sau đó quay trở lại dịch cửa sổ.

Với thuật toán này, ta sẽ thực hiện đánh nhãn đối tượng gồm các pixel có
liên kết 8 với nhau. Nhãn đối tượng được lưu vào một phần của thông tin về
pixel chứa trong RAM.

Các đặc trưng hình học của đối tượng

Sau khi ảnh đã được phân vùng và đánh nhãn thành công, ta thực hiện
việc xác định các đặc trưng của đối tượng.

Các đặc trưng hình học của đối tượng cần được xác định bao gồm :

-Diện tích: bằng số pixel của đối tượng :

n m
A   I (i, j ) trong đó I (i, j ) =1 hoặc 0;
i 1 j 1

-Chu vi đối tượng: bằng số pixel nằm trên biên đối tượng.

-Vị trí (tọa độ) của đối tượng, cũng là tọa độ trọng tâm vật thể,được tính
theo công thức :

1 n m
x   i.I (i, j );
A i 1 j 1
1 n n
y   j.I (i, j );
A i 1 j 1

27
www.ngohaibac.net

1.4. Một số giải pháp phần cứng cho hệ thống thị giác máy

Có thể thấy, các thuật toán xử lý ảnh số trong hệ thống thị giác máy đều

tương đối phức tạp, với khối lượng tính toán rất lớn (hàng trăm ngàn pixel).

Do đó, để thỏa mãn yêu cầu về tốc độ và hiệu suất xử lý, đòi hỏi những nền

phần cứng đủ mạnh với khả năng xử lý và tính thời gian thực cao.

Dưới đây là một số giải pháp phần cứng thường được sử dụng cho một hệ

thống xử lý ảnh số.

FPGA

Đây là giải pháp về phần cứng mà hay được sử dụng hiện nay. Tận dụng

đặc tính của FPGA là linh hoạt và tốc độ xử lý nhanh (cứng hoá các giải

thuật), đặc biệt với khả năng xử lý song song, FPGA rất phù hợp với các bài

toán xử lý ảnh đòi hỏi một khối lượng tính toán phức tạp.

DSP Processor

DSP Processor được giới thiệu đầu tiên vào những năm 1978, 1979 bởi

Intel, Bell Labs. Các bộ xử lý DSP có những đặc tính nổi bật như sau:

 Thích hợp cho các quá trình cần xử lý theo thời gian thực

 Hiệu năng được tối ưu với dữ liệu dạng luồng

 Chương trình và dữ liệu được bố chí riêng biệt (kiến trúc Harvard)

 Tích hợp các chỉ thị lệnh đặc biệt SIMD (Single Instruction, Multiple

Data)

 Không hỗ trợ đa nhiệm

 Tương tác trực tiếp với bộ nhớ của thiết bị

 Tích hợp sẵn ADC và DAC


28
www.ngohaibac.net

DSP Processor ngày nay đã được tích hợp nhiều thành phần khác nhau,

làm tăng khả năng linh hoạt và tốc độ xử lý. Đặc biệt các DSP Processor rất

thích hợp cho những nhu cầu cần tính toán nhanh, xử lý số thực. Đặc biệt một

số còn có sẵn những chỉ thị lệnh giúp cho việc tính toán ma trận, tích chập

hay thậm chí các phép biến đổi DCT trong quá tình nén ảnh. Với những ưu

điểm đó DSP Processor được dùng trong nhiều thiết bị xử lý ảnh chuyên

nghiệp.

Mainboard, laptop

Đây là một trong những phương pháp đơn giản nhất. Có thể tận dụng các

mainboard máy tính hay thậm chí các máy tính xách tay với chức năng là một

đơn vị xử lý ảnh, và đưa ra quyết định. Với việc kết nối một camera hay

webcam ta hoàn toàn chủ động trong quá trình nhận/xử lý ảnh. Các giao tiếp

ngoại vi phổ biến như UART, Parallel, USB hay Keyboard.

Việc sử dụng mainboard, laptop sẽ có những ưu/ nhược điểm sau:

 Ưu điểm

 Có tốc độ xử lý cao

 Dễ dàng lập trình, kiểm lỗi

 Hệ điều hành quen thuộc (windows/linux)

 Các công cụ lập trình/biên dịch phổ biến (MSVC, gcc)

 Nhược điểm

 Kích thước, khối lượng lớn

 Dễ hư hỏng do va đập hay các tác nhân khác

 Giá thành rất đắt (>600$)

 Có quá nhiều thành phần không sử dụng đến

29
www.ngohaibac.net

 Chỉ có thể giao tiếp với ngoại vi thông qua các chuẩn phổ biến như

UART, USB

Ngoài các giải pháp trên, còn nhiều những giải pháp phần cứng khác cho

một hệ thống xử lý ảnh số như : Main công nghiệp, Single Board

Computer(SBC) sử dụng Single on Chip (SoC)....

Trong đồ án này, chúng em sử dụng giải pháp là vi mạch khả trình FPGA

để xây dựng toàn bộ hệ thống xử lý ảnh và điều khiển trung tâm. Mục đích

của đề tài là xây dựng một hệ thống xử lý ảnh trên nên FPGA, trong đó thực

hiện được một số thuật toán cơ bản như lọc, phân ngưỡng, phân vùng, xử lý

đồng cấu ảnh nhị phân, đánh nhãn đối tượng và cuối cùng là tính toán các

đặc trưng của đối tượng. (vị trí, diện tích...)

Hệ thống được xây dựng với mục đích thử nghiệm những thuật toán xử

lý ảnh số đã được nghiên cứu, sử dụng công nghệ FPGA, đồng thời tạo nền

tảng cho hệ thống thị giác máy tính với những thuật toán xử lý cao hơn.

30
www.ngohaibac.net

Phần 2 : Khái quát về FPGA và mạch phát triển XST 3S1000 của
XESS

2.1. Giới thiệu chung về FPGA và ngôn ngữ VHDL

2.1.1. Khái niệm và ứng dụng FPGA

Khái niệm

FPGA (Field Programable Gate Arrays) là một thiết bị bán dẫn bao gồm
các khối logic lập trình được gọi là "Logic Block", và các kết nối khả trình. Các
khối logic có thể được lập trình để thực hiện các chức năng của các khối logic
cơ bản như AND, XOR, hoặc các chức năng kết hợp phức tạp hơn như
decoder hoặc các phép tính toán học. Trong hầu hết các kiến trúc FPGA, các
khối logic cũng bao gồm cả các phần tử nhớ. Đó có thể là các Flip-Flop hoặc
những bộ nhớ hoàn chỉnh hơn.

Các kết nối khả trình cho phép các khối logic có thể nối với nhau theo thiết
kế của người xây dựng hệ thống, giống như một bảng mạch khả trình.

Một kiến trúc khác tương tự nhưng đơn giản hơn FPGA, là CPLD (
Complex Programable Logic Device ). Thực chất đây là tiền thân của FPGA.
Năm 1984, Ross Freeman, một đồng sáng lập của Xilinx đã phát minh ra
FPGA. FPGA và CPLC đều bao gồm một số lượng khá lớn các phần tử logic
khả trình. Mật độ cổng logic (Logic Gate) của CPLD nằm trong khoản từ vài
nghìn cho đến 10 nghìn cổng. Trong khi đó FPGA thông thường chứa từ 10
nghìn cho đến vài triệu cổng.

Khác biệt cơ bản giữa FPGA và CPLD là ở kiến trúc của chúng. CPLD có
một kiến trúc bị giới hạn trong một hoặc một vài dãy logic khả trình cùng với
một lượng nhỏ thanh ghi định thời. Do đó nó kém linh hoạt hơn, nhưng lại có
ưu điểm là khả năng dự đoán trễ lớn hơn và tỉ lệ logic-kết nối cao hơn.

Ngược lại, trong kiến trúc của FPGA lại có sự trội hơn về số lượng kết nối.
Điều này làm cho nó trở nên linh hoạt hơn ( về số lượng thiết kế được thực

31
www.ngohaibac.net

thi bên trong) nhưng cũng đồng nghĩa với việc phức tạp hơn trong quá trình
thiết kế.

Một khác biệt đáng chú ý nữa giữa FPGA và CPLD là : hầu hết các FPGA
hiện nay đều bao có các phần tử chức năng tích hợp cao hơn ( như bộ cộng,
nhân tích hợp) , và bộ nhớ tích hợp.

Một số kiến trúc FPGA hiện nay còn có thể cho phép cấu hình lại từng
phần (partial re-configuration). Có nghĩa là cho phép một phần của thiết kế
được cấu hình lại trong khi những thiết kế khác vẫn tiếp tục hoạt động.

Một ưu điểm khác của FPGA, là người thiết kế có thể tích hợp vào đó các
bộ xử lý mềm (soft processor) hay vi xử lý tích hợp (embedded processor).
Các vi xử lý này có thể được thiết kế như các khối logic thông thường, mà mã
nguồn do các hãng cung cấp, thực thi các lệnh theo chương trình được nạp
riêng biệt, và có các ngoại vi được thiết kế linh động ( khối giao tiếp UART,
vào/ra đa chức năng GPIO, ethernet...). Các vi xử lý này cũng có thể được lập
trình lại (re-configurable computing) ngay trong khi đang chạy.

Ứng dụng.

FPGA được ứng dụng điển hình trong các lĩnh vực như: xử lý tín hiệu số,
xử lý ảnh, thị giác máy, nhận dạng giọng nói, mã hóa, mô phỏng
(emulation)...FPGA đặc biệt mạnh trong các lĩnh vực hoặc ứng dụng mà kiến
trúc của nó yêu cầu một lượng rất lớn xử lý song song, đặc biết là mã hóa và
giải mã. FPGA cũng được sử dụng trong những ứng dụng cần thực thi các
thuật toán như FFT, nhân chập (convolution), thay thế cho vi xử lý.

Hiện nay công nghệ FPGA đang được sản xuất và hỗ trợ phần mềm bởi
các hãng như :Xilinx, Altera, Actel, Atmel... Trong đó Xilinx và Altera là 2
hãng hàng đầu. Xilinx cung cấp phần mềm miễn phí trên nền Windows,
Linux, trong khi Altera cung cấp những công cụ miễn phí trên nền Windows,
Linux và Solaris.

2.1.2. Kiến trúc FPGA

2.1.2.1. Kiến trúc chung FPGA


32
www.ngohaibac.net

Hình 2.1 : Kiến trúc chung của FPGA

Mỗi nhà sản xuất FPGA có riêng cấu trúc FPGA, nhưng nhìn chung cấu
trúc được thể hiện giống như trong hình bên trên. Cấu trúc FPGA bao gồm có
configuration logic blocks (CLBs), configurable I/O blocks (IOB), và
programmable interconnect. Và tất nhiên, chúng có mạch clock để truyền tín
hiệu clock tới các logic block, và thêm vào đó có các logic resources như
ALUs, memory và có thể có cả decoders. Các phần tử lập trình được của
FPGA có 2 dạng cơ bản là các RAM tĩnh (Static RAM) và anti-fuses.

Configurable Logic Blocks (CLBs)

Configurable Logic Blocks (CLBs) bao gồm các Look-Up Tables (LUTs) rất
linh động có chức năng thực thi các logic và các phần tử nhớ dùng như là các
flip-flop hoặc các chốt (latch). CLB thực hiện phần lớn các chức năng logic
như là lưu trữ dữ liệu,..

33
www.ngohaibac.net

Hình 2.2 : Một Logic Block điển hình

Configurable I/O Blocks

Input/Output Blocks (IOBs) điều khiển dòng dữ liệu giữa các chân vào ra
I/O và các logic bên trong của FPGA. Nó bao gồm có các bộ đệm vào và ra
với 3 trạng thái và điều khiển ngõ ra dạng open collector. Phần lớn là có trở
kéo lên ở ngõ ra và thỉnh thoảng lại có trở kéo xuống.IOBs hỗ trợ luồng dữ
liệu 2 chiều (bidirectional data flow) và hoạt động logic 3 trạng thái (3 state).
Hỗ trợ phần lớn các chuẩn tín hiệu, bao gồm một vài chuẩn tốc độ cao, như
Double Data-Rate (DDR).

Hình 2.3 : Configurable Logic Blocks

Programmable Interconnect

34
www.ngohaibac.net

Interconnect ở FPGA khác xa so với ở CPLD, tuy nhiên lại giống với của
gate array ASIC. Có một line dài được dùng để nối các CLBs quan trọng mà
chúng lại ở cách xa nhau mà không gây ra quá nhiều trễ. Chúng có thể được
dùng như là các bus ở trong chip. Có các line ngắn được dùng để liên kết các
CLBs riêng rẽ nhưng đặt gần nhau. Và cũng thường có vài ma trận chuyển
đổi (switch matrices), giống như trong CPLD, nối giữa các line dài và ngắn lại
với nhau theo một số cách đặc biệt. Các chuyển đổi lập trình được
(Programmable switches) bên trong chip cho phép kết nối giữa CLBs tới các
interconnect line và giữa interconnect line với các line khác và với switch
matrix. Các bộ đệm 3 trạng thái được dùng để kết nối phần lớn các CLBs với
các line dài (long line), tạo nên các bus. Các long line đặc biệt, gọi là các line
clock toàn cục (global clock lines), được thiết kế đặc biệt cho trở kháng thấp
và nhờ đó mà thời gian lan truyền nhanh hơn. Chúng được kết nối với các bộ
đệm clock và với mỗi phần tử được clock trong mỗi CLB.Đó là cách mà clock
có thể phân phối bên trong FPGA.

Hình 2.4 : Programmable Interconnect

Mạch đồng hồ (Clock Circuitry )

Các khối vào ra với bộ đệm clock high drive gọi là các clock driver,nằm rải
rác xung quanh chip. Các bộ đệm này được nối với các chân clock vào và lái

35
www.ngohaibac.net

các tín hiệu clock vào các đường clock toàn cục (global clock line) như mô tả
ở bên trên. Các đường clock được thiết kế sao cho thời gian thời gian lệch nhỏ
nhất và thời gian lan truyền nhanh. Thiết kế đồng bộ là yêu cầu bắt buộc với
FPGA, từ khi độ lệch tuyệt đối và trễ không được bảo đảm. Chỉ khi dùng các
tín hiệu clock từ các bộ đệm clock thì thời gian trễ tương đối và thời gian lệch
mới được đảm bảo.

2.1.2.2. So sánh giữa cấu trúc nhỏ và cấu trúc lớn

FPGA có cấu trúc nhỏ giống như các mảng cổng của hệ ASIC với các CLBs
chỉ bao gồm các phần tử cơ bản rất nhỏ như các cổng NAND, cổng NOR, …
Các nhà lý luận cho rằng các phần tử nhỏ có thể nói với nhau tạo lên các chức
năng lớn hơn mà không tốn nhiều các phần tử logic. Trong các FPGA có cấu
trúc lớn, các CLB có thể bao gồm 2 hoặc nhiều flip-flop, các thiết kế mà không
cần nhiều flip-flop sẽ khiến cho nhiều flip-flop không được dùng đến. Tiếc
rằng, các cấu trúc nhỏ lại yêu cầu khá nhiều nguồn kết nối (routing resource),
dẫn đến tăng không gian và thêm vào một lượng lớn trễ mà không thể bù lại
để có hiệu quả hơn.

2.1.2.3. So sánh giữa SDRAM Programming và Anti-fuse programming

Có 2 cách để lập trình FPGA. Cách đầu tiên là SDRAM Programming, bao
gồm một vài bit Static RAM cho mỗi phần tử lập trình. Ghi một bit với giá trị
0 sẽ ngắt switch, trong khi ghi giá trị 1 sẽ đóng switch. Cách còn lại là anti-
fuse bao gồm các cấu trúc rất nhỏ, không giống như các cầu chì thông
thường, bình thường chúng không tạo ra một kết nối nào cả. Một dòng điện
có cường độ nhất định trong khi lập trình thiết bị sẽ dẫn đến việc hai bên của
anti-fuse kết nối với nhau.

Thuận lợi của cấu trúc FPGA dựa trên SRAM là chúng dùng một quá trình
sản xuất chuẩn mà ở đó các kế hoạch sản xuất chip là gần như giống nhau và
luôn luôn được tối ưu cho khả năng hoạt động. Từ khi mà SRAM có thể lập
trình lại được thì FPGA có thể lập trình lại bất cứ khi nào muốn, thận chí
ngay cả khi chúng đang ở trong hệ thống, đơn giản như là ghi vào SRAM
thông thường. Chúng có nhược điểm là vùng nhớ volatile nên một vấn đề về

36
www.ngohaibac.net

nguồn có thể thay đổi nội dung của RAM. Các thiết bị dựa trên SDRAM cũng
có thời gian trễ đường truyền lớn.

Thuận lợi của cấu trúc FPGA dựa trên anti-fuse là chúng là non-volatile và
các trễ khi nối dây sẽ rất nhỏ vì thế nên chúng có khuynh hướng nhanh hơn.
Nhược điểm là chúng yêu cầu một bộ lập trình bên ngoài để lập trình và mỗi
khi lập trình xong thì không thể thay đổi được.

2.1.2.4. Cấu trúc FPGA của Spartan 3

Cấu trúc tổng quan của Spartan 3 gồm có 5 thành phần có chức năng khả
trình cơ bản sau:

 Configurable Logic Blocks (CLBs) bao gồm các Look-Up Tables (LUTs)
rất linh động có chức năng thực thi các logic và các phần tử nhớ dùng như là
các flip-flop hoặc các chốt (latch). CLB thực hiện phần lớn các chức năng logic
như là lưu trữ dữ liệu,..
 Input/Output Blocks (IOBs) điều khiển dòng dữ liệu giữa các chân vào
ra I/O và các logic bên trong của FPGA. IOBs hỗ trợ luồng dữ liệu 2 chiều
(bidirectional data flow) và hoạt động logic 3 trạng thái (3 state). Hỗ trợ phần
lớn các chuẩn tín hiệu, bao gồm một vài chuẩn tốc độ cao, như Double Data-
Rate (DDR).
 Block RAM cho phép lưu trữ dữ liệu dưới dạng các khối (block) dual-
port 18-Kbit.
 Multiplier Blocks cho phép 2 số nhị phân 18bit làm đầu vào và dễ dàng
tính toán tích của chúng.
 Digital Clock Manager (DCM) Blocks cung cấp khả năng tự xác định
xung clock, là giải pháp số hoàn chỉnh cho các tín hiệu clock phân phối, trễ,
nhân, chia và dịch bit.

Các phần tử này được tổ chức như trong hình sau:

37
www.ngohaibac.net

Hình 2.5 : Cấu trúc các thành phần của Spartan 3A

Từ hình vẽ ta thấy, các IOBs bao quanh các mảng CLBs, riêng Spartan-3E
chỉ có một vòng các IOBs. Mỗi cột block RAM bao gồm một vài block RAM
18-Kbit, mỗi block RAM lại gắn liền với một multiplier dành riêng. Các DCM
được đặt ở các vị trí: 2 DCM phía trên và 2 cái phía dưới của thiết bị, và đối
với các device lớn hơn thì có thêm các DCM ở phía bên cạnh.

Đặc điểm chung mạng Spartan-3 là kết nối liên thông giữa 5 phần tử cơ
bản này, và truyền tín hiệu giữa chúng. Mỗi thành phần chức năng này có
một switch matrix dành riêng để cho phép chọn lựa kết nối cho việc đi dây
trong FPGA.

2.1.3. Trình tự thiết kế một chip

Trình tự thiết kế một hệ thống trên nền FPGA bao gồm các bước sau:

38
www.ngohaibac.net

Hình 2.6. Design Flow

Ghi các đặc điểm kĩ thuật

Tầm quan trọng của các đặc điểm kĩ thuật (specification) không thể phóng
đại quá. Nó chỉ tuyệt đối cần đặc biệt khi là một hướng dẫn để chọn công
nghệ phù hợp và tạo những yêu cầu của bạn cho các nhà sản xuất chip. Và
các đặc điểm kĩ thuật cho phép mỗi kĩ sư hiểu về thiết kế hệ thống chung và
công việc của họ trong hệ thống đó là gì. Và nó cũng cho phép các kĩ sư thiết
kế giao diện đúng cho một loạt các phần của chip. Các đặc điểm kĩ thuật cũng
giúp tiết kiệm thời gian và sự hiểu lầm. Sẽ không làm gì được nếu không có
các bảng ghi các đặc điểm kĩ thuật.

Chi tiết kĩ thuật nên bao gồm các thông tin sau đây:

 Sơ đồ khối bên ngoài để chỉ ra chip đó được đặt vào trong hệ thống
như thế nào.
 Sơ đồ khối bên trong chỉ rõ mỗi chức năng của các thành phần.

39
www.ngohaibac.net

 Miêu tả các chân vào ra bao gồm khả năng lái đầu ra, mức ngưỡng
đầu vào.
 Thời gian ước lượng bao gồm thời gian thiết lập và giữ ở các chân vào,
thời gian lan truyền ra các cổng ra và thời gian chu kì clock.
 Đếm xấp xỉ số gate
 Dạng đóng gói
 Tiêu thụ nguồn
 Giá cả
 Các thủ tục để kiểm tra

Một điều rất quan trọng nữa là đó là các tài liệu trực tuyến. Rất nhiều
phần sẽ được dự đoán tốt nhất ở trong đó, nhưng sẽ thay đổi trong quá trình
chip được thiết kế.

Chọn công nghệ

Mỗi khi một chi tiết miêu tả kĩ thuật được xuất bản, nó có thể được dùng
để chọn nhà sản xuất chip tốt nhất với công nghệ và cấu trúc giá cả là tốt nhất
đáp ứng được yêu cầu của bạn.

Chọn một hướng tiếp cận thiết kế

Tại thời điểm này bạn phải quyết định cách thực hiện thiết kế mà bạn
mong muốn. Đối với các chip nhỏ thì cách tiếp cận bằng sơ đồ nguyên lý
(schematic) thường được chọn, đặc biệt là khi các kĩ sư thiết kế đã quen thuộc
với các công cụ này. Thế nhưng đối với các thiết kế lớn hơn, nguôn ngữ miêu
tả phần cứng (hardware description language) HDL như Verilog và VHDL
được dùng bởi khả năng mềm dẻo, dễ đọc, dễ chuyển giao. Khi dùng ngôn
ngữ cấp cao, phần mềm tổng hợp (synthesis software) sẽ được yêu cầu tổng
hợp (synthesize) thiết kế. Có nghĩa rằng phần mềm này sẽ tạo ra các cổng ở
cấp thấp từ miêu tả ở cấp cao hơn.

Chọn công cụ tổng hợp

Tại điểm này, bạn phải quyết định chọn phần mềm tổng hợp nào sẽ được
dùng nếu bạn có kế hoạch thiết kế FPGA với HDL. Điều đó rất quan trọng kể

40
www.ngohaibac.net

từ khi mỗi công cụ tổng hợp được khuyên dùng và sự ủy thác của cách thiết
kế phần cứng nên nó có thể hoạt động tổng hợp đúng hơn.

Thiết kế chip

Có một số cách để thiết kế chip

 Top-down design (Thiết kế từ trên xuống dưới)


 Macros
 Synchronous design
 Protect against metastability
 Avoid floating nodes
 Avoid bus contention

Mô phỏng – cái nhìn tổng quan về thiết kế

Mô phỏng là một quá trình liên tục khi mà thiết kế xong. Từng phần nhỏ
của thiết kế nên được mô phỏng trước khi kết hợp chúng thành các phần lớn
hơn. Điều này rất là cần thiết và sự mô phỏng theo thứ tự sẽ kiểm tra chức
năng hoạt động đúng của từng phần.

Mỗi khi thiết kế và mô phỏng hoàn thành, dẫn đến một cái nhìn tổng quan
khác về thiết kế vì thế thiết kế có thể được kiểm tra lại. Thật là quan trọng để
nhận các kết quả khác cho phép nhìn qua các mô phỏng và chắc chắn rằng
không có điều gì bị quên và không sự tổn hao nào gặp phải. Đó là một trong
những khái quát quan trọng nhất bởi vì khi mô phỏng đúng và thành công
thì bạn sẽ biết được chip của bạn sẽ hoạt động đúng trong hệ thống.

Tổng hợp

Nếu thiết kế dùng HDL, bước tiếp theo là tổng hợp chip, bao gồm việc
dùng phần mềm tổng hợp để chuyển đổi thật tối ưu từ thiết kế mức RTL
(register transfer level) sang thiết kế mức gate mà có thể gắn vào các khối
logic trong FPGA.

Place and Route

41
www.ngohaibac.net

Bước tiếp theo là sắp đặt chip, kết quả trong việc thiết kế vật lý cho chip
thực. Điều này bao gồm các công cụ của nhà sản xuất đẻ tối ưu lập trình cho
chip để thực hiện thiết kế. Sau đó, thiết kế được lập trình vào cho chip.

Mô phỏng lại – tổng quan cuối cùng

Sau khi sắp đặt xong, thì chip phải được mô phỏng lại với các con số về
thời gian tạo ra bởi các layout thực tế. Nếu mọi thứ đều tốt đến thời điểm
này, thì một kết quả mô phỏng mới sẽ đúng với các kết quả dự đoán.

Kiểm tra

Đối với các thiết bị lập trình được, đơn giản là lập trình thiết bị đó và ngay
lập tức có mẫu thử. Sau đó bạn có trách nhiệm đặt mấu thử này vào trong hệ
thống và xem xem hệ thống có làm việc đúng không. Nếu bạn làm lần lượt
các bước ở bên trên thì đa phần là hệ thống sẽ hoạt động đúng chỉ với một
vài lỗi rất nhỏ. Các lỗi này thường được làm việc xung quanh với việc thay
đổi hệ thống và thay đổi phần mềm hệ thống. Các lỗi này cần được kiểm tra
và trích dẫn lại để có thể được sửa chữa trong phiên bản tiếp theo của chip.
Kiểm tra hệ thống nhúng là cần thiết tại thời điểm này để đưa ra kết quả rằng
mọi phần của hệ thống đều hoạt động đúng khi kết hợp với nhau.

Khi các chíp được đưa vào sản xuất, rất cần thiết có một vài kiểm tra để có
một vài kiểm tra burn-in trong hệ thống để test thường xuyên hệ thống qua
thời gian dài. Nếu một chip được thiết kế đúng, thì nó chỉ bị hỏng khi lỗi điện
học hoặc lỗi cơ học sẽ thường xuyên xảy ra với loại kiểm tra khắc nghiệt này.

2.1.4. Ngôn ngữ mô tả phần cứng VHDL

VHDL là một ngôn ngữ mô tả phần cứng (hardware description


language), mô tả hành vi của mạch điện hoặc hệ thống, từ đó mạch điện vật
lý hoăc hệ thống có thể được thực thi.

VHDL là viết tắt của VHSIC Hardware Description Language. Bản thân
VHSIC là viết tắt của Very High Speed Integrated Circuits (mạch tích hợp tốc
độ cao), lần đầu tiên được sáng lập bởi United State Department of Defense
trong những năm 80, sau đó tạo ra VHDL. Phiên bản đầu tiên là VHDL 87,
42
www.ngohaibac.net

lần nâng cấp sau đó có tên là VHDL 93. VHDL là ngôn ngữ mô tả phần cứng
nguyên gốc đầu tiên được chuẩn hóa bởi Institue of Electrical and Electronics
Engineers (IEEE), tới chuẩn IEEE 1076. Trong IEEE 1164, có một chuẩn được
thêm vào là giới thiệu hệ thống logic đa giá trị (multi-valued logic system).

Động cơ thúc đẩy cơ bản khi dùng VHDL (hay dùng Verilog) là VHDL là
một ngôn ngữ độc lập chuẩn của các nhà công nghệ, các nhà phân phối do đó
chúng có khả năng portable và kế thừa cao (reusable). Hai ứng dụng trực tiếp
chính của VHDL là trong mảng các thiết bị logic lập trình được (
Programmable Logic Devices) (bao gồm CPLDs – Complex Programmable
Logic Devices và FPGAs – Field Programmable Gate Arrays). Mỗi khi mã
nguồn VHDL được viết, chúng có thể được dùng để thực thi mạch điện trong
các thiết bị lập trình được (từ Altera, Xilinx, Almel, ..) hoặc có thể gửi đến các
xưởng chế tạo các chíp ASIC. Hiện này, rất nhiều các chip thương mại phức
tạp (ví dụ như các microcontrollers ) được thiết kế dựa trên cách tiếp cận này.

Một điều chú ý về VHDL là trái ngược với các chương trình máy tính
thông thường được thực hiện tuần tự thì các câu lệnh được thực hiện song
song (concurrent). Vì lí do đó, nên VHDL thường được coi là một mã nguồn
hơn là một chương trình. Trong VHDL chỉ có các câu lệnh đặt trong
PROCESS, FUNCTION, hay PROCEDURE được thực thi tuần tự.

Trình tự thiết kế một chíp dựa trên VHDL

Một trong những tiện ích lớn của VHDL là cho phép tổng hợp mạch điện
hoặc hệ thống trong thiết bị khả lập trình (programmable devide) (PLD hoặc
FPGA) hoặc trong một hệ ASIC. Các bước thực hiện một project được tổng
kết như trong hình dưới:

43
www.ngohaibac.net

Hình 2.7: Qui trình thiết kế chip dựa trên VHDL

Chúng ta bắt đầu thiết kế bằng cách viết mã VHDL, được ghi trong các file
với đuôi mở rộng .vhd và tên giống như tên của ENTITY (thực thể). Bước
đầu tiên trong quá trình synthesis là biên dịch. Biên dịch là một quá trình
chuyển đổi giữa ngôn ngữ VHDL bậc cao tại Register Transfer Level (RTL)
sang netlist ở mức gate level. Bước thứ 2 là tối ưu thực hiện trên gate level net
list tối ưu về tốc độ hoặc cho diện tích. Cuối cùng là môt phần mềm place and
route sẽ tạo ra một physical layout cho các chíp PLD/FPGA hoặc tạo ra các
mặt nạ cho một hệ ASIC.

2.2. Giới thiệu mạch phát triển XST 3S 1000 của hãng XESS

Trang chủ của XESS Corp. : http://www.xess.com

X Engineering Software Systems Corporation (XESS) là công ty tại phía


Bắc Carolina (Mỹ) được thành lập từ năm 1990. XESS Corp. đưa ra những
công cụ phát triển logic lập trình được với giá phải chăng và các hướng dẫn
cho người dùng được viết bởi các kĩ sư, các nhà nghiên cứu, nhà thiết kế và
ngay cả của sinh viên.

44
www.ngohaibac.net

XESS giới thiệu 2 board chuyên dùng cho xử lý ảnh và audio:

2.2.1. XSA-3S1000

Hình 2.8 : KIT XSA-3S1000

KIT FPGA này bao gồm có 32 Mbyte DRAM đồng bộ và 2 Mbyte Flash để
xây dựng hệ thống vi điều khiển RISC hoàn thiện dựa trên phần mềm (soft-
core).

Có thể có tới 4 bitstream được lưu trữ trong Flash và ta có thể dùng switch
để lựa chọn bitstream nào được cấu hình cho FPGA khi áp đặt nguồn điện
vào KIT. Hoặc chúng ta có thể download trực tiếp vào FPGA nhờ cổng song
song (parallel port) dùng công cụ XSTOOLS ( trong bộ công cụ của XESS).
Giao diện CPLD trên XSA-3S1000 cũng hỗ trợ download dùng XILINX
iMPACT và circuit test/debug với ChipScope dùng cáp download song song
của Xilinx.

45
www.ngohaibac.net

Bổ sung thêm vào các chip FPGA, SDRAM và Flash, có thêm cổng VGA có
thể hiển thị đồ họa với 512 màu. Thêm vào đó, còn có thêm prototyping
header đưa cho ta 65 chân I/O để xây dựng các giao diện với các ngoại vi
khác.

Hình 2.9. Sơ đồ cấu trúc của XSA-3S1000

2.2.2. XST-3.0 (XStend Board)

46
www.ngohaibac.net

Hình 2.10 : XST-3.0 Board

Xstend Board là mạch hỗ trợ cho XSA Board có thể truy nhập qua giao
diện prototype. Bo mạch này mở rộng khả năng của XSA Board trên một số
mặt:

 Các pushbuttons, DIP switches, LEDs, và protopying area rất có ích


cho các thí nghiệm ở phòng Lab.

 Mạch stereo và dual-chanel analog I/O dùng cho xử lý âm thanh kết


hợp với các thành phần DSP được synthesize với phần mềm CORE
generation của Xilinx.

 Video decoder (bộ giải mã video) cho phép số hóa các video dạng
NTSC/PAL/SECAM trong các ứng dụng xử lý ảnh.

 Giao diện Ethernet 10/100 làm cho XSA Board có khả năng truy nhập
TCP/IP và các dạng mạng khác.

 Giao diện USB 1.1 làm cho XSA Board như một ngoại vi USB dạng low-
speed hoặc full-speed với PC.
47
www.ngohaibac.net

 Giao diện RS-232 rất hữu ích khi XSA Board cần phải gửi thông tin qua
liên kết giao tiếp nổi tiếp với tốc độ thấp.

 Giao diện IDE cung cấp cho XSA Board khả năng truy cập vào ổ đĩa
cứng (hard disk) để lưu và phục hồi dữ liệu.

 Các module với chức năng khác có thể thêm vào trong XST Board nhờ
các doughterboard connector.

Như vậy, kết hợp giữa XSA-3S1000 và XST-3.0 cho ta một Board ứng dụng
xử lý video rất hiệu quả.

Hình 2.11 : XST-3S1000

Hỗ trợ kĩ thuật: XESS có một group xsboard-user là một mailing list, giải
đáp mọi thắc mắc về thiết kế phần cứng và hệ thống phần mềm khi dùng bo
mạch logic khả trình của XESS Corp. Ngoài ra, các phần mềm và module
phát triển khá đầy đủ.

48
www.ngohaibac.net

2.3. Giới thiệu hãng Xilinx và các công cụ lập trình:

Hãng Xilinx

Xilinx là nhà phát triển hàng đầu hiện nay trong lĩnh vực chip khả trình.
Được thành lập bởi Ross Freeman, Bernie Vonderschmitt, và Jim Barnett, và
có trụ sở tại thung lũng Silicon. Trụ sở chính hiện nay ở San Jose , California.
Là thành viên của nhóm 100 công ti hàng đầu thế giới hiện nay do tạp chí
Fortune bình chọn.

Xilinx là nhà phát triển FPGA, CPLD được sử dụng rộng rãi trong những
ứng dụng truyền thông, tự động hóa, mật mã...và các lĩnh vực khác. Các sản
phẩm phần cứng của Xilin gồm có các dòng CPLD : CoolRunner, các họ
FPGA như Spartans, Virtex...

Xilinx còn cung cấp các phần mềm hỗ trợ lập trình FPGA, CPLD như ISE,
EDK, LogicCore, System Generator. Các công cụ này hỗ trợ rất nhiều cho quá
trình lập trình FPGA, giúp giảm thời gian và công sức thiết kế. Các phiên bản
phần mềm trên được nâng cấp thường xuyên. (Hiện giờ đã có phiên bản 10.1
cho các ứng dụng).

ISE 9.2

Là công cụ xây dựng và lập trình FPGA. ISE 9.2 thực sự là một môi trường
tổng hợp và thực thi toàn diện cho các chip khả trình của Xilinx. Với ISE9.2,
người thiết kế có thể lập trình, gỡ rối, mô phỏng, dịch và nạp chương trình
một cách nhanh chóng và dễ dàng. Người thiết kế cũng có thể thiết kế hệ
thống của mình theo nhiều cách khác nhau : với mã vhd, với sơ đồ RTL, hoặc
với sơ đồ trạng thái (state machine)

LogicCore 9.2

LogicCore 9.2 là thư viện của ISE 9.2, trong đó chứa các mã nguồn cho các
khối logic có thể được sử dụng cho việc xây dựng những hệ thống khác nhau.
Với Logic Core, người thiết kế có thể giảm đi rất nhiều công sức thiết kế, bỏ
qua việc xây dựng những thành phần đã có sẵn và tập trung vào việc xây
dựng hệ thống, đồng thời cũng tối ưu hóa các thiết kế của mình.
49
www.ngohaibac.net

EDK 9.2

Là công cụ để xây dựng hệ thống có các vi xử lý nhúng trong FPGA như


MicroBlaze (cho tất cả các họ FPGA ) và Power PC ( chỉ cho họ Virtex).

EDK 9.2 không chỉ giúp tạo ra các vi xử lý nhúng mà còn hỗ trợ thiết kế
các ngoại vi, giao diện cho chúng, với một thư viện ngoại vi đồ sộ, cho phép
vi xử lý thực thi bất cứ một nhiệm vụ nào mà các vi xử lý thông thường có
thể thực hiện được : như giao tiếp UART, Ethernet, các bộ nhớ RAM, ROM,
các I/O,....Các thiết kế vi xử lý nhúng cũng được tối ưu hóa. Ngoài ra EDK
cũng có công cụ mô phỏng rất mạnh.

System Generator 9.2

System Generator (sysgen)là công cụ phát triển hệ thống cho FPGA, cho
phép thiết kế hệ thống ở dạng các khối, và hỗ trợ mô phỏng, debug, tạo code
để nạp vào FPGA hoặc kết hợp vào những ứng dụng lớn hơn.

Sysgen được xây dựng như một Block Set của Simulink trong Matlab. Do
đó, sysgen thừa hưởng tất cả các ưu điểm của Simulink trong việc xây dựng
hệ thống và mô phỏng. Sysgen còn sử dụng thư viện của Logic Core để xây
dựng các block của mình. Trong thư viện của Sysgen có tất cả các khối thực
hiện các chức năng từ cơ bản như cộng, trừ, nhân, các khối logic,...cho đến
những thiết kế phức tạp hơn như các DSPs, bộ lọc số, nhân chập, UART..., các
bộ nhớ tích hợp: Single Port, DualPort Ram, FIFOs, các thanh ghi...

Sysgen còn cho phép người thiết kế tạo ra các khối để thực hiện những
nhiệm vụ riêng bằng khối Black Box, tại đây người thiết kế sẽ tạo ra các entity
và cài mã của nó vào Black Box để tạo ra các thiết kế riêng của mình.

Những thiết kế của Sysgen có thể được dịch ra nhiều kiểu dữ liệu, có thể
thành file bit để nạp ngay vào phần cứng, hoặc thành các thiết kế để ghép
vào một hệ thống lớn hơn.Với việc kết hợp với Mathwork để xây dựng
Sysgen, Xilinx đã làm cho việc thiết kế hệ thống trên nền FPGA của mình trở
nên thuận tiện và đơn giản hơn rất nhiều đối với người làm kĩ thuật. Trong
đồ án này, chúng em đã sử dụng Sysgen để xây dựng toàn bộ phần thuật
toán xử lý ảnh số cho thiết kế của mình.
50
www.ngohaibac.net

Phần 3 : Xây dựng hệ thống xử lí ảnh động trên nền FPGA

Yêu cầu hệ thống :

Trong phần này, chúng em trình bày chi tiết việc thực thi hệ thống cảm
biến thị giác trên nền FPGA. Dữ liệu ảnh thu được là của một tập hợp các đối
tượng tách rời nhau trên nền trắng. Nhiệm vụ của hệ thống là thu thập ảnh
và xử lý bằng các thuật toán xử lý đã nêu, nhằm loại bỏ nhiễu, tách các đối
tượng ra khỏi nền, gán nhãn cho đối tượng, đồng thời xác định các đặc trưng
cơ bản của đối tượng cho quá trình xử lý cao hơn hoặc cho việc điều khiển
tay máy thao tác với đối tượng.

Đồng thời, hệ thống cũng có nhiệm vụ giao tiếp với bộ xử lý trung tâm (
máy tính PC ) để truyền thông tin được xử lý ( số đối tượng, kích thước, vị
trí, ...của đối tượng ) và nhận tín hiệu điều khiển, trong khi điều khiển giao
tiếp VGA để hiển thị hình ảnh.

Hình 3.1 : Một ảnh cần được xử lý.

3.1. Sơ đồ cấu trúc hệ thống xử lí ảnh động

51
www.ngohaibac.net

Hình 3.2 : Sơ đồ chung của hệ thống

Trên đây là sơ đồ cấu trúc của hệ thống xử lý ảnh số. Hệ thống gồm có 3
phần chính sau:

52
www.ngohaibac.net

 Khối thu thập dữ liệu từ Camera và ghi vào SDRAM: dữ liệu từ video
decoder được xử lý ở khối Framegrabber chỉ lấy dữ liệu luminance và ghi
vào FIFO, sau đó được ghi vào SDRAM. Chip Video decoder được kích hoạt
nhờ tín hiệu điều khiển qua chuẩn I2C trên PC qua cổng Parallel Port (LPT).

 Khối xử lý ảnh: đọc dữ liệu từ SDRAM vào FIFO, xử lý và sau đó lại


ghi vào FIFO và ghi vào SDRAM qua dual port, SDRAM Controller. Chọn
thuật toán và kích hoạt từng module xử lý từng thuật toán đó được kích hoạt
từ bên ngoài qua các nút bấm (button) và các khóa chuyển (switch).

 Khối hiển thị ảnh lên VGA: hiển thị các pixel của ảnh trong SDRAM lên
màn hình máy tính CRT.

3.2. Xây dựng hệ thống thu thập, lưu trữ, xử lý và hiển thị ảnh

3.2.1. Thành phần thu thập ảnh Framegrabber

Nhiệm vụ: nhiệm vụ cơ bản của khối Framegrabber là đồng bộ với chip
Video Decoder để đọc các pixel và ghi vào FIFO.

Phân tích cách thực thi

Framegrabber dùng một Finite State Machine để giải mã và chốt thành


phần luminance (chỉ lấy các thành phần độ xám grayscale) từ pixel stream
của ITU-R BT.656 4:2:2 ( định dạng xuất ra mặc định của video decoder).

Pixel stream được định dạng như sau:

Hình 3.3: Pixel stream waveform

Đầu tiên là các byte đánh dấu bắt đầu một frame (FF-00-00), tiếp theo là
byte đồng bộ (embedded sync byte) ES. Theo sau là 1440 byte gồm: 720 giá trị
luminance (Y), 360 giá trị blue chromiance (Cb) và 360 giá trị red chrominace
(Cr) theo nhóm cứ một Cb và Cr thì có 2 giá trị Y: CbYnCrYn 1 .

53
www.ngohaibac.net

Sơ đồ cấu trúc của State machine như hình vẽ dưới đây:

Hình 3.4 : Framegrabber state machine

Từ hình vẽ ta thấy 3 trạng thái đầu: wait_for_embedded_sync,


wait_embedded_sync_1, wait_embedded_sync_2 dùng để kiểm tra 3 byte
đánh dấu đầu tiên (FF-00-00).

Tại trạng thái check_embedded_sync kiểm tra các tín hiệu đồng bộ gồm có
field id, field change và ghi byte đồng bộ vào FIFO để phục vụ cho việc ghi
dữ liệu vào FIFO và hiển thị VGA. Nếu có tín hiệu image_processing_start để
khởi động khối này thì tiếp tục chuyển sang các trạng thái tiếp theo để nhận
dữ liệu và ghi vào FIFO, còn không thì quay lại trạng thái ban đầu để kiểm
tra các byte đánh dấu của frame mới.

Sau khi đã đồng bộ xong thì liên tục thực hiện các trạng thái
grab_chromar và grab_luminance2. Dữ liệu lumincance được lấy ở trạng thái
grab_luminance2. Quá trình nhận dữ liệu kết thúc (tín hiệu done) xảy ra khi
trong các trạng thái này nhận được byte có giá trị 0xFF.

54
www.ngohaibac.net

Dữ liệu ghi vào FIFO bao gồm 16 bit có 2 bit đầu tiên là các bit đồng bộ:
field_id và field_change, theo sau là các bit 0 và byte luminance:

Pixel_in <= field_change & field_id & “000000” & luminance(7 downto 0)

3.2.2. Lưu dữ liệu từ Framegrabber vào SDRAM

Khối lưu dữ liệu này thực hiện rất đơn giản với State machine với 2 trạng
thái:

 Wait for pixel: chờ khi nào có pixel từ bộ đệm ghi Write Buffer, khi đó
chuyển sang trạng thái ghi pixel.

 Store pixel: Ghi pixel vào SDRAM qua SDRAM Controller

3.2.3. Các cơ chế ghi đọc SDRAM: SDRAM Controller, Dual Port SDRAM

SDRAM Controller

Đặc điểm: XSA Board synchronous DRAM (SDRAM) controller core chấp
nhận các yêu cầu đọc và ghi đơn giản từ phía host-side và tạo ra các dạng
sóng (timed waveform) cần thiết để thực hiện các hoạt động read, write với
SDRAM. Với chế độ đọc, ghi kiểu pipeline thì với một hàng của SDRAM có
thể không cần phải chốt sau mỗi chu kì đọc, vì thế tốc độ đọc và ghi có thể
gấp 10 lần so với cách đọc không pipeline từng pixel trong SDRAM ở các địa
chỉ không liền nhau. Bộ điều khiển cũng đảm nhiệm thực hiện refresh
SDRAM để giữ cho các dữ liệu không bị sai, và sẽ đặt SDRAM vào chế độ tự
làm tươi (self-refresh) nên dư liệu vẫn được giữ lại thậm chí khi bộ điều
khiển không hoạt động.

55
www.ngohaibac.net

Trong đồ án này, chúng em dùng read, write với chế độ pipeline.

Hình 3.5 : Pipelined Read Operation timing waveforms

Pipeline Read Operation

Trên đây là dạng sóng cho hoạt động đọc kiểu pipeline. Hoạt động đọc ở
chế độ pipeline được thực hiện bằng cách giữ cho tín hiệu rd lên cao trong
ghi liên tục cung cấp địa chỉ cần đọc mỗi khi mà tín hiệu earlyOpBegun hoặc
opBegun lên cao báo hiệu hoạt động đọc trước đã bắt đầu. Ví dụ trên mô tả 3
hoạt động đọc truy nhập các vùng nhớ SDRAM tại bank và hàng của
SDRAM đang được active. Nếu việc đọc thực hiện ở bank hoặc hàng khác
của SDRAM thì SDRAM Controller sẽ hoàn thành quá trình đọc hiện tại và
active bank và row mới trước khi tín hiệu earlyOpBegun và opBegun lên cao.

Pipeline Write Operation

56
www.ngohaibac.net

Hình 3.6 : Pipelined Write Operation timing waveforms

Hoạt động ghi ở chế độ pipeline được thực hiện bằng cách giữ cho tín
hiệu wr lên cao trong khi đó thì liên tục cung cấp địa chỉ mới mỗi khi tín hiệu
earlyOpBegun hay opBegun lên cao báo hiệu rằng quá trình ghi trước đó đã bắt
đầu. Ví dụ trên đây thực hiện 3 hoạt động ghi vào bộ nhớ trong bank và row
hiện tại của SDRAM. Nếu ghi vào địa chỉ ở bank hoặc row khác thì SDRAM
Controller sẽ hoàn thành việc ghi hiện tại và sau đó kích hoạt bank và row
mới trước khi tín hiệu earlyOpBegun và opBegun lên cao.

Nhờ đó mà việc ghi, đọc SDRAM trở nên dễ dàng hơn, theo cấu trúc sau:

57
www.ngohaibac.net

Hình 3.7 : Ghép nối với SDRAM Controller

Dualport Module for the SDRAM Controller

Chức năng: Dualport module đính vào phía các cổng bên host-side của bộ
điều khiển XESS SDRAM Controller và chia thành hai phần host-side riêng
biệt, mỗi phần có thể hoạt động như các cổng của host-side ban đầu do đó
ứng dụng có thể gồm nhiều thành phần truy nhập SDRAM nhưng chỉ dùng 1
bộ điều khiển SDRAM Controller. Bất kì ứng dụng nào thực hiện việc ghi đọc
bộ nhớ SDRAM đều độc lập với hoạt động đó ở các post khác. Băng thông
tổng cộng của SDRAM có thể được phân phối giữa 2 port để cho khớp với
data rate của các ứng dụng dùng dual port. Dualport module có thể xây
dựng kiểu tầng để xây dựng giao diện SDRAM với 3 hay nhiều cổng độc lập.

58
www.ngohaibac.net

Hình 3.8 : Ghép nối dualport với SDRAM Controller

Hình 3.9 : Xây dựng 4 ports SDRAM interface

Phân phối băng thông SDRAM cho các port của một dualport được thực
hiện qua tham số PORT_TIME_SLOTS, là một vector 16 bit với mỗi bit tương
ứng với một time slot trong khi một hoạt động đọc hoặc ghi của SDRAM có

59
www.ngohaibac.net

thể xảy ra. Thiết lập bit bằng 0 để cấu hình time slot cho port0, và thiết lập
bằng 1 để dành time slot cho port 1. Sau đây là một số cách thiết lập:

PORT_TIME_SLOTS => “1111000011110000” áp dụng 8 time slot cho mỗi


port, với mỗi port có 4 lần truy cập liền nhau vào SDRAM trước khi dual
port chuyển điều khiển cho port kia. Vì thế, mõi port được phân phối một
nửa băng thông của dual port.

Tham số PORT_TIME_SLOTS chỉ có tác động tới hoạt động của dualport
module khi các ứng dụng trên cả 2 port cùng cố gắng truy nhập vào SDRAM.
Ứng dụng ở một port sẽ truy nhập trực tiếp vào SDRAM nếu không có hoạt
động ghi và đọc đang tiến hành ở port kia. Vì thế PORT_TIME_SLOTS =
“1111111111111111” sẽ cho phép port 0 truy nhập SDRAM chỉ khi port 1
không truy cập, nhưng không ngăn hoàn toàn port 0 trong việc truy cập
SDRAM.

PORT_TIME_SLOTS = “1111111100000000” cấu hình một nửa băng thông


cho mỗi port tuy nhiên có thể block truy cập của một port lên tới 8 time slot
trong khi port kia được ưu tiên hơn. Để giảm trễ chỉ cần gàn
PORT_TIME_SLOTS = “0101010101010101” tuy nhiên sẽ lãng phí thời gian
bởi vì SDRAM Controller phải xóa pipeline trước mỗi quá trình chuyển port.
Vì thế, nhóm các bit liền nhau cùng một giá trị là giải pháp tốt nhất.

3.2.4. Image Processing core

Image Processing core là thành phần quan trọng nhất của hệ thống xử lý
ảnh, trong đó thực thi tất cả các thuật toán từ cơ bản( lọc, dò biên, phân
ngưỡng...) đến nâng cao ( gán nhãn đối tượng, xác định các đặc trưng ). Hoạt
động của thành phần này được điều khiển bởi bộ xử lý trung tâm.

Như đã thấy ở trên, mỗi pixel được thu thập, xử lý và lưu vào SDRAM có
dạng một word 16bit chứa thông tin như sau :

'field_id' | 'field_change' | "000000" | "luminance"

Trong đó, field_id và field_change là những bit thông tin về frame và


pixel, không được thay đổi trong quá trình xử lý. Luminance là số 8 bit biểu
60
www.ngohaibac.net

thị mức xám của pixel, sẽ được xử lý trong các thuật toán về sau. Còn lại 6 bit
cao sau field_change chưa được sử dụng đến, sẽ được dùng để gán nhãn đối
tượng.

Việc thiết kế Image Processing Core chủ yếu sử dụng công cụ System
Generator. Với công cụ này, người thiết kế có thể sử dụng các core có sẵn đã
được cung cấp bởi Xilinx, giảm thiểu công sức và thời gian thiết kế, đồng thời
vẫn có thể tự tạo ra các block riêng cho mình sử dụng công cụ Black Box, và
đặc biệt, việc gỡ rối và mô phỏng hệ thống có thể thực hiện hoàn toàn trên
Matlab, vốn đã rất quen thuộc với sinh viên Điều khiển tự động.

Hình 3.10: Sơ đồ khối xử lý ảnh.

Khối xử lý ảnh giao tiếp với SDRAM thông qua 2 FIFO là read_fifo và
store_fifo.

 read_fifo có nhiệm vụ đọc tuần tự dữ liệu từ SDRAM vào để khối xử lý


ảnh lưu vào buffer và xử lý. Việc đọc bắt đầu khi tín hiệu báo read_fifo
không còn trống (read_fifo_empty='0' hay read_fifo_avail='1') và dừng khi
đọc hết một frame. Việc đọc có thể tạm dừng khi sắp xảy ra xung đột quá
trình đọc và xử lý.
61
www.ngohaibac.net

 store_fifo có nhiệm vụ lấy dữ liệu đã xử lý từ khối xử lý ảnh và lưu tuần


tự trở lại vào SDRAM tại vị trí xác định. Cũng như read_fifo, việc ghi của
store_fifo điều khiển quá trình xử lý, khi store_fifo đầy thì tạm dừng việc xử
lý.

Cấu trúc của Image Processing Core gồm 2 thành phần :

fifo_to_buffer : thực thi việc giao tiếp với read_fifo và lưu dữ liệu vào một
bộ đệm. Thực chất bộ đệm dữ liệu là một Block Ram trong FPGA, có khả
năng lưu đến 27 dòng của frame. Việc lưu dữ liệu được điều khiển sao cho
tránh xung đột với thành phần xử lý.

Hình 3.11 : Khối ghi dữ liệu từ read_fifo vào Buffer

processing_algorithms : lựa chọn, thực thi tất cả các thuật toán xử lý ảnh,
từ lọc, dò biên, các thuật toán xử lý đồng cấu,... cho đến phân ngưỡng, phân
vùng và gán nhãn đối tượng. Đồng thời thành phần này còn thực hiện giao
tiếp giữa Image Processing Core trong việc giao tiếp với store_fifo để đưa dữ
liệu xử lý ra ngoài.

62
www.ngohaibac.net

Hình 3.12 : Khối thuật toán xử lý ảnh

Khối xử lý này đọc dữ liệu từ bộ đệm theo cùng một phương pháp trong
tất cả các thuật toán xử lý. Điều này có thể gây kéo dài thời gian xử lý đối với
một số ít thuật toán, nhưng lại giúp tiết kiệm rất nhiều tài nguyên và công
sức thiết kế cũng như giảm thiểu khả năng gây lỗi hoặc nhầm lẫn trong quá
trình thiết kế.

Việc ghi và đọc dữ liệu ở bộ đệm buffer như sau:

Ban đầu ta đọc tuần tự dữ liệu vào buffer cho đến khi đầy 10 dòng, ta lại
quay ngược trở lại vị trí ban đầu và tiếp tục đọc. Đồng thời, cửa sổ ghi ra để
xử lý được dịch tuần tự cho đến hết 10 dòng , rồi cũng quay ngược trở lại
dòng đầu tiên. Việc ghi và đọc được điều khiển sao cho không xảy ra sự xung
đột : chỉ ghi vào những dòng đã xử lý và chỉ đọc khi đã ghi đủ số dòng cần
thiết để xử lý.

Việc đọc và ghi như trên cho phép sử dụng một cách hiệu quả số block
ram hữu hạn của FPGA, tránh hoàn toàn khả năng xung đột đọc/ghi, đồng
thời loại giúp cho việc đọc và ghi trở nên tương đối độc lập với nhau, giảm
thiểu sai sót trong quá trình xử lý.

Việc đọc và ghi cũng được điều khiển bởi tín hiệu báo từ read_fifo và
store_fifo: dừng ghi khi read_fifo trống (read_fifo_avail= 0) và dừng xử lý khi
store_fifo đầy (store_fifo_full = 1).
63
www.ngohaibac.net

Các khối xử lý cơ bản

Khối đọc dữ liệu : các cửa sổ được đọc ra từ bộ đệm, để đưa vào một
thanh ghi dịch 9 word. Việc đọc được thực hiện tuần tự từ trên xuống theo
từng cột từ trái sang, dữ liệu đọc ra được dịch dần vào thanh ghi dịch.

Hình 3.13 : Khối đọc dữ liệu từ buffer

Khi chuyển sang cửa sổ kế tiếp, do 2 cửa sổ kề nhau có chung 6 word nên
để tiết kiệm thời gian, ta sẽ không đọc lại từ đầu 6 word cũ mà sử dụng lại
chúng với sự trợ giúp của thanh ghi dịch. Do đó ta sẽ chỉ việc đọc tiếp 3 pixel
ở cột tiếp theo. Tín hiệu full_win báo hiệu một cửa sổ vừa được đọc xong, cần
đưa vào quá trình xử lý.

Thanh ghi dịch Pixel register : Thanh ghi này có nhiệm vụ ghi dần các
pixel đọc từ buffer do khối đọc dữ liệu điều khiển. Các pixel được dịch dần
trong quá trình xử lý, do đó, cứ mỗi 3 chu kì xử lý, trong thanh ghi lại lưu
một cửa sổ mới.

Hình 3.14: Sơ đồ khối thanh ghi dịch Pixel register

64
www.ngohaibac.net

Có thể thấy, với thanh ghi dịch này, ta có thể tận dụng tối đa khả năng xử
lý song song của FPGA cho các thuật toán xử lý ảnh số.

Khối xử lý : Khối xử lý bao gồm nhiều thuật toán xử lý khác nhau. Tuy
nhiên, cấu trúc của các thuật toán là tương đối giống nhau và ta có thể tận
dụng một cơ chế đọc duy nhất để dùng chung cho tất cả các thuật toán.

Cấu trúc bộ lọc tuyến tính, dò biên : Bộ lọc tuyến tính và dò biên theo
phương pháp Laplacien cùng sử dụng phép nhân chập với 2 mặt nạ khác
nhau. Do đó ta có thể ghép chung lại thành một khối. Phép nhân chập có thể
được thực hiện rất nhanh chóng sử dụng cấu trúc song song. Dưới đây là cấu
trúc bộ nhân chập trong các bộ xử lý này :

Hình 3.15 : Cấu trúc nhân chập

Bộ xử lý đồng cấu ảnh nhị phân : Khối này chủ yếu tính ra giá trị max,min
của các pixel trong cửa sổ, do đó sử dụng các block so sánh. Cấu trúc như
sau:

65
www.ngohaibac.net

Hình 3.16 : Cấu trúc bộ xử lý đồng cấu ảnh nhị phân.

Khối tính ngưỡng và phân ngưỡng : Ngưỡng được tính theo phương pháp
trung bình. Tổng mức xám của các pixel sẽ được cộng dần vào một thanh ghi
và thực hiện phép chia bằng cách dịch bit. Kết hợp nhiều khối dịch bit với
nhau cho phép ta thực hiện phép chia với sai số của ngưỡng nhỏ hơn 3 và
thuật toán chỉ cần thực hiện trong 1 chu kì xung.

Khối đếm đối tượng: Khối đếm đối tượng cũng tận dụng khả năng xử lý
song song của FPGA để thực hiện đếm đối tượng. Với khối này, việc gán
nhãn cho mỗi pixel dựa trên nhãn của các pixel lân cận chỉ cần thực hiện
trong 1 chu kì đồng hồ.

66
www.ngohaibac.net

Hình 3.17 : Khối gán nhãn đối tượng

Đầu vào khối gán nhãn đối tượng là 9 pixel của cửa sổ hiện tại, với pixel 5
là trung tâm, cần được xem xét để gán nhãn. Việc gán nhãn cho pixel trung
tâm thực hiện như thuật toán đã trình bày ở phần 1.

3.2.5. Hiển thị ảnh lên VGA: VGA Generator

VGA Color Signals

Có 3 tín hiệu color là: red, green và blue gửi tín hiệu màu sắc (color
information) đến màn hình VGA. Mỗi một tín hiệu điều khiển một súng bắn
điện tử (electron gun) để phóng các hạt electron vẽ lên một màu cơ bản tại
một điểm trên màn hình. Dải của tín hiệu nằm từ từ 0 V (tương ứng với màu
tối hoàn toàn) và 0.7V (sáng hoàn toàn) điều khiển cường độ của mỗi thành
phần màu và 3 thành phần màu kết hợp với nhau tạo lên màu của điểm ảnh
(dot) hay phần tử ảnh (pixel) trên màn hình.

Hình 3.19 : VGA Connection


67
www.ngohaibac.net

Mỗi tín hiệu màu analog có thể là một trong 8 mức bằng 3 tín hiệu digital
bằng cách dùng bộ chuyển đổi digital to analog 3 bit (DAC 3 bit). Do đó, 8
mức trên mỗi tín hiệu analog kết hợp với nhau tạo nên phần tử ảnh (pixel)
với 8 x 8 x 8 = 512 màu khác nhau. Tuy nhiên trong đồ án này, chúng em chỉ
dùng camera đen trắng nên hiển thị trên màn hình chỉ được 8 màu khác nhau
hay 8 mức thôi.

Hình 3.20 : 8 màu cơ bản

VGA Signal Timing

Mỗi một ảnh (hay frame) trên màn hình hiển thị là kết hợp của h dòng,
mỗi dòng có w pixel. Kích thước của mỗi frame được biểu diễn w x h dưới
các dạng tiêu biểu gồm 640 x 480m 800 x 600, 1024 x 768 và 1280 x 1024.

Hình 3.21 : CRT Display Timing Example

68
www.ngohaibac.net

Để vẽ một frame, có những mạch điện có trách nhiệm di chuyển dòng


electron từ trái sang phải và từ trên xuống dưới dọc theo màn hình gọi là
deflection circuit. Những mạch này yêu cầu phải có 2 tín hiệu động bộ để
khởi động và dừng dòng electron tại đúng thời điểm để cho một dòng các
điểm ảnh được vẽ dọc theo màn hình và mỗi dòng được điền theo cơ chế từ
trên xuống dưới để tạo lên một ảnh.

Sau đây là ví dụ VGA Display Timing với chế độ 640 x 480:

Hình 3.22 : 640 x 480 Mode VGA Control Timing

Nguyên tắc hoạt động của VGA Generator

Sơ đồ cấu trúc của bộ hiển thị hình ảnh lên VGA như trên hình vẽ dưới.
Hệ thống bên ngoài ghi giá trị pixel vào trong bộ đệm pixel (pixel buffer)
(trong trường hợp này là FIFO 256 x 16). Các pixel được lấy từ bộ đệm rồi ghi
vào trong thanh ghi pixel (pixel register). Mỗi pixel cso thể là 1, 2, 4, 8 hoặc 16
bit vì thế nên nội dung của thanh ghi pixel này được dịch sau mỗi xung clock
để thay thế pixel hiện tại theo thứ tự các bít có trọng số thấp đến cao. Các bit
này được gửi đến colormap circuit để chuyển các pixel này sang các giá trị
red, green và blue rồi gửi đến bộ DAC video bên ngoài.

Hai mạch tạo xung đồng bộ (pulse generation circuit) được dùng để tạo
các xung đồng bộ đứng và nằm ngang (horizontal và vertical). Bộ hirizontal
69
www.ngohaibac.net

sync generator có đầu ra là tín hiệu gate một chu kì trùng khớp với sườn lên
của xung đồng bộ ngang ( horizontal sync pulse), tín hiệu gate này nối với
tín hiệu clock-enable của bộ vertical sync generator vì thế nên clock-enable
chỉ cập nhật bộ đếm thời gian sau mỗi dòng pixel (line of pixels). Tín hiệu
gate của vertical sync generator được dùng như tín hiệu báo kết thúc một
frame cho các khối dữ liệu pixel bên ngoài, đồng thời nó cũng reset và xóa
toàn bộ nội dung của pixel buffer nên bộ VGA generator luôn khởi động từ
trạng thái xóa sạch hoàn toàn với mọi frame.

Bộ tạo tín hiệu đồng bộ cũng tạo ra các tín hiệu horizontal và vertical
blanking. Khi dùng phép toán OR logic ta được tín hiệu blanking toàn cục.
Các tín hiệu blanking được kết hợp với các bit có trọng số thấp hơn ở bộ đếm
horizontal pixel counter để xác định khi nào đọc pixel từ bộ đệm. Ví dụ, nếu
mỗi pixel có độ rộng 16 bit, thì một từ 16 bit sẽ cần được đọc sau mỗi chu kì
clock. Vì thế nên hoạt động đọc được khởi tạo bất cứ khi nào tín hiệu video
không trống và 2 bit thấp của bộ đếm pixel đều bằng 0.

Hình 3.23 : Sơ đồ khối cấu trúc của VGA Generator

70
www.ngohaibac.net

Tín hiệu full signal được gửi ra nguồn dữ liệu pixel bên ngoài để báo cho
biết khi nào thì dừng việc điền dữ liệu vào bộ đệm. Với bộ đệm FIFO 256, tín
hiệu full lên cao khi 5 bit cao của tín hiệu FIFO level bằng 11111. Khiến cho
bỏ trống 7 bit trong FIFO để điền các pixel khi các nguồn dữ liệu bên ngoài
đã chót gửi dữ liệu vào trong pipe. Đây gọi là cơ chế bộ đệm an toàn.

3.2.6. Picoblaze và hệ thống điều khiển trung tâm

3.2.6.1. Khái quát PicoBlaze

Vi điều khiển PicoBlaze là vi điều khiển nhúng 8 bit có cấu trúc RISC được
tối ưu phát triển cho các họ FPGA như Spartan 3, Virtex II và Virtex II Pro
của Xilinx. Với vi điều khiển này chúng ta có thể làm một bộ điều khiển dựa
trên nền vi điều khiển rất hiệu quả, hay xử lý dữ liệu đơn giản.

Vi điều khiển PicoBlaze được tối ưu về mặt hiệu suất và chi phí phát triển
thấp. Nó chiểm khoảng 96 FPGA slices, hay chỉ 12.5% của XC3S50 FPGA và
chiếm một phần rất nhỏ ở mức 0.3% của XC3S5000 FPGA. Bình thường mỗi
block RAM của FPGA có thể lưu trữ tới 1024 câu lệnh chương trình (program
instructions) và các lệnh này được tự động load trong khi cấu hình FPGA, khi
đó vi điều khiển PicoBlaze có thể hoạt động từ 44000 tới 100000 câu lệnh trên
giây (MIPS – million instructions per second) tùy thuộc vào họ FPGA được
dùng là loại gì và tốc độ của họ đó.

Nhân của vi điều khiển PicoBlaze được nhúng hoàn toàn trong FPGA và
không cần một nguồn thêm nào. Đơn giản là các ngoại vi của PicoBlaze có thể
tự do lựa chọn cho phù hợp với các mục đích đặc biệt, chức năng và yêu cầu
về giá cả của sản phẩm cuối cùng. PicoBlaze được nhúng vào dưới dạng một
mã nguồn VHDL vì thế nó có thể nhúng vào các đời FPGA sau này và do đó
project của chúng ta sẽ có tính kế thừa cao. Được nhúng trong FPGA, vi điều
khiển PicoBlaze sẽ giảm kích thước mạch, giá thiết kế và thực hiện.

PicoBlaze FPC được hỗ trợ bởi một số các công cụ phát triển phù hợp bao
gồm assembler và môi trường phát triển đồ họa tích hợp (IDE – integrated
development environment), graphical instruction set simulator và mã nguồn

71
www.ngohaibac.net

VHDL và khối mô phỏng. Và rất đơn giản là vi điều khiển PicoBlaze được hỗ
trợ trong môi trường phát triển Xilinx System Generator hay ISE.

Hình 3.24 : Sơ đồ khối cấu trúc của PicoBlaze

Vi điều khiển PicoBlaze có các đặc điểm sau:

 16 thanh ghi dữ liệu chức năng chung có độ rộng 8 bit.


 Lưu trữ được 1K lệnh trong chương trình có thê lâp trình được trong
chip và tự động nạp khi cấu hình FPGA hay khi khởi động FPGA.
 Khối tính toán logic (Arithmetic Logic Unit – ALU) với các cờ CARRY
và ZERO.
 Một bảng RAM 64 byte.
 256 đầu vào và 256 đầu ra dễ dàng có thể mở rộng thêm.
 Automatic 31 location CALL/RETURN stack.
 Predictable performance, luôn luôn dùng 2 xung nhịp hệ thống cho một
câu lệnh, có thể đạt tới 200 MHz hoặc 100 MIPS trong Virtex – II Pro FPGA.
 Đáp ứng ngắt nhanh; worst-case 5 clock cycles.
 Được tối ưu cho cấu truc Spartan – 3, Virtex II, và Virtex II Pro FPGA
của Xilinx chỉ chiếm 96 slices và 0.5 tới 1 block RAM.
 Hỗ trợ mô phỏng tệp lệnh assembler.

Vi điều khiển PicoBlaze được cung cấp dưới file nguồn VHDL gọi là
KCPSM3.vhd, đã được tối ưu về việc thực thi hiệu quả và chắc chắn trong các
họ Spartan-3, Virtex-II hay Vertex-II Pro. Các mã nguồn phù hợp với cả quá
trình tổng hợp và mô phỏng và được phát triển và kiểm tra dùng công cụ
72
www.ngohaibac.net

Xilinx Synthesizs Tool (XST) cho tổng hợp logic và ModelSim cho mô phỏng.
Các nhà thiết kế cũng thành công khi dùng các công cụ tổng hợp logic và mô
phỏng khác. Các mã nguồn VHDL không nên bị chỉnh sửa trong bất kì hoàn
cảnh nào.

KCPSM3 Module

Module KCPSM3 bao gồm ALU, register file, scratchpad RAM, … Chỉ duy
nhất chức năng không nằm trong KCPSM3 là bộ nhớ chương trình. Khai báo
component và gắn chân như sau:

Kết nối với bộ nhớ ROM chương trình


73
www.ngohaibac.net

Bộ nhớ ROM chương trình của PicoBlaze được dùng trong thiết kế VHDL.
Từ file assembler tạo ra file VHDL, đã định nghĩa block RAM và khởi tạo nội
dung cho RAM. File VHDL này có thể được dùng cho cả tổng hợp logic và
mô phỏng vi điều khiển.

Sau đây là khai báo component và gán các thực thể của bộ nhớ chương
trình trong FPGA:

Do đó, sơ đồ cấu trúc của vi điều khiển PicoBlaze như sau:

Hình 3.25: Sơ đồ cấu trúc PicoBlaze Microcontroller

Để viết mã lệnh cho chương trình (với tên mở rộng là .psm) thì chúng ta
có thể dùng bất cứ trình soạn thảo nào để lập trình dựa theo 31 lệnh được
cung cấp. Và dùng file thực thi KCPSM3.exe và các form được định nghĩa sẵn

74
www.ngohaibac.net

của ROM dưới dạng file .vhd, .coe, .v để dịch ra các file .vhd, .v và cho vào
chương trình FPGA.

Để phối hợp hoạt động của tất cả các thành phần trên, đảm bảo hệ thống
hoạt động chính xác, ta phải có một hệ thống điều khiển trung tâm. Trong đồ
án này, chúng em sử dụng một vi xử lý nhúng có tên là PicoBlaze để điều
khiển hoạt động của các khối xử lý trong FPGA, đồng thời giao tiếp với máy
tính thông qua cổng RS232 và khối điều khiển giao tiếp RS232 : UART
Controller.

3.2.6.2. Sơ đồ cấu trúc của khối xử lý trung tâm

Sơ đồ cấu trúc của khối xử lý dùng PicoBlaze:

Hình 3.26 : Sơ đồ khối điều khiển trung tâm và giao tiếp UART

Ngoài vi điều khiển PicoBlaze, có sử dụng thêm 2 component là UART


Receive và UART Transmit. Hai component được cung cấp miễn phí bởi
Xilinx, bao gồm bộ đệm và các tín hiệu trạng thái để giao tiếp với cổng RS232.

Vi điều khiển PicoBlaze có nhiệm vụ nhận lệnh điều khiển từ chương


trình trên PC và ra các lệnh điều khiển để capture ảnh từ camera và các tín
hiệu lựa chọn thuật toán và kích hoạt khối xử lý frame ảnh đã lưu trong
SDRAM, đồng thời nhận tín hiệu done và báo về giao diện để biết thuật toán
đã xử lý xong.

Thuật toán của chương trình

75
www.ngohaibac.net

Chương trình chính luôn luôn nhận các kí tự từ giao diện người dùng và
kiểm tra xem gửi lệnh với cú pháp gì. Ví dụ: lệnh bắt đầu bằng chữ cái ‘C’
dùng để capture ảnh, bắt đầu bằng chữ cái M để chọn thuật toán xử lý như
M1 để lọc nhiễu, M2 để phân vùng, … và ra các tín hiệu điều khiển tương
ứng vào các chân Algorithm Selection của khối xử lý ảnh.

Khối xử lý ngắt sẽ được kích hoạt khi có tín hiệu done từ bộ xử lý ảnh và
khi đó xóa tín hiệu kích hoạt khối xử lý ảnh và gửi messenger lên PC.

3.3. Thiết kế giao diện điều khiển hệ thống

Giao diện của chương trình được xây dựng trên nền GUI (Graphic User
Interface) của Matlab R2007a.

Giao diện của chương trình điều khiển như hình vẽ dưới. Giao diện này
có thể thay đổi tại thời điểm bảo vệ.

Hình 3.27 : Giao diện điều khiển

76
www.ngohaibac.net

Chức năng

Chọn thông số của cổng RS232 để thiết lập giao tiếp RS232 với mạch phần
cứng bên dưới. Mặc định chọn cổng COM1, tốc độ 115200. Có thể lựa chọn
kết nối hoặc ngắt kết nối với RS232, có hộp thoại hiển thị trạng thái của giao
tiếp RS232.

Kích hoạt chip Video Decoder trên mạch phần cứng qua nút I2C để giao
tiếp I2C với chip qua cổng LPT. Mặc định chọn cổng LPT1, có thể phát triển
thêm để lựa chọn các cổng LPT khác nữa.

Cho phép download trực tiếp file cấu hình cho FPGA hoặc Flash qua cổng
LPT, nhờ các nút bấm ở phần LPT FPGA Programming.

Cho phép lựa chọn thuật toán thực hiện và có led hiển thị số thứ tự thuật
toán tương ứng. Do chưa có tên cụ thể của từng thuật toán cụ thể nên mới chỉ
đặt tên là thuật toán 1, thuật toán 2, … Mỗi khi kết thúc thuật toán đều có bức
điện thông báo đã thực hiện thành công.

Cho phép kích hoạt để capture ảnh từ camera và tự hiện lên màn hình
VGA. Đang phát triển để thực hiện lựa chọn giữa capture một ảnh và chụp
liên tục khoảng 30 hình/s.

3.4. Mô phỏng và kết quả

Phương án mô phỏng

Yêu cầu của bài toán mô phỏng: thực hiện tốt các thuật toán xử lý ảnh để
đếm số vật trên một frame, và định vị từng vật.

Phương án mô phỏng ở đây được thực hiện như sau: dùng camera chiếu
vào một tấm bảng một mầu (đen) có các vật có kích thước khác nhau. Khi đó,
dùng chương trình giao tiếp trên PC để điều khiển camera capture một ảnh
rõ nét, sau đó tiến hành thực hiện từng thuật toán theo trình tự nhất định và
xác định số vật. Từng kết quả chạy mỗi thuật toán đều hiển thị trực tiếp trên
màn hình VGA.

77
www.ngohaibac.net

Trình tự thực hiện như sau:

 Thuật toán 1 : Lọc ảnh bằng phép lọc Gausse, đồng thời tính ngưỡng
trung bình

 Thuật toán 2 : Phân ngưỡng ảnh theo thuật toán phân ngưỡng, sử
dụng ngưỡng vừa tính.

 Thuật toán 3 : Làm mảnh.

 Thuật toán 4 : Làm đầy, khôi phục ảnh.

 Thuật toán 5 : Thực hiện gán nhãn đối tượng, hiển thị số đối tượng
trong frame.

 Thuật toán 6 : Tính toán các đặc tính của lần lượt từng đối tượng, đồng
thời hiện đối tượng đó lên., hiển thị các đặc tính của đối tượng cần xác định
ra giao diện. Hoàn thành lượt mô phỏng.

Kết quả

Kết quả mô phỏng cho thấy việc thực thi các thuật toán và thiết kế hệ
thống thực hiện đúng như mong muốn. Việc phần vùng và đánh nhãn ảnh
thành công. Tuy nhiên, nếu ảnh có những nhiễu tương đối lớn ( độ dày
khoảng hơn 3 pixel ) thì cần nhiều quá trình làm mảnh liên tiếp mới xóa bỏ
hoàn toàn được nhiễu.

78
www.ngohaibac.net

Kết luận
Trong các giải pháp phần cứng cho việc xây dựng hệ thống thị giác máy
tính, có thể thầy FPGA là một trong những giải pháp phù hợp nhất. Với
FPGA, chúng ta có thể thiết kế hệ thống theo từng khối hoạt động song song,
cho phép tăng tốc độ xử lý lên nhiều lần so với xử lý tuần tự. Điều này là rất
quan trọng đối với những hệ thống đòi hỏi tốc độ xử lý nhanh, chẳng hạn
như những cánh tay robot gắp đồ vật đang chuyển động nhanh.

Trong đồ án này, chúng em đã thực thi thành công một hệ thống thị giác
máy với nhiệm vụ là tách các đối tượng trong một ảnh, gán nhãn và xác định
các đặc trưng hình học của đối tượng. Với khả năng xử lý như vậy, chúng em
nhận thấy hoàn toàn có thể mở rộng đề tài ra giải quyết các bài toán xử lý
nâng cao như :

 Nhận dạng : dựa trên các đặc trưng hình học của đối tượng, ta còn có
thể nhân dạng đối tượng, phục vụ cho bài toán nhân dạng đồ vật hoặc chữ
cái và số về sau. Việc nhận dạng có thể bằng mạng neural xây dựng trực tiếp
trên FPGA, bằng cách tạo ra các neural như các đơn vị xử lý kết nối với nhau.

 Xác định đối tượng chuyển động: Đối tượng được xử lý ở đây mới chỉ là
đối tượng tĩnh, trong khi camera truyền ảnh liên tục về đối tượng. Nếu kết
hợp các quá trình xử lý trong những thời điểm khác nhau, ta có thể giải quyết
bài toán xác định đối tượng chuyển động và cả tốc độ chuyển động của nó.
Việc giải quyết bài toán này có ý nghĩa thực tiễn rất lớn đối với các cơ cấu
bám đối tượng chuyển động.

 Xác định khoảng cách vật trong không gian : Mạch XST 3S 1000 có 2
cổng video. Thêm vào đó, project của chúng ta chưa chiếm hết một nửa tài
nguyên của hệ thống, trong khi nếu thêm một project nữa, ta vẫn có thể tận
dụng những tài nguyên cũ. Do đó chúng ta hoàn toàn có thể thực thi một hệ
thống với 2 camera cùng hoạt động. Điều này cho phép ta có thể quan sát các
đối tượng trong không gian 3D, thậm chí xác định hình dạng, kích thước và
thể tích của chúng. Ta cũng có thể xác định khoảng cách giữa các đối tượng
trong không gian nếu kết hợp kết quả xử lý được với các phép tính quang
học chính xác. Xa hơn nữa, ta hoàn toàn có thể xây dựng một hệ thống thị

79
www.ngohaibac.net

giác máy giúp cho việc di chuyển của xe tự hành và các thao tác của hệ thống
CNC đối với vật thể 3 chiều.

 Mở rộng khả năng giao tiếp của cảm biến thị giác để phù hợp với nhiều
chuẩn chứ không chỉ riêng RS232: chuẩn Ethernet, USB, CAN, RS 485... giúp
cho thiết bị dễ dàng tích hợp vào các hệ thống điều khiển phân tán thật sự.

 Cải thiện các thuật toán nhằm làm tăng khả năng xử lý, chất lượng ảnh
sau tiền xử lý.

Đó đều là những ứng dụng rất có giá trị thực tiễn trong nhiều lĩnh vực,
đặc biệt là Tự động điều khiển, và có khả năng thực thi nếu đi sâu nghiên
cứu.

Qua quá trình thực hiện đồ án này, chúng em cảm thấy đã học được rất
nhiều điều.

Đó là kỹ năng tự nghiên cứu trong những lĩnh vực còn hết sức mới mẻ đối
với sinh viên Điều khiển tự động : đó là Xử lý ảnh số, Thị giác máy tính và
công nghệ FPGA, trên nền tảng những kiến thức cơ sở đã học được ở nhà
trường.

Đó là kỹ năng làm việc theo nhóm : bằng cách phân công tương đối hợp
lý, chúng em đã chia tách công việc ra một cách khá cân bằng, đảm bảo mỗi
người phát huy hết sở trường của mình, để thực hiện đồ án một cách tốt nhất
trong khả năng có thể. Đây là một trong những kỹ năng quan trọng nhất cho
công việc của một kĩ sư về sau

Đó là kỹ năng trình bày những ý tưởng , hiểu biết và kiến thức của mình
vào một đồ án, nhằm truyền tải một cách đầy đủ nhất có thể những gì mình
hiểu về lĩnh vực mà mình đang nghiên cứu.

Cuối cùng, cũng phải nói rằng dù đã cố gắng rất nhiều, nhưng chúng em
vẫn không tránh khỏi những sai sót, trong việc xây dựng hệ thống, trong việc
trình bày luận văn. Nhưng chúng em vẫn luôn ý thức được rằng, những sai
sót ấy cũng là một cơ hội cho chúng em rèn luyện kỹ năng của mình : kỹ
năng sửa chữa những sai sót và khiếm khuyết, để thực hiện những đề tài, dự
80
www.ngohaibac.net

án về sau một cách hoàn chỉnh hơn. Đó tất cả là nhờ sự theo dõi, hướng dẫn ,
phản biện tận tình và nghiêm túc của các thầy, cô trong hội đồng bảo vệ.

Chúng em xin chân thành cảm ơn các thầy cô vì sự tận tụy ấy!

81
www.ngohaibac.net

Tài liệu tham khảo

[1]. Volnei A. Pedroni, Circuit Design with VHDL, MIT Press Cambridge,
Massachusetts London, England, 2004.

[2]. Texas Instruments, TVP5150PBS Ultralow-Power NTSC/PAL Video


Decoder, Texas Instruments Incorporated, May 2006.

[3]. D. Vanden Bout, XSA Board SDRAM Controller, XESS Corporation, July
12, 2005.

[4]. D. Vanden Bout, VGA Generator for the XSA Boards, XESS Corporation,
October 12, 2004.

[5]. D. Vanden Bout, Dualport Module for the SDRAM Controller, XESS
Corporation, July 12, 2005.

[6]. Karthikeyan Palanisamy, Interfacing Spartan-3 Devices with 166 MHz or


333 Mb/s DDR SDRAM Memories, Xilinx Corporation, October 14, 2004.

[7]. Anil K.Jail , Fundamentals Digital Image Processing, University of


California.

[8]. Xilinx Ltd, PicoBlaze 8-bit Embedded Microcontroller User Guide


UG129, www.xilinx.com, November 21, 2005.

[9]. Xilinx Ltd, Spartan-3E Starter Kit Board User Guide UG230 (v1.0),
www.xilinx.com , March 9, 2006.

[10]. Xilinx Ltd, Chapter 7 – Implementing DDR SDRAM Controller – MIG


User Guide UG086 (V2.0), www.xilinx.com, September 18, 2007.

[11]. Xilinx Ltd, System Generator for DSP Userguide Release 9.2.00,
www.xilinx.com, August 2007.

[12]. Xilinx Ltd, System Generator for DSP Reference Guide Release 9.2.00,
www.xilinx.com, August, 2007.

82
www.ngohaibac.net

[13]. Xilinx Ltd, System Generator for DSP Getting Started Guide Release
9.2.00, www.xilinx.com, August, 2007.

[14]. Gregory K.McMillan, Douglas M.Considine, Process/Industrial


Instruments and Controls Handbook, McGraw-Hill, 1999.

[15]. O.Gassman, H.Meixner, Sensors in Intelligent buildings, Wiley-VHC,


2001.

[16]. Trung tâm công nghệ FPT, Giới thiệu giải pháp phần cứng cho bài toán
thị giác máy trên nền Linux nhúng.

[17]. Nguyễn Đức Thành, Nguyễn Đức Minh, Computer Vision using Neural
Network, Application for Robot Manipulator Control, Bộ Môn Điều khiển
tự động, khoa Điện-Điện tử, Đại học Bách Khoa Thành phố Hồ Chí Minh,
2004.

[18]. Anthony Edward Nelson, Implementation of Image Processing


Algorithms on FPGA Hardware, Nashville, 2000.

[19]. Bruce Draper, Walid Najjar, Wim Böhm, Jeff Hammes, Bob Rinker,
Charlie Ross, Compiling and Optimizing Image Processing Algorithms for
FPGA’s, Colorado State University, 2000.
[20]. Ben Cope, Implementation of 2D Convolution on FPGA, GPU and CPU,
Imperial College London, 2000.
[21]. Bill Silver , An Introduction to Digital Image Processing, Cognex
Corporation, 2000.
[22]. Richard G. Shoup, Parameterized Convolution Filtering in a Field
Programmable Gate Array, California, 2000.
[23]. Chi-Jeng Chang, Pei-Yung Hsiao, Zen-Zi Hoang, Intergrated Operation
of Image Capturing in FPGA, Chang Gung University, Tao-Yuan, Taiwan,
2006.

[24]. Anil K.Jail , Fundamentals Digital Image Processing, University of


California.

83
www.ngohaibac.net

Các nguồn tham khảo trên Internet

[1]. http://tech.groups.yahoo.com/group/xsboard-users/ : thảo luận của XESS


Board group về thiết kế hệ thống nhúng dùng các board của XESS.
Trưởng nhóm là D. Vanden Bout có rất nhiều bài viết hay. Nhóm chúng
em đã được sự hỗ trợ tận tình từ phía Dave.

[2]. http://www.xilinx.com/: Trang web cung cấp mọi công cụ, hướng dẫn để
thực thi FPGA.

84