Luận văn thạc sỹ - Đề tài: "Xây dựng hệ thống hiển thị thông tin hình ảnh thông qua mạng Internet" - Đại học Quốc gia Hà Nội-Trường Đại học Công nghệ - Năm 2014 - Vũ Ngọc Tuyên
Bạn đang xem 20 trang mẫu của tài liệu "Luận văn thạc sỹ - Đề tài: "Xây dựng hệ thống hiển thị thông tin hình ảnh thông qua mạng Internet" - Đại học Quốc gia Hà Nội-Trường Đại học Công nghệ - Năm 2014 - Vũ Ngọc Tuyên", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- luan_van_thac_sy_de_tai_xay_dung_he_thong_hien_thi_thong_tin.pdf
Nội dung text: Luận văn thạc sỹ - Đề tài: "Xây dựng hệ thống hiển thị thông tin hình ảnh thông qua mạng Internet" - Đại học Quốc gia Hà Nội-Trường Đại học Công nghệ - Năm 2014 - Vũ Ngọc Tuyên
- ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Vũ Ngọc Tuyên XÂY DỰNG HỆ THỐNG HIỂN THỊ THÔNG TIN HÌNH ẢNH THÔNG QUA MẠNG INTERNET LUẬN VĂN THẠC SỸ CÔNG NGHỆ ĐIỆN TỬ - VIỄN THÔNG HÀ NỘI - 2014
- ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Vũ Ngọc Tuyên XÂY DỰNG HỆ THỐNG HIỂN THỊ THÔNG TIN HÌNH ẢNH THÔNG QUA MẠNG INTERNET Ngành: Công nghệ Điện tử - Viễn thông Chuyên ngành: Kỹ thuật Điện tử Mã số: 60 52 02 03 LUẬN VĂN THẠC SỸ CÔNG NGHỆ ĐIỆN TỬ - VIỄN THÔNG NGƯ ỜI HƯỚNG DẪN KHOA HỌC: PGS.TS. Trần Xuân Tú HÀ NỘI - 2014
- LỜI CAM ĐOAN Tôi xin cam đoan nội dung của luận văn “Xây dựng hệ thống hiển thị thông tin hình ảnh thông qua mạng Internet” là sản phẩm do tôi thực hiện dưới sự hướng dẫn của PGS.TS. Trần Xuân Tú. Trong toàn bộ nội dung của luận văn, những điều được trình bày hoặc là của cá nhân hoặc là được tổng hợp từ nhiều nguồn tài liệu. Tất cả các tài liệu tham khảo đều có xuất xứ rõ ràng và được trích dẫn hợp pháp. Tôi xin hoàn toàn chịu trách nhiệm và chịu mọi hình thức kỷ luật theo quy định cho lời cam đoan của mình. Hà Nội, ngày 11 tháng 11 năm 2014 TÁC GIẢ Vũ Ngọc Tuyên 2
- LỜI CẢM ƠN Lời đầu tiên, em xin gửi lời cảm ơn tới PGS.TS. Trần Xuân Tú đã tận tình hướng dẫn, cung cấp tài liệu tham khảo, kinh nghiệm và những ý kiến đóng góp quý báu. Em cũng xin cảm ơn tới các anh em cán bộ của Phòng thí nghiệm mục tiêu Hệ thống tích hợp thông minh (SIS Lab) đã hỗ trợ và giải đáp các vướng mắc của em trong suốt quá trình nghiên cứu. Em cũng gửi lời cảm ơn đến các thầy cô trong Khoa Điện tử - Viễn thông, Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội đã truyền đạt những kiến thức bổ ích và kinh nghiệm quý báu trong suốt thời gian em học tập, nghiên cứu tại nhà trường. Cuối cùng em cũng xin gửi lời cảm ơn đến gia đình, bạn bè những người đã giúp đỡ và tạo điều kiện để em có thể hoàn thành được luận văn này. Trong thời gian thực hiện luận văn, bản thân em khó tránh khỏi nhiều thiếu sót. Em rất mong nhận được ý kiến đóng góp từ phía thầy cô và bạn bè để luận văn được hoàn thiện hơn. Em xin chân thành cảm ơn ! Học viên Vũ Ngọc Tuyên 3
- ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Vũ Ngọc Tuyên XÂY DỰNG HỆ THỐNG HIỂN THỊ THÔNG TIN HÌNH ẢNH THÔNG QUA MẠNG INTERNET LUẬN VĂN THẠC SỸ CÔNG NGHỆ ĐIỆN TỬ - VIỄN THÔNG HÀ NỘI - 2014 MỤC LỤC LỜI CAM ĐOAN 2 LỜI CẢM ƠN 3 MỤC LỤC 4 DANH MỤC HÌNH VẼ 6 DANH MỤC BẢNG BIỂU 8 DANH MỤC TỪ VIẾT TẮT 9 MỞ ĐẦU 10 CHƯƠNG 1: CƠ SỞ LÝ THUYẾT VỀ MÃ HÓA VÀ HIỂN THỊ HÌNH ẢNH 11 1.1. Cơ sở lý thuyết về mã hóa hình ảnh JPEG 11 1.1.1. Quá trình mã hóa 12 1.1.2. Chuyển đổi hệ màu 12 1.1.3. Lấy mẫu 13 1.1.4. Quá trình giải mã 14 1.2. Hiển thị hình ảnh lên màn hình chuẩn VGA 15 1.2.1. Nguyên lý quét hình ảnh 15 1.2.2. Tín hiệu màu VGA 17 1.2.3. Bộ điều khiển tín hiệu hiển thị hình ảnh – VGA core 18 1.2.4. Nguyên tắc hoạt động của bộ hiển thị hình ảnh VGA 20 CHƯƠNG 2: CÔNG NGHỆ NỀN TẢNG FPGA – PHƯƠNG PHÁP XÂY DỰNG HỆ THỐNG NHÚNG TRÊN FPGA 22 2.1. Giới thiệu công nghệ nền tảng FPGA 22 2.1.1. Kiến trúc FPGA 23 2.1.2. Ngôn ngữ lập trình mô tả phần cứng VHDL 25 2.2. Phương pháp xây dựng hệ thống nhúng trên FPGA 27 4
- 2.2.1. Trình tự thiết kế một vi mạch FPGA 27 2.2.2. Giải pháp thiết kế hệ thống sử dụng bộ công cụ của hãng Xilinx 29 CHƯƠNG 3: HỆ THỐNG HIỂN THỊ THÔNG TIN HÌNH ẢNH THÔNG QUA MẠNG INTERNET 39 3.1. Mô tả ý tưởng thiết kế hệ thống 39 3.2. Hệ thống phần cứng 40 3.2.1. Xây dựng hệ thống phần cứng trên chip 41 3.2.2. Thiết kế ngoại vi giao tiếp màn hình VGA 46 3.3. Đặc tả hệ thống phần mềm 50 3.3.1. Thiết kế chi tiết hệ thống phần mềm 51 3.3.2. Thư viện lwIP hỗ trợ truyền thông Ethernet 54 3.3.3. Thư viện giải mã ảnh JPEG – TinyJPEG 56 CHƯƠNG 4: : KẾT QUẢ THỰC NGHIỆM VÀ ĐÁNH GIÁ 59 4.1. Nền tảng thực thi hệ thống 59 4.2. Kết quả kiểm tra chức năng hệ thống 59 4.2.1. Kiểm tra kết nối Ethernet 59 4.2.2. Kiểm tra kết nối màn hình VGA, hiển thị hình ảnh 60 4.2.3. Kiểm tra kết quả giải mã hình ảnh JPEG 61 4.2.4. Kiểm tra kết nối tổng thể toàn hệ thống 61 4.3. Đánh giá giải pháp thực hiện hệ thống 62 KẾT LUẬN 63 TÀI LIỆU THAM KHẢO 64 5
- DANH MỤC HÌNH VẼ Hình 1-1: Sơ đồ quá trình mã hóa JPEG [1]. 12 Hình 1-2: So sánh hệ màu RGB và YCbCr. 13 Hình 1-3: Các kiểu lấy mẫu dữ liệu[3]. 14 Hình 1-4: Sơ đồ khối quá trình giải mã [1]. 14 Hình 1-5: Minh họa phương pháp quét hình ảnh. 15 Hình 1-6: Tín hiệu điện cho một dòng quét trên màn hình CRT [5]. 16 Hình 1-7: Chế độ điều khiển VGA 640×480 [5]. 17 Hình 1-8: Cổng kết nối VGA. 18 Hình 1-9: Các màu cơ bản [5]. 18 Hình 1-10: Kết quả hiển thị. 19 Hình 1-11: Sơ đồ khối cấu trúc của bộ hiển thị hình ảnh VGA 21 Hình 2-1: Kiến trúc chung của FPGA [2]. 23 Hình 2-2: Một Logic Block điển hình 24 Hình 2-3: Khối Logic khả trình. 24 Hình 2-4: Các kết nối khả trình . 25 Hình 2-5: Qui trình thiết kế chip dựa trên VHDL [2]. 26 Hình 2-6: Kit phát triển Spartan-3E [12] 30 Hình 2-7: Các thành phần của Kit Spartan-3E[12]. 31 Hình 2-8: Kiến trúc của Spartan 3E [12]. 32 Hình 2-9: Sơ đồ khối lõi Microblaze [11]. 33 Hình 2-10: Kiến trúc đường ống trong microblaze. 34 Hình 2-11: Hệ thống BUS điển hình của Microblaze [11]. 35 Hình 2-12: Giao diện sử dụng của công cụ XPS. 36 Hình 2-13: Giao diện sử dụng của công cụ SDK 37 Hình 3-1: Sơ đồ khối chức năng hệ thống. 39 Hình 3-2: Sơ đồ chi tiết hệ thống phần cứng. 40 Hình 3-3: Lựa chọn bo mạch. 42 Hình 3-4: Cấu hình hệ thống. 43 Hình 3-5: Cấu hình vi xử lý. 43 Hình 3-6: Cấu hình các ngoại vi của hệ thống. 44 Hình 3-7: Lựa chọn bộ nhớ đệm. 45 6
- Hình 3-8: Cấu hình ứng dụng mẫu cho hệ thống. 45 Hình 3-9: Khởi tạo lõi VGA. 46 Hình 3-10: Cấu hình bus cho lõi VGA. 47 Hình 3-11: Thiết lập tần số hoạt động của lõi VGA. 47 Hình 3-12: Tạo ra phần cứng FPGA. 49 Hình 3-13: Sơ đồ khối hệ thống tạo bởi XPS. 49 Hình 3-14: Mô hình phần mềm của hai lớp ứng dụng. 50 Hình 3-15: Mô hình triển khai hệ thống nhúng trên Spartan-3E. 50 Hình 3-16: Biểu đồ các trường hợp sử dụng. 51 Hình 3-17: Lưu đồ tiến trình hoạt động. 52 Hình 3-18: Lưu đồ truyền tập tin. 53 Hình 3-19: Lưu đồ giải mã ảnh Jpeg. 53 Hình 4-1: Kiểm tra kết nối Ethernet. 60 Hình 4-2: Kiểm tra bộ điều khiển VGA 60 Hình 4-3: Kiểm tra chương trình giải mã JPEG 61 Hình 4-4: Kiểm tra kết nối toàn hệ thống. 62 7
- DANH MỤC BẢNG BIỂU Bảng 3-1: Bảng tổng hợp tài nguyên phần cứng của hệ thống 41 Bảng 3-2: Các tín hiệu ngoại vi của lõi VGA 48 Bảng 3-3: Mô tả hàm lwip_socket [4] 54 Bảng 3-4: Mô tả hàm lwip_blind [4] 55 Bảng 3-5: Mô tả hàm lwip_close [4] 55 Bảng 3-6: Mô tả hàm khởi tạo tinyjpeg_init [4] 56 Bảng 3-7: Mô tả hàm duyệt header file tinyjpeg_parse_header [4] 56 Bảng 3-8: Mô tả hàm giải mã ảnh tinyjpeg_decode [4] 57 Bảng 3-9: Mô tả hàm đọc kích thước ảnh tinyjpeg_get_size [4] 57 Bảng 3-10: Mô tả hàm tinyjpeg_get_components [4] 58 Bảng 3-11: Mô tả hàm giải phóng bộ nhớ tinyjpeg_free [4] 58 8
- DANH MỤC TỪ VIẾT TẮT Từ viết tắt Mô tả ALU Arithmetic Logic Unit ASIC Application-Specific Integrated Circuit BMP BitMaP image file CLB Configurable Logic Block CPLD Complex Programmable Logic Devices CRT Cathode Ray Tube DCM Digital Clock Manager EDK Embedded Development Kit FPGA Field-Programmable Gate Array GIF Graphics Interchange Format GPIO General Purpose Input Output HS Horizontal Sync IEEE Institue of Electrical and Electronics Engineers IOB Input/Output Block ISE Integrated Software Environment JPEG Joint. Photographic Experts Group LCD Liquid-Crystal Display LUT Look-Up Tables PNG Portable Network Graphics RGB Red - Green - Blue RTL Register Transfer Level SDK Software Development Kit SOC System on Chip TIFF Tagged Image File Format UART Universal Asynchronous Receiver Transmitter VGA Video Graphics Array VHDL VHSIC Hardware Description Language VHSIC Very High Speed Integrated Circuit VS Vertical Sync XCL Xilinx Cache Link XPS Xilinx Platform Studio 9
- MỞ ĐẦU Việc cung cấp thông tin kịp thời tới người dùng một cách nhanh chóng và chính xác là cần thiết trong xã hội hiện đại. Với sự phát triển của công nghệ, ngày nay chúng ta có thể nhận thông tin mọi lúc, mọi nơi một cách nhanh chóng thông qua mạng Internet. Các hệ thống hiển thị thông tin truyền thống cũng đang dần được thay thế bằng các màn hình kích thước lớn có kết nối mạng. Tuy nhiên, việc truyền nhận và xử lý thông tin trước khi hiển thị phần lớn vẫn được thực hiện trên các hệ máy tính đa năng với giá thành tương đối cao. Việc xây dựng một hệ thống chuyên dụng dạng “system-on-a-chip” để thực hiện việc thu nhận thông tin hình ảnh và hiển thị là cần thiết nhằm tối ưu hoá ứng dụng và giảm giá thành sản xuất. Hệ thống này có nhiệm vụ thiết lập kết nối máy chủ thông qua mạng Internet để lấy dữ liệu hình ảnh, giải mã và truy xuất hình ảnh ra màn hiển thị tương thích với chuẩn VGA. Ứng dụng hiển thị hình ảnh thông qua kết nối Internet đang là vấn đề rất thực tế, phục vụ cho lĩnh vực truyền thông, quảng bá thông tin tại các cơ quan, đơn vị, trường học, hay các doanh nghiệp, hay thậm chí tại các khu chung cư mới hoặc các cơ quan thông tin của phường/xã. Chính vì lý do trên, em đã chọn đề tài: “Xây dựng hệ thống hiển thị thông tin hình ảnh thông qua mạng Internet” để nghiên cứu và thực hiện Luận văn Thạc sỹ của mình. Bố cục của luận văn gồm có bốn phần: Chương 1: Cơ sở lý thuyết về mã hoá và hiển thị hình ảnh. Chương 2: Công nghệ nền tảng FPGA và phương pháp xây dựng hệ thống nhúng trên FPGA Chương 3: Hệ thống hiển thị thông tin hình ảnh thông qua mạng Internet Chương 4: Kết quả thực nghiệm và đánh giá 10
- CHƯƠNG 1: CƠ SỞ LÝ THUYẾT VỀ MÃ HÓA VÀ HIỂN THỊ HÌNH ẢNH Chương đầu tiên của luận văn giới thiệu cơ sở lý thuyết mã hóa hình ảnh theo định dạng chuẩn JPEG và phương pháp hiển thị hình ảnh trên màn hình chuẩn VGA. 1.1. Cơ sở lý thuyết về mã hóa hình ảnh JPEG Trong thời đại kỹ thuật số ngày nay, hình ảnh được lưu trữ ở nhiều định dạng khác nhau như BMP, JPEG, PNG, GIF, TIFF. Trong đó, định dạng ảnh chuẩn JPEG được sử dụng phổ biến nhất trên Internet và được hầu hết các máy ảnh kỹ thuật số và phần mềm xử lý ảnh hỗ trợ tương thích. JPEG viết tắt của Joint Photographic Experts Group được công bố lần đầu vào năm 1992 dựa trên khuyến cáo ITU – T81, là một trong những phương pháp nén ảnh hiệu quả, có tỷ lệ nén tới vài chục lần. Ảnh sau khi giải nén sẽ không hoàn toàn giống như ban đầu mà chất lượng ảnh sẽ bị suy giảm sau khi giải nén. Tuy nhiên sự suy giảm này có thể khắc phục được bằng việc loại bỏ đi những thông tin dư thừa dựa trên sự nghiên cứu về thị giác của con người. Khi nghiên cứu về lý thuyết và hiển thị hình ảnh, chúng ta xét đến không gian màu YUV được tạo bởi một độ sáng và hai thành phần màu. Thị giác của con người rất nhạy cảm với thành phần Y và kém nhạy cảm với hai thành phần U và V. Dựa trên đặc tính này của mắt con người, phương pháp JPEG đã tách những thông tin dư thừa của ảnh và nén thông tin sao cho sự suy giảm tín hiệu thành phần Y là ít hơn so với hai thành phần còn lại là U và V. Phương pháp nén ảnh JPEG có công đoạn chính là chia bức ảnh thành nhiều vùng nhỏ (thông thường là 8×8 điểm ảnh) rồi sử dụng phép biến đổi cosin rời rạc để biến đổi những vùng này thành dạng ma trận có 64 hệ số thể hiện trạng thái các điểm ảnh. Hệ số đầu tiên có khả năng thể hiện trạng thái cao nhất, khả năng đó giảm nhanh với các hệ số khác. Điều đó có nghĩa là lượng thông tin của 64 điểm ảnh tập trung chủ yếu ở một số hệ số ma trận trong phép biến đổi trên. Trong giai đoạn này có sự mất mát thông tin bởi không có một phép biến đổi ngược chính xác, tuy nhiên lượng thông tin mất mát này chưa đáng kể so với các bước sau. Ma trận có được sau phép biến đổi cosin rời rạc được lược bớt sự khác nhau giữa các hệ số, đây chính là bước làm cho 11
- thông tin bị mất nhiều nhất vì những thay đổi nhỏ của các hệ số sẽ được làm tròn. Các phép biến đổi trên áp dụng với thành phần U và V nhiều hơn so với thành phần Y. Bước tiếp theo là dùng một thuật toán mã hóa khác để phân tích dãy số. Những phần tử nào được lặp lại nhiều sẽ được mã hóa bằng ký tự ngắn hơn. Với phương pháp mã hóa theo chuẩn JPEG, khi giải mã chúng ta chỉ cần làm lại các bước trên theo quá trình ngược lại cùng với các phép biến đổi ngược. 1.1.1. Quá trình mã hóa Hình 1-1: Sơ đồ quá trình mã hóa JPEG [1]. Quá trình mã hóa hình ảnh JPEG được mô tả theo Hình 1-1 [1]. Ảnh nguồn ban đầu được chia thành các khối có kích thước 8×8 điểm ảnh trước khi đưa vào khối mã hóa bao gồm DCT, lượng tử hóa và mã hóa Entropy. Kết quả của quá trình mã hóa là đầu ra hình ảnh nén JPEG. 1.1.2. Chuyển đổi hệ màu Bộ mã hóa JPEG sẽ thực hiện biến đổi hệ màu từ RGB sang YCbCr trước khi chuyển đổi DCT. Dữ liệu ảnh được đại diện bởi ba thành phần màu chính là R, G, B tương ứng ba màu cơ bản là đỏ, xanh lục, xanh dương. Mỗi màu sẽ sử dụng một byte để biểu diễn, do đó mỗi điểm ảnh cần ba bytes để biểu diễn. Như đã trình bày ở trên, mắt người nhạy cảm với sự thay đổi về độ chói và kém nhạy với những sự thay đổi về sắc độ. Thông thường trong kỹ thuật nén ảnh sử dụng biến đổi DCT các điểm ảnh sẽ được chuyển đổi từ hệ màu RGB sang YCbCr. Trong đó thành phần Y tương ứng với độ chói của điểm ảnh, hai thành phần Cb và Cr lần lượt là sự sai khác về sắc độ của hai thành phần màu xanh dương và đỏ. 12
- Công thức về sự biến đổi như sau: 푌 = 0,299푅 + 0,587 + 0,144 = −0,16874푅 − 0. ,3126 + 0,5 + 128 = 0,5푅 − 0,41869 − 0,08131 + 128 Ta có thể quan sát các thành phần R, G, B tương ứng với các thành phần Y, Cb, Cr trong bức ảnh nổi tiếng “lena” Hình 1-2: [3] Hình 1-2: So sánh hệ màu RGB và YCbCr. 1.1.3. Lấy mẫu Do mắt người nhạy cảm với thành phần Y hơn nên việc giảm thành phần sắc độ đi 50% so với thành phần độ chói Y cũng không làm giảm đi nhiều cảm nhận của mắt về sự thay đổi của hình ảnh. Có nhiều phương pháp lấy mẫu khác nhau như mô tả trên hình 1.3 [3], điển hình là lấy mẫu theo tỉ lệ 4:2:0. Tức là độ phân giải của thành phần Cb, Cr sẽ được giảm đi một nửa theo cả hai chiều dọc và chiều ngang, trong bước này ta sẽ giảm thành phần sắc độ. Cứ bốn điểm thành phần Y được chọn thì sẽ có một 13
- điểm thành phần Cb, và một điểm thành phần Cr được lựa chọn như hình 1.3.a. Một vài cách lấy mẫu khác nhau như 4:2:2 có nghĩa là hai thành phần Cb, Cr chỉ giảm đi một nữa theo chiều ngang. Hình 1-3: Các kiểu lấy mẫu dữ liệu[3]. Dấu “×” thể hiện nơi điểm thành phần Y được chọn. Dấu “o” chỉ nơi các thành phần sắc độ được chọn. 1.1.4. Quá trình giải mã Hình 1-4: Sơ đồ khối quá trình giải mã [1]. Quá trình giải mã theo mô tả trên hình 1-4 [1], dựa trên cơ sở thực hiện thuật toán ngược của quá trình mã hóa. Hình vẽ trên minh họa sơ đồ khối của quá trình giải mã JPEG. Các thành phần của bộ giải mã cũng tương tự như các thành phần của bộ mã hóa nhưng được đặt theo thứ tự ngược lại. Chuyển đổi hệ màu được thực hiện theo công thức: R = Y + 1,402 (Cr - 128) G = Y – 0,71414 (Cr - 128) – 0,34414 (Cb - 128) B = Y + 1,772 (Cb - 128) 14
- 1.2. Hiển thị hình ảnh lên màn hình chuẩn VGA Trên thị trường màn hình hiển thị có nhiều loại khác nhau, tùy theo loại màn hình được sử dụng là màn hình CRT, LCD hay plasma, chúng ta có phương pháp để hiển thị hình ảnh là khác nhau. Tuy nhiên, các loại màn hình được chế tạo theo cùng chuẩn hiển thị VGA có nguyên lý hiển thị một hình ảnh lên màn hình là giống nhau. 1.2.1. Nguyên lý quét hình ảnh Về nguyên lý của ảnh kỹ thuật số, mỗi hình ảnh được xem như một ma trận các điểm ảnh.Phương pháp quét hình ảnh là phương pháp hiển thị lần lượt các điểm ảnh này theo từng hàng một, từ trái qua phải và từ trên xuống dưới như minh họa ở hình 1.5 thay vì hiển thị đồng thời toàn bộ hình ảnh. Các đường nét liền thể hiện các dòng điểm ảnh được quét ngang màn hình. Các đường nét đứt là đường trở về của tia quét để bắt đầu một dòng quét mới. Hình ảnh quét được sau một lượt quét từ trên xuống dưới gọi là một mành quét. Trong thời gian màn hình hiển thị ảnh, cần phải đưa tới màn hình các tín hiệu điện chứa các thông tin của các điểm ảnh này. Ngoài ra, có những thời gian không hiển thị, khi tia quét trở về đầu dòng hoặc đầu mành mới. Các thông tin về hình ảnh không được đưa đến màn hình trong thời gian này mà thay vào đó là các tín hiệu đặc biệt dùng để đồng bộ dòng và đồng bộ mành. Hình 1-5: Minh họa phương pháp quét hình ảnh. Chúng ta xét một ví dụ trên hình 1-6 [5] về một dòng quét bằng tia điện tử của màn hình CRT sẽ làm rõ thêm nguyên lý quét ảnh. Màn hình được chia làm 480 dòng, mỗi dòng có 640 điểm ảnh. Xung răng cưa trên hình 1-6 có tác dụng lái tia điện tử theo chiều ngang. Mỗi một xung răng cưa ứng với một dòng, như vậy, tần số xung 15
- răng cưa tương ứng với tần số dòng. Trong phần thời gian xung răng cưa là đường dốc ổn định, tia điện tử quét ngang màn hình thể hiện hình ảnh. Phần thời gian còn lại, xung răng cưa có tác dụng lái tia điện tử trở về đầu dòng tiếp theo và đồng thời là căn cứ để sinh ra tín hiệu đồng bộ dòng HS. Xung đồng bộ dòng là một xung âm, trong khoảng thời gian tích cực mức thấp trên tín hiệu HS. Thời gian từ khi có xung đồng bộ dòng đến khi bắt đầu có tín hiệu thông tin hình ảnh gọi là “front porch”, thời gian sau khi kết thúc phần thông tin hình ảnh đến khi bắt đầu một xung đồng bộ dòng mới gọi là “back porch”. Hình 1-6: Tín hiệu điện cho một dòng quét trên màn hình CRT [5]. Hình ảnh được điều khiển quét theo chiều dọc bằng cách tạo ra xung răng cưa lái tia điện tử theo chiều dọc và tín hiệu đồng bộ mành VS với cách làm tương tự với quét dòng. Sau đây là ví dụ VGA Display Timing với chế độ 640×480: 16
- Hình 1-7: Chế độ điều khiển VGA 640×480 [5]. 1.2.2. Tín hiệu màu VGA Có ba tín hiệu màu là red, green và blue gửi tín hiệu màu sắc đế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ử để 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ừ 0V 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à ba 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. 17
- Hình 1-8: Cổng kết nối VGA. 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). Hình 1-9: Các màu cơ bản [5]. 1.2.3. Bộ điều khiển tín hiệu hiển thị hình ảnh – VGA core VGA core là ngoại vi giao tiếp với màn hình. Nhiệm vụ của VGA core là đọc thông tin về hình ảnh (thông tin màu sắc) để đưa ra các tín hiệu màu (R, G, B) và các tín hiệu đồng bộ Hsync, Vsync vào các thời điểm thích hợp, cho kết quả hiển thị như hình 1.10. 18
- Hình 1-10: Kết quả hiển thị. Vùng A, màu đen là vùng không hiển thị, sử dụng cho quét ngược vị trí hiển thị về các đầu dòng hoặc đầu mành tiếp theo. Khi vị trí hiển thi rơi vào vùng A, ở lối ra ghép nối với màn hình, các tín hiệu R, G, B không có dữ liệu và các tín hiệu Hsync, Vsync có các xung đồng bộ tại vị trí kết thúc dòng hoặc mành. Kích thước của vùng A là chiều rộng × chiều cao = 800×525 theo chế độ VGA 640×480 60Hz. Vùng B, màu xanh, là vùng hiển thị màu nền Back ground. Màu nền ở đây được quy ước là màu của pixel đầu tiên trong ảnh.Vùng B có kích thước của màn hình 640×480 điểm ảnh.Khi vị trí hiển thị rơi vào vùng này, các tín hiệu đồng bộ ở mức cao, các tín hiệu màu mang thông tin về màu nền. Vùng C, màu cam, là vùng hiển thị hình ảnh. Vùng này có kích thước thay đổi được, tối đa là 640×480 điểm ảnh. Tùy theo vị trí hiển thị ở điểm ảnh nào trong vùng C mà các tín hiệu R, G, B sẽ mang thông tin màu sắc của điểm ảnh đó. Lúc này các tín hiệu đồng bộ luôn đặt ở mức cao. Các thông tin về màu sắc của các điểm ảnh sẽ được đọc ra từ một bộ nhớ dữ liệu bên ngoài chip FPGA. 19
- 1.2.4. Nguyên tắc hoạt động của bộ hiển thị hình ảnh VGA Sơ đồ cấu trúc của bộ hiển thị hình ảnh lên VGA như trên hình 1-11. Hệ thống bên ngoài ghi giá trị pixel vào trong bộ đệm pixel. Các pixel được lấy từ bộ đệm rồi ghi vào trong thanh ghi pixel. Mỗi pixel có 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 bit 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ộ được dùng để tạo các xung đồng bộ đứng và nằm ngang. Bộ horizontal 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, 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. 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. 20
- Hình 1-11: Sơ đồ khối cấu trúc của bộ hiển thị hình ảnh VGA 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. Kết luận: Chương đầu tiên của Luận văn đã giới thiệu cơ sở lý thuyết về mã hóa hình ảnh theo định dạng chuẩn JPEG, từ việc phân tích tìm hiểu quá trình mã hóa, chúng ta sẽ có cơ sở để thực thi việc giải mã hình ảnh JPEG chính là một phần nội dung yêu cầu của đề tài Luận văn. Chương này cũng đã trình bày phương pháp hiển thị hình ảnh trên màn hình chuẩn VGA thông qua nguyên lý quét hình ảnh và các tín hiệu màu. Để thực hiện việc hiển thị hình ảnh lên màn hình cần có bộ điều khiển tín hiệu tạo các xung đồng bộ đứng và xung đồng bộ ngang để đưa các dòng pixel trong bộ đệm đã được chuyển thành các tín hiệu Red, Green, Blue đến bộ DAC video bên ngoài. 21
- CHƯƠNG 2: CÔNG NGHỆ NỀN TẢNG FPGA – PHƯƠNG PHÁP XÂY DỰNG HỆ THỐNG NHÚNG TRÊN FPGA Chương thứ hai của luận văn sẽ đưa ra những vấn đề cơ bản của công nghệ nền tảng FPGA và giới thiệu về phương pháp xây dựng một hệ thống nhúng trên nền FPGA sử dụng ngôn ngữ mô tả phần cứng VHDL. 2.1. Giới thiệu công nghệ nền tảng FPGA Tên gọi FPGA viết tắt của Field Programable Gate Arrays, dùng để chỉ một thiết bị bán dẫn bao gồm các khối logic lập trình được gọi là "Logic Block" và các kết nối khả trình “Programmable Interconnect”. Các khối logic có thể được lập trình để thực hiện các chức năng của các khối logic cơ bản như AND, XOR hoặc các chức năng kết hợp phức tạp hơn như mã hóa, giải mã. Các khối logic cũng có thể bao gồm cả các phần tử nhớ như các Flip-Flop hay những bộ nhớ hoàn chỉnh hơn như RAM. Các kết nối khả trình cho phép các khối logic có thể nối với nhau theo thiết kế của hệ thống giống như việc đi dây trong một bảng mạch điện tử thông thường. Hiện nay, một số kiến trúc FPGA có thể cho phép cấu hình lại từng phần (partial re-configuration), một phần của thiết kế được cấu hình lại ngay cả khi những thiết kế khác vẫn tiếp tục hoạt động. FPGA còn có một ưu điểm khi có thể tích hợp các bộ xử lý mềm hay vi xử lý tích hợp do đó các vi mạch FPGA có thể hoạt động như một bo mạch hoàn chỉnh. Các vi xử lý mềm/tích hợp trong FPGA có thể được thiết kế như các khối logic thông thường, với mã nguồn do các hãng cung cấp. Vi xử lý thực thi các lệnh theo chương trình được nạp riêng biệt, có các ngoại vi thiết kế linh động như giao tiếp UART, khối vào/ra đa chức năng GPIO và khối kết nối Ethernet Các vi xử lý mềm/tích hợp cũng có thể được lập trình lại trong khi hệ thống đang chạy. Ứng dụng của FPGA hiện nay rất rộng rãi, điển hình như trong các lĩnh vực xử lý tín hiệu số, xử lý ảnh, thị giác máy, nhận dạng giọng nói, mô phỏng đặc biệt trong các lĩnh vực, ứng dụng có kiến trúc yêu cầu lượng rất lớn xử lý song song như mã hóa và giải mã. Ngoài ra, FPGA còn được ứng dụng trong những hệ thống cần thực thi các thuật toán như FFT, nhân chập, làm nhiệm vụ như một vi xử lý. Trong những năm gần 22
- đây, công nghệ nền tảng FPGA đang được cung cấp và hỗ trợ phần mềm phát triển ứng dụng bởi các hãng lớn như Xilinx, Altera, Actel, Atmel Xilinx và Altera là hai hãng hàng đầu, cả hai hãng lớn đều cung cấp bộ công cụ phần mềm phát triển ứng dụng miễn phí trên nền Windows, Linux. 2.1.1. Kiến trúc FPGA Hình 2-1: Kiến trúc chung của FPGA [2]. Kiến trúc FPGA được mỗi nhà sản xuất quy ước riêng theo bộ công cụ phát triển của hãng, nhưng cấu trúc chung của FPGA được thể hiện giống như trong Hình 2.1. Cấu trúc FPGA bao gồm có các khối logic khả trình (CLBs), các khối vào/ra khả trình (IOBs), và các khối kết nối khả trình. FPGA có mạch clock để truyền tín hiệu clock tới các khối logic, và các khối nguồn logic như ALUs, memory. Các khối logic khả trình bao gồm các Look-Up Tables (LUTs) rất linh động có chức năng thực thi các logic và các phần tử nhớ dùng như là các flip-flop hoặc các chốt. CLBs thực hiện phần lớn các chức năng logic như là lưu trữ dữ liệu. 23
- Hình 2-2: Một Logic Block điển hình Các khối vào/ra khả trình điều khiển dòng dữ liệu giữa các chân vào ra I/O và các logic bên trong của FPGA. Nó bao gồm có các bộ đệm vào và ra với ba trạng thái và điều khiển ngõ ra dạng open collector. Phần lớn là có trở kéo lên ở ngõ ra và thỉnh thoảng lại có trở kéo xuống. IOBs hỗ trợ luồng dữ liệu hai chiều và hoạt động logic ba trạng thái. Hỗ trợ phần lớn các chuẩn tín hiệu, bao gồm một vài chuẩn tốc độ cao, như Double Data-Rate. Hình 2-3: Khối Logic khả trình. Khối kết nối khả trình được dùng để nối các CLBs ở cách xa nhau mà không gây ra quá nhiều trễ. Khối kết nối có thể được dùng như là các bus trong chip. Có các đường line ngắn được dùng để liên kết các CLBs riêng rẽ đặt gần nhau. Các bộ chuyển đổi lập trình được bên trong chip cho phép kết nối giữa CLBs tới các interconnect line và giữa interconnect line với các line khác và với các bộ chuyển đổi. Các bộ đệm 3 trạng thái được dùng để kết nối phần lớn các CLBs với các đường line dài tạo nên các 24
- bus. Các line dài đặc biệt, gọi là các line clock toàn cục, được thiết kế đặc biệt cho trở kháng thấp, đo đó thời gian lan truyền nhanh hơn. Các đường clock toàn cụ được kết nối với các bộ đệm clock và với mỗi phần tử trong CLBs. Hình 2-4: Các kết nối khả trình . Các khối vào ra cùng các bộ đệm clock gọi là các clock driver, nằm rải rác xung quanh chip và được nối với các chân clock vào, thực hiện việc lái các tín hiệu clock vào các đường clock toàn cục như mô tả ở trên. Các đường clock được thiết kế với thời gian lệch nhỏ nhất và thời gian lan truyền nhanh nhất. Thiết kế đồng bộ là yêu cầu bắt buộc với FPGA, chỉ khi dùng các tín hiệu clock từ các bộ đệm clock thì thời gian trễ tương đối và thời gian lệch mới được đảm bảo. 2.1.2. Ngôn ngữ lập trình mô tả phần cứng VHDL Ngôn ngữ mô tả phần cứng VHDL viết tắt của VHSIC Hardware Description Language là ngôn ngữ mô tả hành vi của mạch điện, hệ thống. Trong đó, VHSIC là viết tắt của Very High Speed Integrated Circuits - mạch tích hợp tốc độ cao, được sáng lập bởi tổ chức United State Department of Defense trong những năm 1980, sau đó tạo ra VHDL. VHDL là ngôn ngữ mô tả phần cứng đầu tiên được chuẩn hóa bởi Institue of Electrical and Electronics Engineers. Ngôn ngữ mô tả phần cứng VHDL là một ngôn ngữ độc lập của các nhà công nghệ, các nhà phân phối, do đó chúng có khả năng linh động và kế thừa. VHDL được 25
- ứng dụng trực tiếp trong các thiết bị logic lập trình được bao gồm CPLDs và FPGAs. Mã nguồn VHDL có thể được dùng để thực thi mạch điện trong các thiết bị lập trình được của các hãng cung cấp thiết bị vi mạch khả trình (FPGA, CPLD) như Altera, Xilinx, Almel hoặc được gửi đến các xưởng chế tạo các chíp ASIC. Hiện này, rất nhiều chip thương mại phức tạp ví dụ như các vi điều khiển đang được thiết kế dựa trên ngôn ngữ mô tả phần cứng VHDL. Ngôn ngữ VHDL 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 (CPLD 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 2.5. Hình 2-5: Qui trình thiết kế chip dựa trên VHDL [2]. Một vi mạch được bắt đầu thiết kế bằng cách viết mã VHDL là các file với đuôi mở rộng .vhd. Quá trình tổng hợp bắt đầu với bước 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 sang netlist ở mức gate level. Bước thứ hai là tối ưu thực hiện trên “gate level netlist” 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 26
- một “physical layout” cho các chíp CPLD/FPGA hoặc tạo ra các mặt nạ cho một hệ ASIC. 2.2. Phương pháp xây dựng hệ thống nhúng trên FPGA 2.2.1. Trình tự thiết kế một vi mạch FPGA 2.2.1.1. Mô tả đặc điểm kĩ thuật Mô tả các chức năng, cấu trúc của thiết kế. Specification cung cấp đặc tả về các cổng vào ra, các yêu cầu về thời gian cũng như kiến trúc. Specification được sử dụng song song cho quá trình Design Entry cũng như xây dựng testbench. Đặc điểm kỹ thuật cho phép hiểu về thiết kế hệ thống. Và nó cũng cho phép các kĩ sư thiết kế giao diện đúng cho một loạt các phần của chip. Các đặc điểm kỹ thuật cũng giúp tiết kiệm thời gian và sự hiểu lầm. Sẽ không làm gì được nếu không có các bảng ghi các đặc điểm kĩ thuật. Chi tiết đặc tả kỹ thuật bao gồm các thông tin sau đây: Sơ đồ khối bên ngoài đểchỉ ra chip đó được đặt vào trong hệ thống như thế nào. Sơ đồ khối bên trong chỉrõ mỗi chức năng của các thành phần. Miêu tả các chân vào ra bao gồm khả năng lái đầu ra, mức ngưỡng đầu vào. Thời gian ước lượng bao gồm thời gian thiết lập và giữ ở các chân vào, thời gian lan truyền ra các cổng ra và thời gian chu kì clock. Đếm xấp xỉ số gate Dạng đóng gói Tiêu thụ nguồn Giá cả Các thủ tục để kiểm tra 2.2.1.2. Lựa chọn công nghệ, công cụ tổng hợp 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. 27
- Tại thời điểm này chúng ta phải quyết định cách thực hiện thiết kế mà mong muốn. Đối với các chip nhỏ thì cách tiếp cận bằng sơ đồ nguyên lý 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, ngôn ngữ miêu tả phần cứng 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 sẽ được yêu cầu tổng hợp 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úng ta phải quyết định chọn phần mềm tổng hợp sẽ được dùng nếu có kế hoạch thiết kế FPGA với HDL. Điều đó rất quan trọng kể 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. 2.2.1.3. Thiết kế vi mạch, tổng hợp 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 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ế đượ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 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. Để 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ì chúng ta sẽ biết được chip sẽ hoạt động đúng trong hệ thống. 28
- 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 sang thiết kế mức gate mà có thể gắn vào các khối logic trong FPGA. 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. 2.2.1.4. Mô phỏng, kiểm tra Sau khi sắp đặt xong, vi mạch 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. Đố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 đó đặt mấu thử này vào trong hệ thống và kiểm tra hệ thống có làm việc đúng không. Nếu làm lần lượt các bước ở trên, 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 quanh 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 ở giai đoạn này để đưa ra kết quả rằng toàn bộ 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, cần 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. 2.2.2. Giải pháp thiết kế hệ thống sử dụng bộ công cụ của hãng Xilinx 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 Xilinx gồm có các dòng CPLD như CoolRunner, các họ FPGA như Spartan, Virtex 29
- 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ế. 2.2.2.1. Mạch phát triển - Spartan 3E Hình 2-6: Kit phát triển Spartan-3E [12]. Các thành phần của KIT 30
- Hình 2-7: Các thành phần của Kit Spartan-3E[12]. Cấu trúc tổng quan của Spartan-3 gồm có 5 thành phần có chức năng khả trình cơ bản sau: Configurable Logic Blocks bao gồm các Look-Up Tables rất linh động có chức năng thực thi các logic và các phần tử nhớ dùng như là các flip-flop hoặc các chốt. CLB thực hiện phần lớn các chức năng logic như lưu trữ dữ liệu. Input/Output Blocks điều khiển dòng dữ liệu giữa các chân vào ra I/O và các logic bên trong của FPGA. IOBs hỗ trợ luồng dữ liệu 2 chiều và hoạt động logic 3 trạng thái. Hỗ trợ phần lớn các chuẩn tín hiệu, bao gồm một vài chuẩn tốc độ cao, như Double DataRate. Block RAM cho phép lưu trữ dữ liệu dưới dạng các khối dualport 18-Kbit. Multiplier Blocks cho phép 2 số nhị phân 18bit làm đầu vào và dễ dàng tính toán tích của chúng. Digital Clock Manager Blocks cung cấp khả năng tự xác định xung clock, là giải pháp số hoàn chỉnh cho các tín hiệu clock phân phối, trễ, nhân, chia và dịch bit. Các phần tử này được tổ chức như trong hình sau: 31
- Hình 2-8: Kiến trúc của Spartan 3E [12]. Hình 2.8 cho thấy một vòng IOBs bao quanh các mảng CLBs. Mỗi cột block RAM bao gồm một vài block RAM 18-Kbit, mỗi block RAM lại gắn liền với một multiplier dành riêng. Các DCM được đặt ở các vị trí: 2 DCM phía trên và 2 cái phía dưới của thiết bị, và đối với các device lớn hơn thì có thêm các DCM ở phía bên cạnh. Đặc điểm chung mạng Spartan-3E là kết nối liên thông giữa 5 phần tử cơ bản này, và truyền tín hiệu giữa chúng. Mỗi thành phần chức năng này có một ma trận chuyển đổi dành riêng để cho phép chọn lựa kết nối cho việc đi dây trong FPGA. 2.2.2.2. Vi điều khiển mềm - MicroBlaze MicroBlaze là một vi điều khiển mềm nhúng 32 bit của Xilinx. Lõi có cấu trúc Harvard và tập lệnh thu gọn RISC, với các bus riêng biệt để truy xuất dữ liệu và lệnh từ bộ nhớ on-chip và với bộ nhớ ngoài tại cùng một thời điểm. Chúng ta có thể thiết lập các thông số để sử dụng đối với vi điều khiển này như các cổng vào ra ngoại vi thông qua bộ công cụ EDK. 32
- Hình 2-9: Sơ đồ khối lõi Microblaze [11]. Tính năng: Ba tầng xử lý đường ống với 32 thanh ghi mục đích 32 bit. Từ lệnh 32 bit với 3 toán hạng và 2 chế độ định địa chỉ. Đường bus 32 bit địa chỉ. Một khối ghi dịch. Hai cấp độ ngắt. Khối ALU: Gồm các bộ cộng/trừ, ghi dịch/logic, nhân. Một bộ đếm chương trình. Một đơn vị quản lý bộ nhớ. Ngoài những tính năng trên, tùy vào các phiên bản mà bộ xử lý microblaze có thêm những tính năng khác. Kiến trúc đường ống của vi điều khiển microblaze: Vi điều khiển micorblaze xử lý lệnh theo kiến trúc đường ống song song, hầu hết các lệnh của nó, mỗi giai đoạn mất một chu kỳ đồng hồ để thực hiện xong. Quá trình xử lý lệnh được chia làm 3 giai đoạn: nhận lệnh (Fetch), giải mã lệnh (Decode), thi hành lệnh(Execute): 33
- Hình 2-10: Kiến trúc đường ống trong microblaze. Thông thường, nếu bỏ qua thời gian trễ nghỉ “stall” thì mỗi gia đoạn trên chỉ mất một chu kỳ đồng hồ, khi đó ba lệnh có thể được xử lý cùng một lúc, mỗi lệnh được thi hành trong một đường ống gồm ba giai đoạn. Microblaze có một bộ đệm tiền nhận lệnh IPB để làm giảm xung đột tiềm ẩn trong bộ nhớ khi thực hiện các lệnh đa chu kỳ. Khi đường ống được tạo trễ nghỉ do thực hiện lệnh đa chu kỳ trong giai đoạn thi hành, bộ đệm tiền nhận lệnh sẽ tiếp tực nhận có thể lấy lệnh trực tiếp từ bộ đệm tiền nhận lệnh, thay vì đợi cho bộ nhớ lệnh truy cập để thi hành. Như đã trình bày, Microblaze cung cấp 3 giao tiếp bộ nhớ: - LMB: Local Memory Bus. - PLB: Processor Local Bus. - OPB: On-chip Peripheral Bus và XCL 34
- Hình 2-11: Hệ thống BUS điển hình của Microblaze [11]. 2.2.2.3. Bộ công cụ phát triển hệ thống nhúng của hãng Xilinx - EDK EDK - Embedded Development Kit là công cụ và các IP để thiết kế hệ thống xử lý nhúng trên FPGA của Hãng Xilinx. EDK bao gồm Xinlinx Platform Studio (XPS) để thiết kế phần cứng của hệ thống xử lý nhúng và Software Development Kit (SDK) được sử dụng cho việc khởi tạo và kiểm tra các ứng dụng phần mềm nhúng viết bằng ngôn ngữ C/C++. SDK được xây dựng trên Eclipse™ open-source framework. XPS cung cấp một giao diện người dùng với các công cụ tổng hợp phần cứng, hỗ trợ xây dựng hệ thống từ việc cấu hình bộ vi xử lý đến các ngoại vi, khối bộ nhớ, cổng vào ra, và các thư viện IP core trong một thiết bị của Xilinx. Màn hình giao diện chính của XPS gồm có 3 vùng: 35
- Hình 2-12: Giao diện sử dụng của công cụ XPS. Project Information Area (1), System Assembly View (2), Console Window (3). Ngoài ra cửa sổ màn hình chính của XPS còn có các nhãn để chỉ thị các vùng 4, 5, 6: Connectivity Panel (4), View Buttons (5), Filters Pane (6). Công cụ XPS cho phép khởi tạo một hệ thống phần cứng trên nền tảng FPGA, với XPS chúng ta lựa chọn “Base System Builder” để tạo project, khi đó các thông tin về cầu hình phần cứng sẽ được lưu dưới dạng file .bsb. Khi cần tạo một project mới với cùng một cấu hình phần cứng, chúng ta chỉ cần import file .bsb để sử dụng các thông số. Sau khi lựa chọn các thông số loại CPU, tốc độ clock hệ thống, chúng ta lựa chọn các ngoại vi như RS232, các cổng vào ra IO, quản lý ngắt, quản lý bộ nhớ, bộ đếm, timer Để thêm vào các chức năng chuyên biệt chúng ta cần thêm vào hệ thống các IP core, ví dụ VGA core, Ethernet core với các phiên bản khác nhau, sau đó cấu hình các bus hệ thống, sắp đặt các chân vào, ra cho các ngoại vi và khởi tạo địa chỉ vùng nhớ. Cuối cùng công cụ XPS cho phép xây dựng hệ thống dưới dạng .bit file để nạp xuống bo mạch FPGA tương ứng. SDK hỗ trợ tạo hệ thống phần mềm nhúng bắt đầu từ việc khởi tạo “Hardware platform” được Export từ công cụ XPS sau khi đã tổng hợp phần cứng. Hardware 36
- Platform sẽ chứa tệp tin .bit được xây dựng từ công cụ XPS. Một bộ chương trình phần mềm nhúng thực hiện trên SDK sẽ cần một project chứa thư viện phần mềm - Board Support Package, và một project ứng dụng phần mềm. Hình 2-13: Giao diện sử dụng của công cụ SDK Một gói hỗ trợ bo mạch BSP là một bộ sưu tập của thư viện và các driver mà sẽ định hình lớp thấp nhất của các phần mềm ứng dụng. Ứng dụng phần mềm phải liên kết với hoặc chạy trên của một môi trường phần mềm sử dụng các API mà nó cung cấp. Vì thế, trước khi tạo và sử dụng các ứng dụng phần mềm trong SDK, chúng ta phải tạo một BSP. SDK bao gồm 2 loại BSP cho phát triển ứng dụng: - Standalone là môi trường đơn luồng cung cấp các đặc tính như chuẩn vào/ra và truy cập tới các đặc tính bộ vi xử lý phần cứng. - Xilkernel là một loại hệ điều hành thời gian thực, hỗ trợ phân luồng, các thread, đồng bộ, truyền các thông tin và các bộ định thời. Khi một BSP được xây dựng, các thành phần phần mềm được tự động ghép vào trong thư viện gồm có các chuẩn của thư viện C (libc.a, libm.a) và các drivers của thiết bị cho tất cả các ngoại vi trong thiết kế củ (libxil.a). Kết luận: 37
- Chương 2 của luận văn đã trình bày những vấn đề cơ bản của công nghệ nền tảng FPGA và giới thiệu về phương pháp xây dựng một hệ thống nhúng trên nền FPGA sử dụng ngôn ngữ mô tả phần cứng VHDL. Quy trình thiết kế một vi mạch FPGA trải qua các bước như sau: Mô tả đặc điểm kĩ thuật, Lựa chọn công nghệ, công cụ tổng hợp, Thiết kế vi mạch, tổng hợp, Mô phỏng, kiểm tra. Chương này cũng trình bày giải pháp thực hiện đề tài Luận văn bằng các công cụ phần cứng và bộ công cụ phần mềm phát triển hệ thống FPGA của hãng Xilinx. Giải pháp phần cứng của đề tài sử dụng mạch phát triển Spartan-3E, vi điều khiển mềm MicroBlaze. Để tổng hợp các thành phần của hệ thống, chúng ta sử dụng bộ công cụ phần mềm Xilinx Embedded Development Kit. 38
- CHƯƠNG 3: HỆ THỐNG HIỂN THỊ THÔNG TIN HÌNH ẢNH THÔNG QUA MẠNG INTERNET Nội dung chương thứ ba sẽ trình bày việc xây dựng ý tưởng thiết kế, đặc tả hệ thống, mô tả thiết kế tổng thể, thiết kế từng mô-đun, thiết kế và xây dựng phần mềm. 3.1. Mô tả ý tưởng thiết kế hệ thống Hệ thống hiển thị hình ảnh được xây dựng dạng System-on-a-chip dựa trên công nghệ FPGA. Phần trung tâm của hệ thống là Vi xử lý mềm MircoBlaze của hãng Xilinx. Bằng giải pháp sử dụng công nghệ FPGA cho mục đích của để tài, các khối thành phần được tích hợp trong cùng một chip đơn. Để thực hiện chức năng hiển thị hình ảnh định dạng JPEG lên một màn hình chuẩn VGA thông qua mạng Ethernet, hệ thống cần tích hợp hai mô-đum phần cứng lớn là mô-đum Ethernet và mô-đum VGA display. Hình 3-1: Sơ đồ khối chức năng hệ thống. Khối truyền thông Ethernet được điều khiển bời mô-đum Ethernet đóng vai trò là một Client, kết nối tới server bởi giao thức TCP/IP. Máy chủ server của hệ thống là kho lưu trữ dữ liệu hình ảnh định dạng JPEG, là những thông tin cần trình chiếu trên màn hình quảng bá. Máy chủ được sử dụng làm server cho nhiều hệ thống bo mạch 39
- hiển thị khác nhau, mỗi màn hình có thể hiển thị nội dung khác nhau cùng lưu trên một máy chủ. Phần cứng của máy chủ là phần cho trước và đã có sẵn, trong luận văn chỉ đề cập đến chương trình phần mềm cho phép kết nối và truyền dữ liệu tới bo mạch FPGA của hệ thống hiển thị thông tin hình ảnh. Sau khi thiết lập kết nối từ hệ thống tới server lưu trữ dữ liệu hình ảnh, hệ thống sẽ tải tập tin hình ảnh cần hiển thị định dạng JPEG về bộ nhớ của hệ thống. Chương trình phần mềm ứng dụng đã tích hợp khối giải mã hình ảnh JPEG sử dụng các thư viện khả dụng để giải mã ảnh đưa về định dạng header file. Hình ảnh sau khi mã hóa là đầu vào của khối hiển thị VGA. Tại đây, dữ liệu hình ảnh được khối VGA xử lý thành các chuỗi tín hiệu RGB tương ứng với chuẩn giao tiếp màn hình VGA để hiển thị trên màn hình, đây là đích đến cuối cùng của hệ thống. 3.2. Hệ thống phần cứng Để thực hiện yêu cầu từ sơ đồ khối của hệ thống, trên nền tảng FPGA, hệ thống cần có các khối phần cứng như sơ đồ hình 3.2 Hình 3-2: Sơ đồ chi tiết hệ thống phần cứng. Các mô-đum giao tiếp với vi lý trung tâm MicroBlaze thông qua bus PLB_SI bao gồm: Khối giao tiếp bộ nhớ, khối quản lý ngắt, khối bộ đếm timer, khối giao tiếp Ethernet, khối giao tiếp cổng vào ra, khối kết nối debug theo chuẩn JTAG. Các khối Ethernet Timer có sử dụng ngắt được liên kết với khối XPS_Intc. Ngoài ra hệ thống 40
- còn cung cấp một đường bus dữ liệu truy cập bộ nhớ trực tiếp sử dụng cho khối hiển thị hình ảnh VGA. Khối quản lý bộ nhớ của hệ thống MPMC cho phép giao tiếp với bộ nhớ DDR2 của bo mạch với dụng lượng 64MB. Bảng 3-1: Bảng tổng hợp tài nguyên phần cứng của hệ thống Thành phần Thông số Thành phần được sử dụng cho hệ thống hiển thị hình ảnh Chip Spartan-3E XC3S500E-4FG320 Vi xử lý 1 x MicroBlaze 32-bit RISC core Tần số 50MHz RAM 32Mx16 (64Mbytes) Micron© DDR SDRAM Bộ đếm XPS_Timer Quản lý ngắt XPS_INTC Debug MDM - JTAG MMI-Lite, SMsCTM Ethernet 10/100 PHY (chip SMSC LAN83C185) Ethernet Single Port 10Base-T RJ-45 Connector Clock: 25MHz, VGA Port DB15 Connector VGA Red, Green, Blue, HS, and VS Thành phần của Spartan3-E không được sử dụng Flash PROM 128Mbit Intel® StrataFlash SPI Serial Flash 16Mbit STMicro® SPI serial Flash DAC Độ phân giải 12-bit Analog Capture 2 kênh tương tự: bộ tiền khuếch đại và bộ chuyển Circuit đổi ADC 14 bit. RS232 DCE and DTE, 2xDB9 Serial Port Connector GPIO 102 I/O chân tín hiệu điều khiển Vào/Ra Switch, Button 4 công tắc điều khiển và 4 nút bấm - thả. PS/2, Mouse/ Keyboard 1 cổng kết nối PS/2 Character LCD Screen Màn LCD 2x16 3.2.1. Xây dựng hệ thống phần cứng trên chip Sử dụng bộ công cụ XPS – Xilinx Platform Studio phiên bản 12.3 để xây dựng hệ thống trên chip với vi điều khiển MicroBlaze và các khối ngoại vi. Các bước xây dựng hệ thống phần cứng được thực hiện như sau. Trước tiên khởi động Xilinx Platform Studio từ menu Start: All Programs → Xilinx Design Tools → ISE Design Suite 12.3 → EDK → Xilinx Platform Studio. Sử dụng “Base System Builder” khởi tạo một project mới, lựa chọn thông tin bo mạch sử 41
- dụng là Spartan-3E Starter Board bản D của hãng Xilinx kiến trúc spartan3e, tên mã thiết bị là XC3S500e, đóng gói kiểu FG320: Hình 3-3: Lựa chọn bo mạch. Hệ thống chỉ yêu cầu ở mức đơn nhân, do đó chúng ta lựa chọn hệ thống kiểu “Single-Processor System”: 42
- Hình 3-4: Cấu hình hệ thống. Cấu hình các thông số của bộ vi xử lý với tần số hoạt động của hệ thống là 50MHz, bộ nhớ cục bộ là 16KB. Hình 3-5: Cấu hình vi xử lý. Reference clock frequency là tần số clock trong board. Processor-Bus clock frequency là tần số clock điều khiển hệ thống xử lý. On-Chip H/W Debug module được lựa chọng khi một module PLB MDM - Microprocessor Debug Module sẽ được thêm vào trong hệ thống phần cứng. Module này được Xilinx khuyến cáo sử dụng để debugging cho hệ thống Microblaze. Dựa vào đặc tả thiết kế phần cứng, chúng ta thêm các ngoại vi cho hệ thống. 43
- Hình 3-6: Cấu hình các ngoại vi của hệ thống. Công cụ XPS hỗ trợ chúng ta có thể cấu hình nhanh các ngoại vi cơ bản để thêm vào hệ thống trên chip: DDR_SDRAM, Ethernet_MAC, FLASH, RS232_DCE, RS232_DTE, dlmb_cntlr, ilmb_cntlr, xps_timer. Các thông số cấu hình ngoại vi có thể sử dụng các giá trị mặc định. Tuy nhiên cần cấu hình Enable ngắt cho các ngoại vi Ethernet_MAC và xps_timer. Sau khi đã cấu hình xong các ngoại vi cơ bản của hệ thống SOC, chúng ta chuyển tới bước cấu hình bộ nhớ đệm cho vi xử lý. Bộ nhớ đệm là lựa chọn thêm có thể sử dụng hoặc không tùy vào thiết kế của người dùng. Ở đây, để tăng tốc cho vi xử lý, chúng ta lựa chọn cả 2 loại bộ nhớ đệm “Instruction Cache” và “Data Cache” với kích cỡ 2KB. 44
- Hình 3-7: Lựa chọn bộ nhớ đệm. Sau khi cấu hình các thành phần của phần cứng, cần lựa chọn hệ thống phần mềm ứng dụng, ở bước này chúng ta lựa chọn thông số mặc định của XPS. Hình 3-8: Cấu hình ứng dụng mẫu cho hệ thống. Đến đây chúng ta đã hoàn thành việc thiết lập một hệ thống FPGA cơ bản đáp ứng yêu cầu của đề tài, khối điều khiển VGA sẽ được thực thi bằng IP core trong thư viện của Xilinx. 45
- 3.2.2. Thiết kế ngoại vi giao tiếp màn hình VGA Trong thư viện của bộ công cụ XPS, hãng Xilinx hỗ trợ rất nhiều ngoại vi dưới dạng IP core (Intellectual Property) trong đó có ngoại vi điều khiển hiển thị hình ảnh lên màn hình lõi VGA. Trong giao diện của công cụ XPS, thêm VGA core bằng cách add IP “XPS_TFT” trong cừa sổ IP Catalog ở mục IO modules. Thêm lõi XPS_TFT vào project, tại cửa sổ đầu tiên chúng ta bỏ chọn thuộc tính “Select TFT interface” do chỉ cần dùng chức năng điều khiển VGA Hình 3-9: Khởi tạo lõi VGA. Thiết lập bus cho lõi VGA, giao tiếp với bus PLB gồm giao diện bus chủ PLB_MI và giao diện bus tớ PLB_SI. Hai giao diện này có thể kết nối chung với một kênh truyền thông PLB hoặc hai kênh truyền thông PLB độc lập. PLB_MI giúp lõi điều khiển VGA có thể đọc dữ liệu ảnh từ RAM ngoài vào. PLB_SI giúp lõi điều khiển VGA có thể nhận thông tin điều khiển từ vi xử lý. Chi tiết về các tín hiệu trong giao diện này được trình bày trong các tài liệu [12] và [13] . 46
- Hình 3-10: Cấu hình bus cho lõi VGA. Tiếp theo chúng ta cần thiết lập thông số xung nhịp đồng bộ cho lõi VGA. Trên kit Spartan- 3E, do tần số hoạt động của SoC đạt được là thấp (50 MHz) nên chúng ta chỉ thử nghiệm được thiết kế với chế độ hiển thị VGA 640x480, đồng thời chế độ màu hiển thị là 3-bit – tương ứng với 3-bit thông tin màu RGB. Tần số pixel clock ứng với chế độ hiển thị VGA được đặt bằng 25 MHz. Trên giao diện XPS, vào Hardware chọn thuộc tính Launch Clock Wizard thiết lập thông số SYS_TFT_Clk là 25.000000 Hình 3-11: Thiết lập tần số hoạt động của lõi VGA. 47
- Lõi VGA cần giao tiếp với màn hình, do đó cần thiết lập các chân tín hiệu của khối VGA là các tín hiệu ngoài “Make External”. Các tín hiệu của lõi VGA như mô tả ở bảng 3.2 Bảng 3-2: Các tín hiệu ngoại vi của lõi VGA Chiều Tín hiệu Net Mô tả I/O SYS_TFT_Clk I Clk_25_000MHz Tín hiệu xung đồng hồ TFT_VGA_R O xps_tft_0_TFT_VGA_R Giá trị màu đỏ TFT_VGA_G O xps_tft_0_TFT_VGA_G Giá trị màu xanh lục TFT_VGA_B O xps_tft_0_TFT_VGA_B Giá trị màu xanh lam TFT_HSYNC O xps_tft_0_TFT_HSYNC Tín hiệu đồng bộ dòng TFT_VSYNC O xps_tft_0_TFT_VSYNC Tín hiệu đồng bộ mành Để các tín hiệu được kết nối tới tương ứng các chân trên chip, chúng ta cần khai báo trong file system.ucf. Thêm vào đoạn mã như sau: NET xps_tft_0_TFT_VGA_R_PIN LOC = "H14" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ; NET xps_tft_0_TFT_VGA_R_PIN IOSTANDARD = LVTTL ; NET xps_tft_0_TFT_VGA_G_PIN LOC = "H15" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ; NET xps_tft_0_TFT_VGA_G_PIN IOSTANDARD = LVCMOS33 ; NET xps_tft_0_TFT_VGA_B_PIN LOC = "G15" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ; NET xps_tft_0_TFT_VGA_B_PIN IOSTANDARD = LVCMOS33 ; NET xps_tft_0_TFT_HSYNC_PIN LOC = "F15" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ; NET xps_tft_0_TFT_VSYNC_PIN LOC = "F14" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ; Chúng ta cần khởi tạo địa chỉ để định địa chỉ cho các ngoại vi đã thêm vào bằng cách sử dụng thuộc tính “Generate Addresses” nằm trong tab “Addresses”. Tiếp theo đa định địa chỉ bộ nhớ video cho bộ điều khiển VGA. Trong tab Bus Interfaces kích chuột phải vào xps_tft_0 vào chọn thuộc tính “Configure IP ” đặt giá trị địa chỉ cơ sở cho lõi VGA là 0x8E000000 trong mục "Base address of PLB attached Video Memory". 48
- Hình 3-12: Tạo ra phần cứng FPGA. Chúng ta đã khởi tạo và cấu hình đầy đủ các ngoại vi mà hệ thống yêu cầu. Bước cuối cùng để tạo ra file hệ thống nạp xuống bo mạch thực thi phần cứng FPGA, chúng ta chọn thuộc tính “Generate Bitstream” trong menu “Hardware” từ giao diện Xilinx Platform Studio. Hình 3-13: Sơ đồ khối hệ thống tạo bởi XPS. 49
- 3.3. Đặc tả hệ thống phần mềm Hệ thống thực hiện việc hiển thị hình ảnh lên màn hình VGA nhằm mục đích quảng bá thông tin, với nhiều màn hình đặt tại các vị trí khác nhau. Thông tin hình ảnh nguồn được lưu trữ tại một server cố định. Do đó hệ thống phần mềm nhúng trên bo mạch Spartan-3E cần được xây dựng như một Client Application để có thể đáp ứng yêu cầu hoạt động của cả hệ thống quảng bá thông tin. Hình 3-14: Mô hình phần mềm của hai lớp ứng dụng. Mô hình ứng dụng phần mềm trên bo mạch hệ thống Spartan-3E được mô tả như hình 3.14 Hình 3-15: Mô hình triển khai hệ thống nhúng trên Spartan-3E. 50
- Client Application được xây dựng trên nền tảng hệ điều hành thời gian thực Xikernel hỗ trợ xử lý phân luồng. Đồng thời sử dụng hai bộ thư viện phần mềm chuyên dụng, thư viện lwip hỗ trợ truyền thông Ethernet giao thức TCP/IP phiên bản lwip130_v3_00_a tích hợp sẵn trên công cụ Software Development Kit (SDK 12.3) của Xilinx và bộ thư viện giải mã hình ảnh TinyJpeg là một bộ thư viện mã nguồn mở được chia sẻ bởi Luc Saillard tại website saillard.org. Hệ thống phần mềm ứng dụng nhúng trên hệ thống phần cứng SOC mà chúng ta đã thực thi bao gồm vi xử lý MicroBlaze cùng khối điều khiển Ethernet, VGA và các ngoại vi khác. 3.3.1. Thiết kế chi tiết hệ thống phần mềm 3.3.1.1. Biểu đồ trường hợp sử dụng Hình 3-16: Biểu đồ các trường hợp sử dụng. Hệ thống nhúng trên SOC thực hiện kết nối Ethernet để tải một file ảnh định dạng JPEG từ server. Sau đó thực hiện giải mã hình ảnh đưa về định dạng RGB24 để hiển thị lên màn hình chuẩn VGA. 51
- 3.3.1.2. Lưu đồ tiến trình hoạt động Hình 3-17: Lưu đồ tiến trình hoạt động. Trình tự hoạt động của hệ thống nhúng sau khi kết nối vật lý giữa Client và Server, được thực hiện bắt đầu từ việc khởi động nguồn của hệ thống SOC, ngay lập tức Client gửi yêu cầu tới Server để yêu cầu được tải tập tin hình ảnh JPEG. Server nhận yêu cầu và gửi file ảnh tới Client theo giao thức truyền file TFPT protocol. Client nhận file ảnh Jpeg và gửi phản hồi về Server kết thúc giai đoạn truyền file. Sau đó Client thực hiện giải mã hình ảnh Jpeg sang định dạng RGB24 và copy dữ liệu của ảnh vào vùng nhớ của lỗi điều khiển VGA, thông báo cho VGA bắt đầu hiển thị hình ảnh. Biểu đồ tiến trình hoạt động (Sequence Diagram) của hệ thống được mô tả như Hình 3-17. 52
- 3.3.1.3. Lưu đồ truyền tập tin qua giao thức TFTP Hình 3-18: Lưu đồ truyền tập tin. 3.3.1.4. Lưu đồ giải mã hình ảnh Jpeg sử dụng thư viện TinyJpeg Hình 3-19: Lưu đồ giải mã ảnh Jpeg. 53
- 3.3.2. Thư viện lwIP hỗ trợ truyền thông Ethernet lwIP (Lightweight TCP/IP Stack) là thư viện mã mở về TCP/IP Stack, thực thi các giao thức mạng (TCP/IP, UDP/IP, ICMP, ARP ) trên một chip hoặc lõi Ethernet được phát triển cho các hệ thống nhúng. Để sử dụng thư viện lwIP, cấu hình phần cứng yêu cầu vi xử lý PPC450 hoặc MicroBlaze; lõi IP điều khiển Ethernet EMAC xps_ethernetlite (Ethernet Lite MAC) hoặc xps_ll_temac (TMAC); một bộ Timer sử dụng IP core xps_timer và bộ điều khiển ngắt sử dụng xps_intc; các ngắt từ Timer và EMAC cần được kết nối tới Interrupt controller. Tất cả các yêu cầu cấu hình phần cứng đều được đáp ứng bởi hệ thống SOC mà chúng ta đã xây dựng. Sử dụng lwIP có 2 chế độ hoạt động là Raw và Socket, các bảng dưới đây mô tả một số hàm API sử dụng trong chế độ Socket. Bảng 3-3: Mô tả hàm lwip_socket [4] Prototype int lwip_socket (int domain, int type, int protocol ); Parameters domain: kiểu domain của socket type: giá trị SOCK_DGRAM hoặc SOCK_STREAM tùy vào giao thức truyền là UDP hay TCP protocol: thường có giá trị là 0 Description Hàm này tạo ra một socket với các tham số về domain, type và protocol như đã cung cấp và trả về socket descriptor nếu thành công. Giá trị trả về là tham số cần thiết khi muốn thực thi các hàm khác vì vậy hàm này cần được gọi đầu tiên. Return Giá trị trả về: > 0: tạo socket thành công và trả về Socket descriptor của socket đã tạo <=0: lỗi tạo socket, nguyên nhân có thể do lwIP không hỗ trợ domain hoặc type hoặc protocol đã cung cấp. Comment Ví dụ: sd = socket(AF_INET, SOCK_DGRAM, 0); Includes socket.h 54
- Bảng 3-4: Mô tả hàm lwip_blind [4] int lwip_bind (int s, struct sockaddr *name, socklen_t Prototype namelen ); Parameters - s: Socket descriptor được tạo ra bởi lwip_socket() - name: trường thông tin về địa chỉ - namelen: kích thước của name Kết nối socket s với một địa chỉ chứa trong cấu trúc name. Nếu Description thành công, mọi dữ liệu đến từ địa chỉ name sẽ thực thi với socket s Return Giá trị trả về: ết nối thành công. <=0: kết nối thất bại. Comment - Ví dụ: struct sockaddr_in address; address.sin_family = AF_INET; address.sin_port = htons(80); address.sin_addr.s_addr = INADDR_ANY; lwip_bind(sock, (struct sockaddr *)&address, sizeof (address); Includes socket.h Bảng 3-5: Mô tả hàm lwip_close [4] Prototype int lwip_close(int sd); Parameters sd: socket descriptor được tạo ra bởi lwip_socket() Description Hàm này hủy mộ t socket được tham chiếu bởi sd. Return Giá trị trả về: ực hiện thành công. ỗi. Comment Includes socket.h 55
- 3.3.3. Thư viện giải mã ảnh JPEG – TinyJPEG TinyJpeg Decoder là một thư viện nhỏ dành cho các ứng dụng cần giải mã ảnh Jpeg. TinyJpeg được viết theo thư viện C chuẩn nên hỗ trợ nhiều phần cứng khác nhau. Tuy nhiên, khi sử dụng trên hệ thống nhúng SOC với tốc độ vi xử lý thấp như Spartan-3E, tốc độ giải mã khá là chậm. Theo lưu đồ giải mã hình ảnh Jpeg mô tả ở hình 3.18, chúng ta cần gọi 5 hàm của thư viện TinyJpeg theo đúng trình tự. Sau đây là bảng mô tả các hàm được sử dụng giải mã Jpeg. Bảng 3-6: Mô tả hàm khởi tạo tinyjpeg_init [4] Prototype struct jdec_private *tinyjpeg_init(void) Parameters N/A Hàm này khởi tạo vùng nhớ để chuẩn bị lưu trữ thông tin của Description ảnh và dữ liệu sau khi giải mã jpeg. Hàm này cần được gọi đầu tiên Return Giá trị trả về: ỏ tới vùng nhớ vừa được tạo ỗi khởi tạo. Comment Includes Tinyjpeg.h Bảng 3-7: Mô tả hàm duyệt header file tinyjpeg_parse_header [4] Prototype int tinyjpeg_parse_header( struct jdec_private *priv, const unsigned char *buf, unsigned int size); Parameters *priv: Tinyjpeg object *buf: con trỏ tới dữ liệu của file jpeg cần giải mã size: kích thước của file Hàm này thực hiện kiểm tra file jpeg xem có thể giải mã được hay không. Nếu được thì nó sẽ lấy các thông tin header của file Description jpeg và truyền vào biến priv Return Giá trị trả về: ực hiện thành công 56
- ể giải mã được file này Comment Hàm này được gọi sau tinyjpeg_init() Includes Tinyjpeg.h Bảng 3-8: Mô tả hàm giải mã ảnh tinyjpeg_decode [4] Prototype int tinyjpeg_decode( struct jdec_private *priv, int pixel_format); Parameters *priv: con trỏ tới Tinyjpeg object pixel_format: định dạng ảnh sau khi giải mã. Tinyjpeg hỗ trợ các định dạng sau: - TINYJPEG_FMT_YUV420P - TINYJPEG_FMT_RGB24 - TINYJPEG_FMT_BGR24 - TINYJPEG_FMT_GREY Hàm này thực hiện quá trình giải mã ảnh; chuyển đổi ảnh Description kết quả sang định dạng pixel_format và lưu trữ bởi con trỏ priv Return Giá trị trả về: > 0: hàm thực hiện thành công < 0: hàm thực hiện bị lỗi Comment Cần thực hiện hai hàm trên trước khi gọi hàm này Includes Tinyjpeg.h Bảng 3-9: Mô tả hàm đọc kích thước ảnh tinyjpeg_get_size [4] Prototype void tinyjpeg_get_size( struct jdec_private *priv, unsigned int *width, unsigned int *height) Parameters *priv: con trỏ tới Tinyjpeg object *width: con trỏ sẽ lưu độ rộng của ảnh *height: con trỏ sẽ lưu chiều cao của ảnh Description Hàm này lấy tham ra các tham số về kích thước của ảnh 57
- Return void Cần thực hiện hàm tinyjpeg_parse_header() trước khi gọi Comment hàm này Includes Tinyjpeg.h Bảng 3-10: Mô tả hàm tinyjpeg_get_components [4] Prototype int tinyjpeg_get_components( struct jdec_private *priv, unsigned char components) Parameters *priv: con trỏ tới Tinyjpeg object components: con trỏ lưu các thành phần màu củ a ảnh sau giải mã Hàm này lấy tham ra các thành phần màu của ảnh sau khi đã Description giải mã Return int Cần thực hiện hàm tinyjpeg_decode() trước khi gọi hàm Comment này Includes Tinyjpeg.h Bảng 3-11: Mô tả hàm giải phóng bộ nhớ tinyjpeg_free [4] Prototype void tinyjpeg_free( struct jdec_private *priv) Parameters *priv: con trỏ tới Tinyjpeg object Hàm này thực hiện giải phóng bộ nhớ bị chiếm bởi con Description trỏ *priv Return void Comment Includes Tinyjpeg.h 58
- CHƯƠNG 4: : KẾT QUẢ THỰC NGHIỆM VÀ ĐÁNH GIÁ Chương này sẽ giới thiệu về các kết quả thực thi phần cứng và phần mềm điều khiển hệ thống. 4.1. Nền tảng thực thi hệ thống Hệ thống được thực thi trên nền tảng FPGA của hãng Xilinx, sử dụng cho Spartan-3E, loại chip XC3S500e, package FG320. Đây là một trong những nền tảng cơ bản của công nghệ FPGA, được sử dụng cho mục đích nghiên cứu, phát triển các ứng dựng mở rộng. Để thực thi hệ thống, luận văn đã sử dụng bộ công cụ phần mềm EDK – Embedded Development Kit của hãng để xây dựng hệ thống phần cứng SoC và hệ thống phần mềm nhúng trên SoC đã tổng hợp. XPS – Xilinx Platform Studio sử dụng để tổng hợp phần cứng và Software Development Kit để phát triển phần mềm nhúng. 4.2. Kết quả kiểm tra chức năng hệ thống 4.2.1. Kiểm tra kết nối Ethernet Sau khi tổng hợp phần cứng, chúng ta có file bitstream .bit để tạo một Hardware Platform cho hệ thống phần mềm nhúng. Sử dụng chương trình demo lwip_echo_server. Cấu hình địa chỉ IP của hệ thống nhúng về cùng dải mạng với PC: 192.168.0.100. Nạp chương trình, kết nối cable Ethernet giữa Kit và PC qua cáp đấu chéo. Thực hiện ping từ PC tới địa chỉ của board > thu được kết quả kết nối thành công như mô tả trên hình 4-1 59
- Hình 4-1: Kiểm tra kết nối Ethernet. 4.2.2. Kiểm tra kết nối màn hình VGA, hiển thị hình ảnh Nạp trực tiếp hình ảnh định dạng RGB vào bộ nhớ RAM vùng nhớ của VGA. Để có được hình ảnh ở định dạng RGB chúng ta dùng tool “Image2RGB”. Sau khi convert file hình ảnh sẽ có dạng header .h file. Kết quả thử nghiệm được mô tả trên hình 4-2 Hình 4-2: Kiểm tra bộ điều khiển VGA 60
- 4.2.3. Kiểm tra kết quả giải mã hình ảnh JPEG Sử dụng thư viện TinyJpeg vào chương trình của hệ thống phần mềm nhúng. Cấu hình sử dụng các hàm của thư viện với đầu vào là một mảng file ảnh định dạng Hex. Các hàm chức năng của thư viện TinyJpeg sẽ thực hiện giải mã các thông tin dữ liệu trong file ảnh Jpeg định dạng Hex sau đó xuất ra một mảng chứa thông tin dữ liệu hình ảnh đã được giải mã sang định dạng RBG. Mảng output này được lưu tại bộ nhớ RAM. Hàm set giá trị Pixel trên màn hình VGA sẽ quét lần lượt hàng và cột của hình ảnh để hiển thị lên màn hình. Kết quả kiểm thử được mô tả trên Hình 4-3. for (j=0;j >5)); Hình 4-3: Kiểm tra chương trình giải mã JPEG 4.2.4. Kiểm tra kết nối tổng thể toàn hệ thống Thử nghiệm dùng máy tính cá nhân làm FTP server chứa ảnh JPEG, kết nối bo mạch với máy tính qua cáp Ethernet đấu chéo. Kết quả kiểm thử được mô tả trên Hình 4-4. 61
- Hình 4-4: Kiểm tra kết nối toàn hệ thống. 4.3. Đánh giá giải pháp thực hiện hệ thống Hệ thống hiển thị thông tin hình ảnh quảng bá được xây dựng tương đối hoàn chỉnh, đáp ứng yêu cầu của đề tài Luận văn Thạc sỹ. Các giải pháp thực hiện đề tài đã được lựa chọn và thực hiện theo hướng tối ưu. Từ việc sử dụng chuẩn định dạng hình ảnh JPEG là định dạng phổ biến nhất trên mạng Internet hiện này, đến việc lựa chọn nền tảng FPGA để thực thi hệ thống trên chip SoC, nhằm tối ưu hóa hệ thống phần cứng chuyên dụng. Việc lựa chọn chuẩn giao tiếp màn hình VGA cũng là một chuẩn kết nối màn hình phổ biến, dễ dàng ghép nối với hệ thống. Giải pháp phần cứng sử dụng bo mạch Spartan-3E là kit phát triển FPGA dạng khởi đầu với cấu hình thấp, do đó có nhiều điểm hạn chế về tốc độ xử lý cũng như chất lượng hình ảnh hiển thị trên màn hình. Do sử dụng thư viện giải mã ảnh JPEG bằng ngôn ngữ C nên vi xử lý của bo mạch Spartan-3E xử lý chậm, thời gian chạy chương trình giải mã tương đối lâu khoảng 3 đến 5 phút. Độ phân giải màn hình VGA mà bo mạch hỗ trợ chỉ đến mức cao nhất là 640×480. Thêm nữa số màu hiển thị được chỉ là 8 màu (3 bit màu), do đó chất lượng hình ảnh rất thấp. Khi nghiên cứu phát triển tiếp ứng dụng của đề tài cần nâng cấp sử dụng bo mạch FPGA cấu hình cao hơn. 62
- KẾT LUẬN Những công việc mà em đã thực hiện được trong Luận văn Thạc sỹ: Nghiên cứu phương pháp xây dựng, phát triển phần cứng và phần mềm của hệ thống trên chip SoC sử dụng công nghệ FPGA và ngôn ngữ VHDL. Nghiên cứu phương thức truyền thông Internet, giải mã ảnh JPEG, kết nối và điều khiển màn hình hiển thị VGA. Nghiên cứu kiến trúc và phương pháp lập trình vi xử lý mềm Micro-Blaze của hãng Xilinx. Viết chương trình cấu hình kết nối Ethernet, tải dữ liệu hình ảnh từ server, giải mã JPEG và hiển thị trên màn hình VGA. Thực thi thử nghiệm hệ thống tích hợp. Với kết quả thực thi của đề tài, hệ thống hiển thị hình ảnh qua mạng Internet có thể được ứng dụng trong các hoạt động quảng bá thông tin hình ảnh tại các cơ quan, trường học, bệnh viện. Hay có thể ứng dụng trong hoạt động quảng cáo phục vụ các doanh nghiệp quảng bá thương hiệu, sản phẩm tới toàn xã hội thông qua màn hình lắp đặt tại các tòa nhà cao tầng, trong thang máy, nơi người dân có thể xem các thông tin quảng cáo trong thời gian chờ đợi làm tăng hiệu quả của quảng cáo. Tuy nhiên hệ thống hiển thị hình ảnh qua mạng Internet thực thi trong đề tài vẫn còn một số điểm hạn chế. Thông hiển thị chỉ là hình ảnh tĩnh, thông tin cố định do đó có thể định hướng phát triển của đề tài theo hướng phát triển mô-đum giải mã video Mpex để hệ thống có thể chạy chiếu các đoạn video. Hệ thống hiện tại chỉ hỗ trợ truyền thông có dây, có thể phát triển để tích hợp một mô-đum Wifi hoặc 3G hỗ trợ hệ thống có thể tải dữ liệu qua mạng không dây. Ngoài ra, hệ thống hiện tại được xây dựng trên bo mạch Spartan-3E là dòng kit khởi đầu, do đó tốc độ của bộ vi xử lý rất chậm đặc biệt ở quá trình giải mã hình ảnh JPEG. Khi hệ thống cần phát triển các tính năng mới thì yêu cầu cần nâng cấp phần cứng, sử dụng vi xử lý tốc độ cao hơn. Để tăng tốc độ giải mã hình ảnh JPEG, cần nghiên cứu sử dụng thuật toán giải mã tối ưu hơn. Hoặc có thể nghiên cứu sử dụng giải mã JPEG bằng phần cứng sử dụng ngôn ngữ VHDL sẽ tăng tốc độ giãi mã nhiều lần. 63
- TÀI LIỆU THAM KHẢO Tài liệu Tiếng Việt [1] Bộ Thông tin và Truyền thông (2013), Tiêu chuẩn kỹ thuật về ƯDCNTT trong CQNN: Tiêu chuẩn JPEG – Định dạng ảnh JPEG, Trang thông tin điện tử Cục ứng dụng Công nghệ thông tin - www.aita.gov.vn - Cục Tin học hóa. [2] Nguyễn Trung Hiếu, Ngô Hải Bắc (2 008), Thiết kế hệ thống xử lý ảnh số trên nền FPGA, Đồ án tốt nghiệp, Đại học Bách khoa Hà Nội. [3] Mai Trung Nguyên (2013), Thiết kế mô-đum tái tạo hình ảnh trong hệ thống nén ảnh sử dụng thuật toán nhận biết chuyển động Sigma-delta, Luận văn Thạc sỹ, Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội. [4] Trần Văn Huấn (2009), Tài liệu đặc tả phần mềm Project PUF, Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội. [5] Trần Văn Huấn, Nguyễn Ngọc Mai (2009), Tài liệu đặc tả kỹ thuật lõi VGA, Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội. [6] Đỗ Năng Toàn, Phạm Việt Bình (2007), Giáo trình xử lý ảnh, Trường Đại học Thái Nguyên. Tài liệu Tiếng Anh [7] Enoch Hwang (2004), Build a VGA Monitor Controller, Feature Article, [8] James Rosenthal.(2006), JPEG Image Compression Using an FPGA, A Thesic submitted in partial satisfaction of the requirements for the degree Master of Science in Electrical and Computer Engineering. [9] S. Stuijk (2001), Design and implementation of a JPEG decoder, Faculty of Electrical Engineering - Eindhoven University of Technology, Practical Training Report. 64
- [10] Xilinx Ltd (2008), BFM Simulation in Platform Studio User Guide, Xilinx Documentation www.xilinx.com. [11] Xilinx Ltd (2005), MicroBlaze Embedded Microcontroller, Xilinx Documentation www.xilinx.com. [12] Xilinx Ltd (2006), Spartan-3E Starter Kit Board UG230, DS312, Xilinx Documentation www.xilinx.com. [13] Xilinx Ltd (2008), XPS Thin Film Transistor (TFT) Controller User Guide, Xilinx Documentation www.xilinx.com. 65