Ngày náy công nghệ đang ngày càng phát triển và những công nghệ xử lý ảnh đã và đang trở thành một ứng dụng kỹ thuật hữu dụng và được sử dụng rộng rãi. Ứng dụng xử lý ảnh được thực hiện trên nhiều dòng kit khác nhau và FPGA là một trong các dòng kit đó. FPGA có độ linh động cao trong quá trình thiết kế cho phép tái cấu. trúc thiết kế giải quyết lớp những bài toán phức tạp mà trước kia chỉ nhờ phần mềm máy tính. FPGA có thể được lập trình để thực hiện các chức năng xử lý ảnh khác nhau như lọc ảnh, phân tích hình ảnh và nhận dạng hình ảnh. FPGA có thể được sử dụng để xử lý ảnh vì chúng có thể được lập trình để thực hiện các chức năng xử lý ảnh khác nhau và có thể được cấu hình để phù hợp với các yêu cầu cụ thể của một ứng dụng xử lý ảnh. Ngoài ra, nhờ mật độ cổng logic lớn FPGA được ứng dụng nhiều trong các lĩnh vực: xử lý tín hiệu số DSP, các hệ thống hàng không, vũ trụ, quốc phòng, tiền thiết kế mẫu ASIC (ASIC prototyping), các hệ thống điều khiển trực quan, phân tích nhận dạng hình ảnh, mô hình phần cứng máy tính, … Với mục đích hướng tới có thể thực hiện các ứng dụng xử lý ảnh trên nền tảng phần cứng em đã lựa chọn Kit DE10 standard (dòng kit SoC – FPGA của intel) để tìm hiểu. Đặc biệt với dòng kit này cung cấp công cụ Qsys, công cụ hữu ích giúp người dùng có thể xây dựng mô hình hệ thống phần cứng từ các thành phần có sẵn hoặc tạo mới. Và trong đề tài đồ án này em tiến hành nghiên cứu cách sử dụng kit DE10 và tìm hiểu cách xây dưng một hệ thống Qsys dựa mô hình tham chiếu của Intel Golden Hardware Reference Design (GHRD), sau đó dùng hệ thống này thực hiện ứng dụng nhận diện khuôn mặt để kiểm tra hệ thống Qsys đã xây dựng.
GIỚI THIỆU
Tổng quan
Ngày náy công nghệ đang ngày càng phát triển và những công nghệ xử lý ảnh đã và đang trở thành một ứng dụng kỹ thuật hữu dụng và được sử dụng rộng rãi Ứng dụng xử lý ảnh được thực hiện trên nhiều dòng kit khác nhau và FPGA là một trong các dòng kit đó FPGA có độ linh động cao trong quá trình thiết kế cho phép tái cấu trúc thiết kế giải quyết lớp những bài toán phức tạp mà trước kia chỉ nhờ phần mềm máy tính FPGA có thể được lập trình để thực hiện các chức năng xử lý ảnh khác nhau như lọc ảnh, phân tích hình ảnh và nhận dạng hình ảnh FPGA có thể được sử dụng để xử lý ảnh vì chúng có thể được lập trình để thực hiện các chức năng xử lý ảnh khác nhau và có thể được cấu hình để phù hợp với các yêu cầu cụ thể của một ứng dụng xử lý ảnh Ngoài ra, nhờ mật độ cổng logic lớn FPGA được ứng dụng nhiều trong các lĩnh vực: xử lý tín hiệu số DSP, các hệ thống hàng không, vũ trụ, quốc phòng, tiền thiết kế mẫu ASIC (ASIC prototyping), các hệ thống điều khiển trực quan, phân tích nhận dạng hình ảnh, mô hình phần cứng máy tính, …
Với mục đích hướng tới có thể thực hiện các ứng dụng xử lý ảnh trên nền tảng phần cứng em đã lựa chọn Kit DE10 standard (dòng kit SoC – FPGA của intel) để tìm hiểu Đặc biệt với dòng kit này cung cấp công cụ Qsys, công cụ hữu ích giúp người dùng có thể xây dựng mô hình hệ thống phần cứng từ các thành phần có sẵn hoặc tạo mới Và trong đề tài đồ án này em tiến hành nghiên cứu cách sử dụng kit DE10 và tìm hiểu cách xây dưng một hệ thống Qsys dựa mô hình tham chiếu của Intel Golden Hardware Reference Design (GHRD), sau đó dùng hệ thống này thực hiện ứng dụng nhận diện khuôn mặt để kiểm tra hệ thống Qsys đã xây dựng.
Nhiệm vụ đề tài
Với mục đích hướng đến việc hiển thị hình ảnh từ camera lên màn hình thông qua cổng VGA cần xây dựng hệ thống Qsys phát hiện khuôn mặt trên Kit DE10 thì đề tài đồ án cần thực hiện các nhiệm vụ sau đây:
Nội dung 1: Tìm hiểu về dòng Kit Soc FPGA - DE10 standard
Nội dung 2: Tìm hiểu về Qsys và project GHDR từ Intel
Nội dung 3: Tìm hiểu về giải thuật Haar Cascade sử dụng trong OpenCV
Nội dung 4: Thực hiện thiết kế phần cứng hệ thống Qsys trên kit DE10 dựa trên nền tảng mô hình tham chiếu của Intel Golden Hardware Reference Design (GHRD)
Nội dung 5: Thực hiện thiết kế hiện thực hệ thống SoC, thực hiện demo trên kit phần mềm xử lý nhận diện khuôn mặt dựa trên giải thuật Haar Cascade
Nội dung 6: Hiện thực hệ thống SoC, thực hiện demo trên kit
LÝ THUYẾT
Tìm hiểu về dòng KIT SoC FPCA – DE10 Standard
FPGA là viết tắt của Field Programmable Gate Array, có nghĩa là mảng cổng logic có thể lập trình trên mạch FPGA là một loại vi mạch bán dẫn, trong đó phần lớn chức năng bên trong thiết bị có thể được thay đổi; có thể được thay đổi bởi kỹ sư thiết kế, thay đổi trong quá trình lắp ráp PCB, hoặc thậm chí thay đổi sau khi sản phẩm được triển khai Những thay đổi được tạo ra bằng cách thay đổi các tín hiệu điện vào và ra được nhận, các cổng logic và flipflop được thực hiện, và cách kết nối các cổng với nhau
Một FPGA được tạo thành từ một lưới các logic có thể cấu hình, được gọi là module logic thích ứng (ALM), và các khối chuyên biệt, như khối xử lý tín hiệu số (DSP) và khối bộ nhớ truy cập ngẫu nhiên (RAM) Các khối lập trình này được kết hợp thông qua các liên kết định tuyến có thể cấu hình để thực hiện các mạch số hoàn chỉnh
Bộ nhớ tĩnh đầu tiên dựa trên FPGA (thường được gọi là SRAM trên nền FPGA) được đề xuất bởi Wahlstrom vào năm 1967 Sau đó bản thương mại của FPGA được Xilinx giới thiệu vào năm 1984 Lúc này nó gồm có một mảng của các khối logic có thể tái cấu hình – Configurable Logic Blocks (CLBs) và các đầu vào ra – I/O (input/output) Chip FPGA đầu tiên chứa 64 CLBs và 58 I/Os Ngày nay, FPGA có thể chứa khoảng 330,000 CLBs và khoảng 1100 I/Os Phần lớn các sản phẩm FPGA trên thị trường hiện nay đều dựa trên công nghệ SRAM với 2 hãng sản xuất lớn nhất là Xilinx và Altera Ngoài ra còn có các hãng khác sản xuất FPGA nhưng với mục đích chuyên dụng (Atmel, Actel, Lattice, SiliconBlue, )
Kiến trúc cơ bản của FPGA bao gồm 3 thành phần chính: khối logic có thể tái cấu hình, Configurable Logic Blocks (CLBs) thực hiện các chức năng logic; các kết nối bên trong, Porgrammable Interconnect có thể lập trình để kết nối các đầu vào và đầu ra của các CLB và các khối I/O bên trong; các khối I/O cung cấp giao tiếp giữa các ngoại vi và các được tín hiêu bên trong
Khối logic có thể tái cấu hình: Đây là một trong những ưu điểm lớn nhất của FPGA, mục đích của việc lập trình khối logic trong FPGA là để cung cấp các tính toán và các phần tử
4 nhớ cơ bản được sử dụng trong hệ thống số Một phần tử logic cơ bản gồm một mạch tổ hợp có thể lập trình, một Flip-Flop hoặc một chốt (latch) Ngoài khối logic cơ bản đó, nhiều Chip FPGA hiện nay gồm một hỗn hợp các khối khác nhau, một số trong đó chỉ được dùng cho các chức năng cụ thể, chẳng hạn như các khối bộ nhớ chuyên dụng, các bộ nhân (multipliers) hoặc các bộ ghép kênh (multiplexers) Tất nhiên, cấu hình bộ nhớ được sử dụng trên tất cả các khối logic để điều khiển các chức năng cụ thể của mỗi phần tử bên trong khối đó
Kết nối có thể lập trình: Các liên kết trong một FPGA dùng để liên kết các khối logic và I/O lại với nhau để tạo thành một thiết kế Bao gồm các bộ ghép kênh, các transistor và cổng đệm ba trạng thái Nhìn chung, các transistor và bộ ghép kênh được dùng trong một cụm logic để kết nối các phần tử logic lại với nhau, trong khi đó cả ba đều được dùng cho các cấu trúc định tuyến bên trong FPGA Một số FPGA cung cấp nhiều kết nối đơn giản giữa các khối logic, một số khác cung cấp ít kết nối hơn nên định tuyến phức tạp hơn
Khối I/O liên kết: I/O cung cấp giao tiếp giữa các khối logic và kiến trúc định tuyến đến các thành phần bên ngoài Một trong những vấn đề quan trọng nhất trong thiết kế kiến trúc I/O là việc lựa chọn các tiêu chuẩn điện áp cung cấp và điện áp tham chiếu sẽ được hỗ trợ Theo thời gian, các kiến trúc FPGA cơ bản đã được phát triển hơn nữa thông qua việc bổ sung các khối chức năng đặc biệt có thể lập trình, như bộ nhớ trong (Block RAMs), logic số học (ALU), bộ nhân, DSP-48 và thậm chí là bộ vi xử lý nhúng được thêm vào do nhu cầu của các nguồn tài nguyên cho một ứng dụng Kết quả là nhiều FPGA ngày nay có nhiều nguồn tài nguyên hơn so với các FPGA trước đó
Ngôn ngữ mô tả phần cứng (Hardware Description Language): Ngôn ngữ mô tả phần cứng bao gồm VHDL, Verilog, SystemC và Handle-C thường được sử dụng để lập trình FPGA VHDL và Verilog phát triển như là một chuẩn công nghiệp và là hai ngôn ngữ phổ biến nhất hiện nay Ngôn ngữ nào cũng tốt nhưng có một điều chắc chắn là Xilinx ISE và Altera Quartus đều hỗ trợ VHDL và Verilog
2.1.3 Ứng dụng FPGA Ứng dụng của FPGA bao gồm: xử lý tín hiệu số DSP, các hệ thống hàng không, vũ trụ, quốc phòng, tiền thiết kế mẫu ASIC (ASIC prototyping), các hệ thống điều khiển trực quan, phân tích nhận dạng hình ảnh, nhận dạng tiếng nói, mật mã học, mô hình phần cứng máy tính, …
Do tính linh động cao trong quá trình thiết kế cho phép FPGA giải quyết lớp những bài toán phức tạp mà trước kia chỉ nhờ phần mềm máy tính, ngoài ra nhờ mật độ cổng logic lớn FPGA được ứng dụng cho những bài toán đòi hỏi khối lượng tính toán lớn và dùng trong các hệ thống làm việc theo thời gian thực
System on Chip là hệ thống mạch tích hợp bao gồm tất cả các thành phần cần thiết được tích hợp trên 1 chip duy nhất Các thành phần này có thể bao gồm mạch số (digital), mạch analog và sự pha trộn giữa hai mạch này (mixed-signal)
Ví dụ một SoC dùng để xử lý âm thanh có thể bao gồm các thành phần audio receiver (bộ thu nhận audio), bộ ADC (chuyển đổi từ tín hiệu analog sang tín hiệu digital), bộ vi xử lý, bộ điều khiển vùng nhớ (memory) và các thành phần điều khiển ra vào khác Tất cả được tích hợp vào một SoC duy nhất
System on Chip là một mức phát triển cao hơn của thiết kế ASIC (Application Specific Integrated Circuit) Tuy nhiên, với sự phát triển nhanh chóng của ngành công nghiệp bán dẫn và các ứng dụng đi kèm, hệ thống chip ASIC hay là SoC có thể được hiểu là gần tương đương nhau
Những lợi thế chính của các thiết bị SoC là chi phí thấp hơn, giảm đáng kể kích thước, và giảm điện năng tiêu thụ của hệ thống Hệ thống kỹ thuật số bằng cách sử dụng SoC thiết kế, như là những người được sử dụng trong các sản phẩm cầm tay kỹ thuật số, các hệ thống kỹ thuật số được xây dựng trên một trong một gói có nhiều chip Khi tiến công nghệ, tích hợp của các phần tử khác nhau trong một thiết kế SoC trở nên ngày càng phức tạp Một thiết bị tích hợp SoC vào một chip duy nhất nhiều thành phần của một hệ thống điện tử phức tạp, chẳng hạn như một bộ tiếp nhận không dây SoC các thiết bị sẽ giảm kích thước đi rất nhiều, chi phí và tiêu thụ điện năng của hệ thống Một hệ thống trên chip có thể bao gồm một đơn vị logic cấu hình Các đơn vị logic cấu hình bao gồm một bộ xử lý, interface, và logic lập trình trên cùng một chất nền Một hệ thống-trên-chip được thiết kế tích hợp nhiều thiết kế độc lập VLSI (lõi) để cung cấp đầy đủ chức năng cho một ứng dụng
1.3 Tổng quan Kit DE10-standard
Tìm hiểu về Qsys và project GHDR từ Intel
Công cụ Qsys cho phép người dùng kết hợp một hệ thống với nhau bằng cách sử dụng các thành phần được tạo sẵn hoặc tùy chỉnh Các hệ thống như vậy thường bao gồm một hoặc nhiều bộ xử lý, giao diện bộ nhớ, cổng I / O và phần cứng tùy chỉnh khác Hệ thống do Qsys tạo ra có thể được đưa vào như một phần của mạch lớn hơn và được triển khai trên bảng FPGA, chẳng hạn như Altera DE-series Ví dụ về một hệ thống như vậy được mô tả trong Hình 8, trong đó phần của hệ thống được tạo bởi công cụ Qsys được đánh dấu bằng màu xanh lam
Hình 8 Altera DE-series board
Mỗi thành phần trong hệ thống, được gọi là thành phần Qsys, tuân theo ít nhất một trong các Giao diện Avalon được Qsys hỗ trợ Với giao diện được xác định cho thành phần, Qsys có thể xây dựng một cấu trúc kết nối, được gọi là Avalon Interconnect, cho phép các thành phần trao đổi dữ liệu Công cụ Qsys có thể tạo ra một hệ thống dựa trên tập hợp các thành phần và thông số người dùng đã chọn Hệ thống được tạo chứa mã Verilog hoặc VHDL cho từng thành phần và cấu trúc kết nối, cho phép nó được tổng hợp, đặt và định tuyến cho thiết bị FPGA
2.2 Thành phần Qsys là gì?
Thành phần Qsys là một mạch con phần cứng có sẵn như một thành phần thư viện để sử dụng trong công cụ Qsys Thông thường, nó chứa hai phần: các mô đun phần cứng bên trong và các Giao diện Avalon bên ngoài Các mô-đun bên trong là các mạch thực hiện chức năng mong muốn của thành phần Qsys, trong khi các Giao diện Avalon được thành phần sử dụng để giao tiếp với các mô-đun phần cứng bên ngoài thành phần
Các loại giao diện Avalon:
• Avalon Clock Interface – an interface that drives or receives clocks
• Avalon Reset Interface – an interface that provides reset capability
• Avalon Memory-Mapped Interface (Avalon MM) – an address-based read/write interface which is typical of master-slave connections
• Avalon Streaming Interface (Avalon-ST) – an interface that supports unidirectional flow of data
• Avalon Conduit Interface – an interface that accommodates individual signals or groups of signals that do not fit into any of the other Avalon Interface types You can export the conduit signals to make connections external to the Qsys system
2.3 Project GHRD (Golden Hardware Reference Design)
Golden Hardware Reference Design sử dụng các ngoại vi trong vùng FPGA một cách tối thiểu vì phía HPS đã cung cấp cho ta rất nhiều lựa chọn các ngoại vi như Ethernet, UART, SDRAM, SD/MMC Các giao tiếp HPS-FPGA và FPGA-HPS được cấu hình với độ rộng dữ liệu là 64 bit Thiết kế GHRD này bao gồm các thành phần như sau:
• 64KB of on-chip memory
• JTAG to Avalon master bridges
• Interrupt capturer for use with System Console
Thiết kế trên sử dụng cầu nối HPS-FPGA, FPGA-HPS và Lightweight HPS-FPGA, đồng thời, cấu trúc này cho thấy những ngoại vị được hỗ trợ trong mỗi phần FPGA và phần HPS như JTAG, Interrupt, ROM, RAM, DDR, …
Các thành phần IP trong project GHRD:
Hình 9 Hình ảnh mô tả cấu trúc GHRD cung cấp từ terrasic
HPS viết tắt từ Hard Processing System, đây là hệ thống xử lý của SoC Altera Hệ thống xử lý này bao gồm các vi xử lý ARM và các ngoại vi đi kèm Vi xử lý ARM trên SoC của Cyclone 5 là một cặp ARM Cortex-9 Ngoài MPU Subsystem của ARM Cortex-9, HPS còn bao gồm các ngoại vi khác như PLLs, bộ điều khiển Flash Controllers, SDRAM Controllers, bộ nhớ on-chip, v.v
Chức năng các Bridge trong HPS:
• Lightweight HPS-to-FPGA Bridge:Cho phép master từ HPS truy cập đến slave ánh xạ bộ nhớ các thành phần ở FPGA.Thông thường MPU ở HPS truy cập cầu nối này thực hiện các truy cập vào thanh ghi trạng thái và điều khiển tới các ngoại vi trong FPGA.Lưu ý : không sử dụng cầu này để truy cập vào memory FPGA
• HPS- to -FPGA Bridge: sử dụng để kết nối trực tiếp bộ nhớ của FPGA đến HPS Lưu ý: truy cập thanh ghi trạng thái và điều khiển của FPGA không được sử dụng ở cầu này và sẽ được chuyển đến sử dụng ở Lightweight HPSto-FPGA Bridge
• FPGA- to – HPS Bridge: cho phép master từ FPGA truy cập vào bộ nhớ và ngoại vi bên trong HPS
2.3.2 System ID Peripheral Intel FPGA IP
Lõi ID hệ thống với giao diện Avalon® là một thiết bị chỉ đọc đơn giản cung cấp cho các hệ thống Trình thiết kế nền tảng một mã định danh duy nhất Các hệ thống bộ xử lý sử dụng lõi ID hệ thống để xác minh rằng chương trình thực thi được biên dịch nhằm mục tiêu vào phần cứng thực được định cấu hình trong FPGA đích Nếu ID dự kiến trong tệp thực thi không khớp với lõi ID hệ thống trong FPGA, có thể phần mềm sẽ không thực thi chính xác
Có hai cách cơ bản để sử dụng lõi ID hệ thống:
• Xác minh ID hệ thống trước khi tải phần mềm mới xuống hệ thống Phương pháp này được sử dụng bởi các công cụ phát triển phần mềm, chẳng hạn như môi trường phát triển tích hợp Nios® II (IDE), Nios® II IDE kiểm tra xem lõi ID hệ thống trong phần cứng có khớp với ID hệ thống dự kiến của phần mềm hay không trước khi tải xuống chương trình để chạy hoặc gỡ lỗi
• Kiểm tra ID hệ thống sau khi đặt lại Nếu một chương trình đang chạy trên phần cứng không phải là hệ thống Trình thiết kế nền tảng dự kiến, chương trình có thể không hoạt động hoàn toàn Nếu chương trình không gặp sự cố, nó có thể hoạt động sai theo những cách tinh vi khó gỡ lỗi Để tránh trường hợp này, một chương trình có thể so sánh ID hệ thống dự kiến với lõi ID hệ thống và báo lỗi nếu chúng không khớp
Trong project GHDR: đóng vai trò Kiểm tra, xác minh ID cho hệ thống tránh thực hiện sai khó gỡ lỗi khi sai ID hệ thống
2.3.3 JTAG to Avalon Master Bridge
Cung cấp kết nối, quyền truy cập giữa hệ thống máy chủ để truy cập các IP được ánh xạ bộ nhớ và các thanh ghi trạng thái và điều khiển IP ngoại vi thông qua giao diện JTAG Trong Project GHDR đóng vai trò các khối:
Thực hiện chèn một đoạn thanh ghi giữa các đoạn phản hồi và các lệnh ánh xạ đến bộ nhớ Avalon IP này thực hiện chức năng pipeline, phân phối dữ liệu các tín hiệu câu lệnh từ bộ xử lý và tín hiệu phản hồi từ các component Ở đây tham số chờ xử lý tối đa là số lần đọc và phản hồi đang chờ xử lý được đưa vào hàng đợi, hàng đợi tối đa là 64
Trong project GHDR: dùng IP này đặt với tên mm – bridge với chức năng làm cầu nối để HPS truy cập vào gửi tín hiệu điều khiển ánh xạ đến bộ nhớ các thành phần FPGA
2.3.5 JTAG UART Intel FPGA IP
Tìm hiểu về giải thuật Haar Cascade
Haar Cascade là một thuật toán được tạo ra dựa trên những tính năng phát hiện đối tượng (có thể là khuôn mặt, mắt, tay, đồ vật, …) Triển khai ban đầu được sử dụng để phát hiện khuôn mặt chính diện và các đặc điểm như Mắt, Mũi và Miệng Hay nói cách khác Haar Cascade là một lớp model có thể giúp chúng ta nhận diện khuôn mặt (Haar Cascade face detection), Haar Cascade sử dụng các tầng Haar và sau đó sử dụng thật nhiều đặc trưng đó qua nhiều lượt (Cascade) và tạo thành một cỗ máy nhận diện khuôn mặt hoàn chỉnh
3.2 Đặc trưng giải thuật Haar Cascade
Haar Cascade sử dụng các đặc điểm hình chữ nhật để xử lý hình ảnh và phát hiện khuôn mặt Các đặc điểm hình chữ nhật tương tự như nhân được sử dụng để phát hiện các đặc điểm khác nhau của khuôn mặt như mắt và các nốt như trong hình minh họa bên dưới
Hình 10 Ba loại bộ lọc theo hình chữ nhật
Các tính năng hình chữ nhật được chạy lần lượt trên hình ảnh và tổng số pixel nằm trong phần màu trắng được trừ cho tổng số pixel nằm trong phần màu đen
Trong đó: a) Là các bộ lọc bắt các cạnh trong ảnh b) Bắt các đường thẳng trong ảnh c) Về đặc trưng 4 hình vuông
Trong hình minh họa bên dưới, đặc điểm hình chữ nhật đầu tiên đang tính toán cho sự khác biệt về cường độ giữa vùng mắt và vùng má trên khuôn mặt Và đặc điểm hình chữ nhật thứ hai là đo sự chênh lệch về cường độ giữa hai vùng mắt và sống mũi Bộ lọc Haar chỉ có thể nhìn cụ thể vào một vùng trong cửa sổ để nhận diện
Hình 11 Nhận diện khuôn mặt bằng ba loại bộ lọc
Vì vậy, sử dụng các đặc điểm hình chữ nhật này trên một hình ảnh, ta có thể tạo ra hàng nghìn điểm đặc trưng cho hình ảnh Tuy nhiên, việc tính toán tổng số pixel trong các vùng trắng và đen trong toàn bộ ảnh có thể là một hoạt động tốn kém, đặc biệt là đối với các ảnh lớn
3.3 Hoạt động của giải thuật Haar Cascade
Hình 12 Quy trình hoạt động giải thuật Haar Cascade
Bước 1: Sau khi ảnh đầu vào được gửi qua bộ phân loại, sau đó ảnh được chia thành các phần nhỏ (hoặc các cửa sổ con như trong hình minh họa)
Bước 2: Sau đó cho các phần nhỏ qua các stage từ 1 đến n, trong đó mỗi bộ phát hiện sự kết hợp của các loại đặc trưng khác nhau từ các hình ảnh (ví dụ: đường thẳng, cạnh, hình tròn, hình vuông) được truyền qua
Bước 3: Hình ảnh (hoặc hình ảnh phụ) có độ tin cậy cao nhất được phát hiện dưới dạng khuôn mặt và được gửi đến bộ tích lũy trong khi phần còn lại bị loại bỏ khỏi khung hình Do đó, Cascade tìm nạp khung hình/hình ảnh tiếp theo nếu còn lại và bắt đầu lại quá trình.
THIẾT KẾ VÀ THỰC HIỆN PHẦN CỨNG
Yêu cầu thiết kế
Đề tài lần này yêu cầu một phần cứng có chức năng thực hiện nhận, xử lý và xuất ảnh Để thực hiện được các chức năng này thì các module cần có như sau: o Cần một IP HPS để xử lý dữ liệu o Các bộ giao tiếp master để đọc/ghi dữ liệu đến vùng nhớ o Kết nối với bộ IP VGA để xuất hình ảnh sau khi xử lý ra màn hình.
Phân tích thiết kế
Trong đề tài này, được thực hiện dựa trên thiết kế GHRD cung cấp từ intel Em thực hiện tìm hiểu thiết kế đã đề cập ở phần 2.2 và từ đó kết nối thêm các IP liên quan đến VGA để có thể xuất hình ảnh ra màn hình
Hình 13 Thành Phần IP sử dụng trong hệ thống Qsys cấu hình thêm VGA vào project GHRD
❖ Chức năng các khối IP liên quan đến VGA:
Frame Buffer: Lõi IP Frame Buffer đệm các khung hình video vào RAM bên ngoài, cung cấp các tính năng sau:
• Bộ đệm các trường video liên tục và xen kẽ
• Hỗ trợ bộ đệm đôi và ba với nhiều tùy chọn giảm khung hình và lặp đi lặp lại
• Hỗ trợ tối đa 8pixel mỗi lần truyền
• Hỗ trợ bù giữa các bộ đệm có thể định cấu hình để cho phép xen kẽ tốt nhất các ngân hàng DDR để đạt hiệu quả tối đa
• Hỗ trợ độ trễ bộ đệm biến đổi được kiểm soát thời gian biên dịch hoặc thời gian chạy lên tới 4.095 khung hình
• Hỗ trợ chế độ chỉ đọc hoặc chỉ ghi
Lõi IP Frame Buffer II có hai khối cơ bản:
• Writer — lưu trữ các điểm ảnh đầu vào trong bộ nhớ
• Reader — lấy các khung hình video từ bộ nhớ và tạo chúng dưới dạng đầu ra
Clocked Video Output Intel FPGA IP:
IP cho phép chuyển đổi dữ liệu từ giao thức video phát trực tuyến Avalon được kiểm soát theo luồng thành video có xung nhịp.Đồng thời tạo thông tin đồng bộ bằng cách sử dụng điều khiển video phát trực tuyến Avalon và các gói hình ảnh đang hoạt động Còn cho phép tạo các định dạng video chạy ở các tần số khác nhau từ hệ thống.
Thực hiện phần cứng
Khi đã có được mô hình GHRD và kết nối IP VGA vào, ta thực hiện phần cứng bằng công cụ Quartus của Intel để đổ chương trình xuống kit DE10-Standard Đặc biệt, ở mục này, ta sử dụng mô hình GHRD với các IP mẫu cần có cho các kết nối giữa khối VGA, HPS, nguồn clock, … Ngoài ra, các bước cần có để thực hiện một phần cứng có khả năng đổ lên board và giao tiếp được với vi xử lý là cấu hình hệ thống FPGA thông qua các kết nối trên Qsys và biên dịch hệ thống FPGA thông qua tool Quartus bản 16.1
3.1 Cấu hình hệ thống Qsys
Các kết nối trong hệ thống mô hình tham khảo (GHRD) của Altera được thể hiện qua Hình 11 thông qua Tools > Qsys
Hình 14 Các kết nối của project GHRD trong Qsys
Khi đã cấu hình được các kết nối trong phần cứng, ta có thể tạo ra file sopcinfo theo trình tự Generate Generate HDL File sopcinfo được board sử dụng để định địa chỉ, các kết nối và độ rộng bit của dữ liệu các khối bên trong phần cứng
Hình 18 Sau khi generate file sopcinfo
Ngoài ra, để có file header của HPS được sử dụng trong thiết kế phần mềm, ta cần thực hiện một file script tại project DE10_Standard_GHRD có nội dung như Hình 16, với PATH là đường dẫn trỏ tới mục bin của Quartus Sau khi hoàn thành, cần bật tool SoC EDS, trỏ đến đường dẫn chứa script và thực hiện lệnh /generate_hps_qsys_header.sh
Hình 19 Nội dung script tạo header cho HPS trong Qsys
Hình 20 Quá trình chạy script
Hình 21 Sau khi generate file header
Hình 22 Nội dung file hps_0.h vừa tạo
3.2 Biên dịch Để hệ thống FPGA có thể được nạp lên board DE10-Standard nhằm hiện thực hóa hệ thống, cần biên dịch (compile) hệ thống bằng Start Compilation
Hình 23 Quá trình biên dịch hệ thống FPGA
Hình 24 Quá trình biên dịch hệ thống FPGA
Hình 25 Quá trình biên dịch hệ thống FPGA Ở đề tài này, sau khi biên dịch thì hệ thống FPGA đã tiêu tốn các loại tài nguyên phần cứng bao gồm các module logic có thể lập trình được (ALM), bộ xử lý tín hiệu số (DSP), các khối RAM, bộ nhớ on-chip, vòng khóa pha (PLL) và vòng khóa độ trễ (DLL) theo Bảng 3
Bảng 3 Tài nguyên hệ thống FPGA tiêu tốn
Loại tài nguyên Giải thuật đề nghị Tài nguyên của Cyclone V
Ngoài ra, sau khi Compile thì hệ thống sẽ xuất file sof File này được dùng để nạp hệ thống phần cứng lên board
Hình 26 File sof được tạo sau quá trình biên dịc
THIẾT KẾ VÀ THỰC HIỆN PHẦN MỀM (NẾU CÓ)
Thiết kế phần mềm
Thông qua việc thực hiện hệ thống FPGA, ta có code C/C++ để điều khiển vi xử lý ARM Ngoài ba chức năng chính đã nêu ra ở phần yêu cầu thiết kế thì chương trình phần mềm cần phải được thực hiện theo quy trình như sau:
• Đọc ảnh đầu vào từ camera
• Chuyển từ ảnh màu sang ảnh xám và cân bằng sáng
• Phát hiện khuôn mặt, đôi mắt và khoanh vùng dữ liệu
• Trả kết quả nhận diện
Lưu đồ chương trình phần mềm chính được chú thích như Hình 4.4 đại diện cho hoạt động của hệ thống trong suốt quá trình từ nhận diện khuôn mặt đến việc trả kết quả nhận diện
Hình 27 Lưu đồ phần mềm nhận diện khuôn mặt thực hiện trên vi xử lý ARM
Giải thích lưu đồ: Đầu tiên sau khi nhận ảnh từ đầu vào ảnh sẽ được chuyển về dạng frame, từ đó dùng hàm trong thư viện open cv chuyển ảnh màu sang ảnh xám để tăng tính xác của hình Sau đó kiểm tra xem trong khung hình có khuôn mặt người không, nếu không thì hiển thị hình ảnh ra màn hình hình ảnh từ camera, còn nếu có tiếp tục kiểm tra xem bêntrong có 2 mắt người không, nếu không thì hiển thị hình ảnh ra màn hình hình ảnh từ camera và kèm theo khung khoanh vùng mặt, còn nếu đều thõa mãn hiển thị hình ảnh ra camera và khung tròn khoanh vùng mặt và mắt Khi đã hiển thị lên màn hình sẽ kiểm tra có nhấn nút esc không để kết thúc quá trình thực hiện nếu không sẽ quay lại thực hiện lại quá trình
Ngoài ra, nhờ những định hướng của đề tài, việc phân chia cấu trúc chương trình phần mềm theo mục đích sử dụng với module objectDetection và giải thuật Haar Cascade được khai thác bởi OpenCV Quá trình thực hiện phần mềm diễn ra trên môi trường Linux được khởi tạo ở V (1.1)
KẾT QUẢ THỰC HIỆN
Khởi tạo hệ thống SoC
1.1 Khởi tạo môi trường linux trên board
Việc tạo môi trường trên board là vô cùng cần thiết để hiện thực một dự án SoC lên board FPGA vì khi có môi trường thì việc giao tiếp giữa người dùng với board sẽ dễ dàng hơn Một lưu ý nhỏ rằng bước này có thể thực hiện trước hoặc sau khi nạp code phần cứng lên board nhưng bắt buộc phải trước khi thiết lập các kết nối trên board
Bước đầu tiên để tạo môi trường cho board, cần chuẩn bị một thẻ nhớ microSD và format bằng phần mềm SD Card Formatter Tiếp theo là burn hệ điều hành vào thẻ SD trên bằng phần mềm Win32 Disk Imager Ở đây, chọn file với tên là DE10_Standard_LXDE.img như Hình 25; với DE10_Standard_LXDE.img được tải từ trang của nhà sản xuất Terasic Sau khi burn hệ điều hành, ta gắn thẻ nhớ SD vào board và bật nguồn
Hình 28 Phần mềm format thẻ nhớ
Sau đó thực hiện cấu hình thẻ SD sử dụng được cho kit de10 bằng ứng dụng Win32DiskImager
Hình 29 Các bước khởi tạo môi trường Linux
Sau khi nhấn Write, quá trình hoàn tất trong thẻ SD xuất hiện các file như sau:
Hình 30 Các bước khởi tạo môi trường Linux
1.2 Thiết lập kết nối máy tính với board
Khi đã có môi trường Linux trên board, ta cần kết nối board với laptop thông qua cổng UART to USB để thực hiện một số các phép điều khiển
Hình 31 Các bước thiết lập kết nối máy tính tới board
Kết nối kit với laptop thông qua cổng UART to USB
Bật phần mềm PuTTy và cấu hình cho serial 115200 baudrate, no parity, 1 stop bit
Hình 32 Các bước thiết lập kết nối máy tính tới board Để vào được root của DE10_Standard board nhập root Password nhập: nhấn enter
Hình 33 Các bước thiết lập kết nối máy tính tới board
Tiếp đến, ta tạo 1 folder làm việc mới, ta nhập lệnh: mkdir /mnt/FAT Để truy cập vào thư mục mới vừa tạo, ta nhập lệnh: cd /mnt/FAT
Hình 34 Các bước thiết lập kết nối máy tính tới board
Truy cập vào vùng nhớ dev để xem danh sách và tìm vùng nhớ để sử dụng:
Hình 35 Các bước thiết lập kết nối máy tính tới board
Gán vùng nhớ trên thẻ nhớ vào một vùng nhớ có sẵn trên board bằng lệnh: mount /dev/mmcblk0p1 /mnt/FAT
Sau đó truy cập lại vào /mnt/FAT và kiểm tra các file trên thể SD đã được gán chưa
Hình 36 Các bước thiết lập kết nối máy tính tới board
Thực hiện copy folder OpenCV vào mục /home/root sử dụng lệnh: cp -r OpenCV /home/root/
Sau đó quay lại root để kiểm tra folder đã được copy chưa
Hình 37 Các bước thiết lập kết nối máy tính tới board
Màn hình hiển thị đã copy file OpenCV ra /home/root/ thành công
Hình 38 Các bước thiết lập kết nối máy tính tới board
Vận hành hệ thống SoC
2.1 Vận hành phần cứng Để vận hành phần cứng trên board, việc nạp các file sopcinfo, rbf và dtb vào phân vùng boot của board và thực hiện đổ file sof thông qua USB BLASTER là cần thiết Thường thì các project trên FPGA sau khi biên dịch sẽ tạo ra file sof để nạp vào kit qua JTAG-UART port thông qua Programmer Device Nhưng ở project này, vi xử lý ARM (HPS) lại cần file .rbf để boot hệ thống trên kit thông qua SD card Ta có thể convert từ file sof sang rbf (Raw Binary File) để nhúng vào hệ thống boot của board Việc convert file thông qua script sof_to_rbf.bat nằm trong mục output_files của project Để thực hiện tạo file rbf, ta sử dụng tool SoC EDS và chạy hàm /sof_to_rbf.bat tại đường dẫn này
Hình 39 Vị trí của script tạo file rbf
Hình 40 Nội dung của script tạo file rbf
Hình 41 Quá trình chạy script tạo file rbf
Hình 42 File rbf sau khi được tạo
Còn về file dtb, ta sử dụng file soc_system_board_info.xml từ nhà sản xuất để tạo ra file dtb với hàm sau trên tool SoC EDS: sopc2dts -i soc_system.sopcinfo -o soc_system.dtb -t dtb -b soc_system_board_info.xml -b hps_common_board_info.xml –c
Hình 43 File dtb sau khi t ạo Để board DE10-Standard boot được hệ thống phần cứng đã biên dịch, ta cần copy các file soc_system.dtb, soc_system.sopcinfo và soc_system.rbf vào mục boot của thẻ nhớ, sau đó cắm vào board
Copy Makefile, OpenCV chứa file C để điều khiển ARM, các file dtb, rbf và sopcinfo sinh ra trước đó trong thư mục DE10_Standard_GHRD vào thẻ SD
Hình 44 Phân vùng boot trên thẻ nhớ
Ngoài việc copy file vào phân vùng boot, để nạp được lên board hệ thống FPGA sau khi biên dịch project DE10_Standard_GHRD, ta thực hiện kết nối cổng BLASTER của kit với laptop và nạp hệ thống đó (.sof) thông qua Program Device trên Quartus
Hình 45 Kết nối trên board
Hình 46 Các bước nạp phần cứng lên board
Hình 47 Các bước nạp phần cứng lên board
Tiếp theo, nhấn Hardware Setup để chọn BLASTER USB của DE10 và Close Kế tiếp, chọn Auto Detect để lựa chọn mã thiết bị, “5CSXFC6D6” đối với DE10- Standard Sau đó, màn hình sẽ hiện hai thành phần bên trong Cyclone V là HPS và FPGA
Hình 48 Các bước nạp phần cứng lên board
Tiếp theo, nhấn chuột phải vào Device có tên “5CSXFC6D6” và Change File Tại giao diện chọn file nạp, chọn file sof như sau rồi nhấn Start Nếu thanh Progress báo 100% (Successful) thì việc nạp thiết kế phần cứng lên board đã thành công
Hình 49 Các bước nạp phần cứng lên board
2.2 Vận hành phần mềm Để vận hành được phần mềm cần đảm bảo thực hiện đúng và đẩy đủ qui trình như bên dưới
2.2.1 Đảm bảo đầy đủ các file cần thiết
Trước tiên, ta phải chắc chắn các file phần mềm cần thiết cho đề tài đã được khởi tạo đầy đủ vào môi trường Linux đã khởi tạo Cụ thể, các định dạng chúng ta cần như sau: các file vận hành/điều khiển phần cứng (.cpp), các file trọng số chứa giải thuật để nạp vào hệ thống FPGA thực hiện nhận diện khuôn mặt
Hình 50 Các bước vận hành phần mềm trong hệ thống SoC
Nội dung của file Makefile, chứa các câu lệnh để biên dịch code C sang file thực thi được chú thích như hình bên dưới
Hình 51 Nội dung file Makefile
Trong đề tài này, ta cần phải có thư viện OpenCV mới có thể chạy được và nội dung của file code C cũng phải include thư viện OpenCV vào
Hình 52 Include thư viện OpenCV
Ngoài ra, để cài đặt OpenCV ta sử dụng các lệnh sau:
Sau khi cài đặt xong thì dùng câu lệnh pkg-config –modervision opencv để xem version của thư viện OpenCV:
Hình 53 Version của OpenCV Để xem đường dẫn và chứa thư viện OpenCV để người dùng có thể include thư viện vào ta sử dụng câu lệnh pkg-config —cflags opencv và pkg-config —-libs opencv:
Hình 54 Thư mục chứa thư viện của OpenCV
2.2.4 GNU Toolchain Để có thể chạy được đề tài này, ta cần phải có file thực thi để chạy được trên môi trường Linux Để có thể biên dịch từ file code C sang file thực thi để chạy được trên môi trường Linux, ta có thể kết nối giữa máy tính với Board thông qua phần mềm puTTy Đồng thời, ARM Cortex-A9 cũng đóng vai trò là GNU Toolchain biên dịch từ file code C sang file thực thi
Mở puTTy vào thư mục OpenCV/face_detection Trên giao diện Terminal, dùng lệnh make để hệ thống biên dịch và xuất file thực thi
Hình 55 Các bước vận hành phần mềm trong hệ thống SoC
Sau khi chạy lệnh make ta được file thực thi như hình sau:
Hình 56 Các bước vận hành phần mềm trong hệ thống SoC
Việc thực hiện demo nhằm mục đích kiểm chứng lại giải thuật phần cứng lẫn phần mềm có hoạt động được hay không Tiếp đến, để chạy được demo, ta cần lắp đặt kit với các thiết bị gồm màn hình, chuột, bàn phím và camera; sau khi khởi động, giao diện trên màn hình hiển thị như Hình 56
Hình 57 Quá trình thực hiện demo
Tiếp theo, bật file objectDetection2 trong /home/root/ (đã thực hiện ở mục 5.2.2) và chọn Execute in Terminal
Hình 58 Các bước vận hành phần mềm trong hệ thống SoC
Ta được kết quả như hình bên dưới:
Hình 59 Kết quả quá trình thực hiện demo
Khi chạy chương trình, hình ảnh được hệ thống FPGA xử lý, khi nhận diện được khuôn mặt thì FPS sẽ giảm xuống 5 FPS so với khi không nhận diện là 8 FPS Để tính FPS của giải thuật Haar Cascade bằng cách sử dụng thư viện OpenCV, ta sử dụng hàm cv2.getTickCount() để đo thời gian xử lý của giải thuật trên một tập dữ liệu ảnh Sau đó, bạn có thể sử dụng hàm cv2.getTickFrequency() để lấy tần số của bộ đếm Cuối cùng, bạn có thể tính FPS bằng cách chia tần số cho thời gian xử lý