Đề tài Thiết kế hệ thống xử lý ảnh số trên nền Fpga

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.

pdf84 trang | Chia sẻ: lvcdongnoi | Lượt xem: 4820 | Lượt tải: 2download
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:

  • pdfThiết kế hệ thống xử lý ảnh số trên nền fpga.pdf
Luận văn liên quan