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
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
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
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.
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.
84 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 5157 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Đề tài Thiết kế hệ thống xử lý ảnh số trên nền Fpga, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ớ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ể
www.ngohaibac.net
41
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
www.ngohaibac.net
42
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,
www.ngohaibac.net
43
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:
www.ngohaibac.net
44
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. :
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.
www.ngohaibac.net
45
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.
www.ngohaibac.net
46
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)
www.ngohaibac.net
47
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.
www.ngohaibac.net
48
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 đủ.
www.ngohaibac.net
49
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.
www.ngohaibac.net
50
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.
www.ngohaibac.net
51
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
www.ngohaibac.net
52
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:
www.ngohaibac.net
53
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: 1b n r nC Y C Y .
www.ngohaibac.net
54
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.
www.ngohaibac.net
55
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.
www.ngohaibac.net
56
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
www.ngohaibac.net
57
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:
www.ngohaibac.net
58
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.
www.ngohaibac.net
59
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ó
www.ngohaibac.net
60
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
www.ngohaibac.net
61
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ý.
www.ngohaibac.net
62
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.
www.ngohaibac.net
63
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).
www.ngohaibac.net
64
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
www.ngohaibac.net
65
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:
www.ngohaibac.net
66
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ồ.
www.ngohaibac.net
67
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
www.ngohaibac.net
68
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
www.ngohaibac.net
69
Để 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
www.ngohaibac.net
70
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
www.ngohaibac.net
71
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
www.ngohaibac.net
72
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ụ
www.ngohaibac.net
73
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
www.ngohaibac.net
74
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
www.ngohaibac.net
75
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
www.ngohaibac.net
76
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
www.ngohaibac.net
77
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.
www.ngohaibac.net
78
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.
www.ngohaibac.net
79
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ị
www.ngohaibac.net
80
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ự
www.ngohaibac.net
81
á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!
www.ngohaibac.net
82
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.
www.ngohaibac.net
83
[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.
www.ngohaibac.net
84
Các nguồn tham khảo trên Internet
[1]. : 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]. Trang web cung cấp mọi công cụ, hướng dẫn để
thực thi FPGA.
Các file đính kèm theo tài liệu này:
- Thiết kế hệ thống xử lý ảnh số trên nền fpga.pdf