CHƯƠNG 1. TỔNG QUAN VỀ FPGA .1 Khái niệm về FPGA .2 Lịch sử phát triển .3 Cấu trúc của FPGA. 3 Các chế độ hoạt động của Logic Module. 3 SRAM trên FPGA.
4 Các nhân của FPGA .4 Các ứng dụng của công nghệ FPGA. 6 FPGAs trong công nghệ viễn thông. 7 FPGAs trong các ứng dụng quốc phòng. 7 FPGAs trong các ứng dụng không gian.
8 FPGAs trong các ứng dụng ô tô. 9 FPGAs trong công nghệ máy chủ. 9 FPGAs trong công nghệ y tế. NGÔN NGỮ VHDL .1 Giới thiệu về ngôn ngữ VHDL .2 Các ưu điểm của ngôn ngữ VHDL .3 Cấu trúc của 1 chương trình sử dụng ngôn ngữ VHDL.
12 Khai báo thư viện. 13 Mô tả thực thể. 13 Mô tả kiến trúc. SƠ LƯỢC VỀ PHẦN MỀM QUARTUS .1 Giới thiệu chung .2 Tạo 1 project mới .3 Kiểm thử thiết kế.
THIẾT LẬP BỘ ĐIỀU KHIỂN VỚI FPGA VÀ XÂY DỰNG MÔ HÌNH CHO ROBOT TỰ TRÁNH VẬT CẢN .1 Các thành phần hệ thống. 27 Khối chấp hành. 27 Khối cấp nguồn .2 Các khối chức năng. 36 Khối phát hiện vật cản.
36 Khối điều khiển động cơ .3 Khối điều khiển chính .4 Xây dựng mô hình. KẾT LUẬN VÀ ĐỊNH HƯỚNG PHÁT TRIỂN .2 Định hướng phát triển trong tương lai. 44 TÀI LIỆU THAM KHẢO. 45 DANH MỤC HÌNH VẼ Hình 1.1 Cấu trúc cơ bản của FPGA.2 Sơ đồ khối logic module .3 Đầu ra của LUT .4 Một số cấu hình của LM .5 Ý tưởng cơ bản của lõi logic cứng được nhúng trong FPGA .6 Ví dụ sơ đồ khối của FPGA .7 Các ứng dụng của công nghệ FPGA .8 Ứng dụng của FIFO trong viễn thông .9 Chuyển đổi dữ liễu và lọc .10 Hệ thống phát hiện và sửa lỗi vệ tinh.11 Ứng dụng của LiDAR trong xác định vị trí .12 FPGA trong máy chủ dữ liệu .13 Xử lý ảnh trong y tế với FPGA .1 Cấu trúc 1 chương trình VHDL .2 Sơ đồ logic full_adder .1 Giao diện của phần mềm Quartus .2 Giao diện chọn New Project Wizard.3 Cửa sổ thiết lập thư việc và tên project .4 Giao diện lựa chọn thiết bị FPGA .5 Tên thiết bị được in trực tiếp trên chip.6 Thêm các file HDL.7 Mã lập trình cho thiết kế clock_divider .8 Cửa sổ Task .9 Cửa số Messages .10 Cửa sổ Pin Planner .11 Cửa sổ Programmer.12 Cửa sổ Simulation Waveform Editor .13 Kết quả mô phỏng của thiết kế clock_divider.1 Sơ đồ khối điều khiển xe tự hành .2 Mặt trước của bo mạch De0-CV .3 Mặt sau của bo mạch .4 Module cảm biến siêu âm HC-SR04.5 Phát sóng trên cảm biến siêu âm HC-SR04 .6 Kích thước và sóng cảm biến siêu âm HC-SR04 .7 Động cơ DC GA25 .9 Sơ đồ hệ thống điện .11 Khay 3 pin đấu nối tiếp .13 Khối trigger_generator .15 Khối three_ultrasonic .16 Khối chia tần .17 Khối tạo xung PWM .18 Khối điều khiển chính .19 Phần thân mô hình khung robot tự tránh vật cản .20 Phần nắp mô hình robot tự tránh vật cản .21 Mô hình hoàn chỉnh của robot tự động tránh vật cản.
43 DANH MỤC BẢNG BIỂU Bảng 4.1 Thông số kĩ thuật của bo mạch De0-CV .2 Thông số kĩ thuật động cơ DC GA25 .3 Cấu hình sơ đồ chân L298N .4 Thông số kĩ thuật của driver L298N .5 Bảng thông số điện áp hoạt động các linh kiện .6 Mô tả các lệnh điều hướng cho xe tự hành .7 Quy tắc điều hướng xe tự hành tránh vật cản. TỔNG QUAN VỀ FPGA 1.1 Khái niệm về FPGA FPGA là viết tắt của Field-Programmable Gate Array, là vi mạch dùng câu trúc mảng phần tử logic mới và tiên tiến nhất hiện nay. Thuật ngữ Field Programmable chỉ quá trình tái cấu trúc IC có thể được thực hiện bởi người dùng cuối, trong điều kiện thông thường, hay nói một cách khác là người kỹ sư lập trình IC có thể dễ dàng hiện thực hóa thiết kế của mình sử dụng FPGA mà không lệ thuộc vào một quy trình sản xuất hay cấu trúc phần cứng phức tạp nào trong nhà máy bán dẫn. Đây chính là một trong những đặc điểm làm FPGA trở thành một công nghệ IC khả trình được nghiên cứu và phát triển nhiều nhất hiện nay.
Để có được khả năng đó, FPGA ra đời hoàn toàn là một công nghệ mới chứ không phải là một dạng mở rộng của các chip khả trình kiểu như PAL, PLA. Sự khác biệt đó thứ nhất nằm ở cơ chế tái cấu trúc FPGA, toàn bộ cấu hình của FPGA thường được lưu trong một bộ nhớ truy cập ngẫu nhiên (thông thường SRAM), quá trình tái cấu trúc được thực hiện bằng cách đọc thông tin từ RAM để lập trình lại các kết nối và chức năng logic trong IC. Có thể so sánh cơ chế đó làm việc giống như phần mềm máy tính cũng được lưu trữ trong RAM và khi thực thi sẽ được nạp lần lượt tới vi xử lý, nói cách khác việc lập trình lại cho FPGA cũng dễ dàng như lập trình lại phần mềm trên máy tính. Như vậy về mặt nguyên tắc thì quá trình khởi động của FPGA không diễn ra tức thì mà cấu hình từ SRAM phải được đọc trước sau đó mới diễn ra quá trình tái cấu trúc theo nội dung thông tin chứa trong SRAM.
Dữ liệu chứa trong bộ nhớ RAM phụ thuộc vào nguồn cấp, chính vì vậy để lưu giữ cấu hình cho FPGA thường phải dùng thêm một ROM ngoại vi. Đến những dòng sản phẩm FPGA gần đây thì FPGA được thiết kế để có thể giao tiếp với rất nhiều dạng ROM khác nhau hoặc FPGA thường được thiết kế kèm CPLD để nạp những thành phần cố định, việc tích hợp này làm FPGA nạp cấu hình nhanh hơn nhưng cơ chế nạp và lưu trữ cấu hình vẫn không thay đổi. Ngoài khả năng đó điểm thứ hai làm FPGA khác biệt với các PLD thế hệ trước là FPGA có khả năng tích hợp logic với mật độ cao với số cổng logic tương đương lên tới hàng trăm nghìn, hàng triệu cổng. Khả năng đó có được nhờ sự đột phá trong kiến trúc của FPGA.
Nếu hướng mở rộng của CPLD tích hợp nhiều mảng PAL, PLA lên một chip đơn, trong khi bản thân các mảng này có kích thước lớn và cấu trúc không đơn giản nên số lượng mảng tích hợp nhanh chóng bị hạn chế, dung lượng của CPLD nhiều nhất cũng chỉ đạt được nghìn cổng hoặc tương đương. Đối với FPGA thì phần tử logic cơ bản không còn là mảng PAL, PLA mà thường là các khối logic lập trình được cho 4 - 6 bit đầu vào và 1 đầu ra (được gọi là LUT). Việc chia nhỏ đơn vị logic cho phép tạo một cấu trúc khả trình linh hoạt hơn và tích hợp được nhiều hơn số lượng cổng logic trên một khối bán dẫn. Bên cạnh đó hiệu quả làm việc và tốc độ của FPGA cũng vượt trội so với các IC khá trình trước đó.
Vì có mật độ lớn và tốc độ làm việc cao nên FPGA 1 có thể được ứng dụng cho lớp những toán xử lý số phức tạp đòi hỏi hiệu suất làm việc lớn mà các công nghệ trước không đáp ứng được.2 Lịch sử phát triển FPGA được thiết kế đầu tiên bởi Ross Freeman, người sáng lập công ty Xilinx vào năm 1984, kiến trúc mới của FPGA cho phép tích hợp số lượng tương đối lớn các phần tử bán dẫn vào 1 vi mạch so với kiến trúc trước đó là CPLD. FPGA có khả năng chứa tới từ 100.000 đến hàng vài tỷ cổng logic, trong khi CPLD chỉ chứa từ 10.000 cổng logic; con số này đối với PAL, PLA còn thấp hơn nữa chỉ đạt vài nghìn đến 10. CPLD được cấu trúc từ số lượng nhất định các khối SPLD (Simple programmable devices, thuật ngữ chung chỉ PAL, PLA). SPLD thường là một mảng logic AND/OR lập trình được có kích thước xác định và chứa một số lượng hạn chế các phần tử nhớ đồng bộ (clocked register).
Cấu trúc này hạn chế khả năng thực hiện những hàm phức tạp và thông thường hiệu suất làm việc của vi mạch phụ thuộc vào cấu trúc cụ thể của vi mạch hơn là vào yêu cầu bài toán. Kiến trúc của FPGA là kiến trúc mảng các khối logic, khối logic, nhỏ hơn nhiều nếu đem so sánh với một khối SPLD, ưu điểm này giúp FPGA có thể chứa nhiều hơn các phần tử logic và phát huy tối đa khả năng lập trình của các phần tử logic và hệ thống mạch kết nối, để đạt được mục đích này thì kiến trúc của FPGA phức tạp hơn nhiều so với CPLD. Một điểm khác biệt với CPLD là trong những FPGA hiện đại được tích hợp nhiều những bộ logic số học đã sơ bộ tối ưu hóa, hỗ trợ RAM, ROM, tốc độ cao, hay các bộ nhân cộng (multiplication and accumulation, MAC), thuật ngữ tiếng Anh là DSP slice dùng cho những ứng dụng xử lý tín hiệu số DSP. Ngoài khả năng tái cấu trúc vi mạch toàn cục, một số FPGA hiện đại còn hỗ trợ tái cấu trúc cục bộ, tức là khả năng tái cấu trúc một bộ phận riêng lẻ trong khi vẫn đảm bảo hoạt động bình thường cho các bộ phận khác.3 Cấu trúc của FPGA Ba phần tử cơ bản trong FPGA là các khối logic khả trình (CLB), các kết nối giữa các khối và các khối vào ra (I/O) như miêu tả trong hình 1.1 Cấu trúc cơ bản của FPGA 2 Các logic module Logic Module (LM) trong CLB có thể được cấu hình cho logic tổ hợp, logic được đệm thanh ghi, hoặc kết hợp cả hai.
Flip-flop là một bộ phận của khối logic đi kèm theo LM và được sử dụng cho logic được đệm thanh ghi. Sơ đồ khối của LM dựa trên LUT được miêu tả trong hình 1.2 Sơ đồ khối logic module LUT là một loại bộ nhớ có thể lập trình và được sử dụng để sinh các hàm logic tổ hợp dựa trên SOP. Nói chung một LUT bao gồm 2n ô nhớ, ở đây n là số hiến đầu vào. Cho ví dụ, 3 biến đầu vào có thể chọn đến 8 ô nhớ, vậy một LUT với 3 đầu vào có thể tạo một biểu thức dạng SOP lên đến 8 số hạng.
Các ô nhớ có thể được lập trình 1 hoặc 0, như hình 2.3 biểu diễn cho một hàm logic. Nếu ô nhớ được lập trình bằng 1 thì tổ hợp của các biến đầu vào tương ứng xuất hiện trong biểu thức SOP tại đầu ra, còn nếu bằng 0 thì tổ hợp của các biến đầu vào tương ứng không xuất hiện trong biểu thức SOP tại đầu ra. Biểu thức SOP tại đầu ra của LUT được cấu hình như trong hình 1.