TỔNG QUAN
Đặt vấn đề
Trong thời đại công nghệ phát triển mạnh mẽ, dịch vụ quảng cáo đang ngày càng trở nên quan trọng để thu hút sự chú ý của khách hàng Các phương án quảng cáo như bảng huỳnh quang hay mica rất phổ biến, nhưng led matrix hiện đang là lựa chọn tiết kiệm và hiệu quả nhất Để điều khiển led matrix, có nhiều phương pháp như sử dụng IC số hoặc vi xử lý, tuy nhiên, mỗi phương pháp đều có những hạn chế nhất định IC số thường tạo ra sản phẩm không bắt mắt và khó nâng cấp, trong khi vi xử lý phụ thuộc vào tần số làm việc, ảnh hưởng đến tốc độ xử lý tín hiệu Để khắc phục những vấn đề này, nhóm chúng tôi đã quyết định sử dụng chip FPGA, giúp cải thiện đáng kể tốc độ đáp ứng nhờ vào khả năng kết nối linh hoạt và lập trình bằng ngôn ngữ phần cứng.
Mục tiêu
Sử dụng phương pháp quét LED ma trận với tần số cao, bảng quang báo được hiển thị hiệu quả thông qua kit FPGA làm bộ điều khiển trung tâm.
Ngoài ra còn giao tiếp truyền nhận với máy tính để nhận dữ liệu hiển thị theo chuẩn truyền UART
Thiết kế giao diện chương trình truyền dữ liệu từ máy tính được viết bằng ngôn ngữ C# để giao tiếp với người sử dụng.
Phương pháp nghiên cứu
Trong đề tài này, nhóm đã sử dụng các phương pháp nghiên cứu sau:
Phương pháp tham khảo tài liệu bao gồm việc thu thập thông tin từ sách và tạp chí chuyên ngành về điện tử và viễn thông, cũng như truy cập vào các nguồn tài nguyên trực tuyến và các đồ án từ khóa học trước.
Phương pháp quan sát bao gồm việc khảo sát các mạch điện từ mạng internet và các hệ thống quang báo hiện hành, nhằm lựa chọn phương án thiết kế phù hợp cho tương lai.
Nhóm đã kết hợp ý tưởng và kiến thức của mình cùng với sự hướng dẫn của giáo viên để lắp ráp và thử nghiệm nhiều dạng mạch khác nhau Qua quá trình này, nhóm đã lựa chọn được những mạch điện tối ưu nhất.
Bên cạnh đó việc tham khảo ý kiến của bạn bè, thầy/cô là đặc biệt quan trọng không thể thiếu.
Phạm vi nghiên cứu
Sử dụng 1 Kit FPGA Cyclone IV EP4CE6E22C8
Sử dụng 8 tấm panel led RGB matrix P10, kích thước của 1 tấm là: 32x16
Hệ thống sử dụng ngoài trời.
Bố cục đồ án
Chương này trình bày đặt vấn đề dẫn nhập lý do chọn đề tài, mục tiêu, đối tượng và phạm vi nghiên cứu, bố cục đồ án.
CƠ SỞ LÝ THUYẾT
Tổng quan 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à người dùng có thể lập trình được
FPGA là một loại vi mạch bán dẫn chuyên dụng tương tự như ASIC, nhưng không đạt được hiệu suất tối ưu như ASIC đặc chế hoàn toàn hay ASIC thiết kế trên thư viện logic Mặc dù FPGA có hạn chế trong việc thực hiện các tác vụ phức tạp, nhưng nó nổi bật nhờ khả năng tái cấu trúc trong quá trình sử dụng, giúp đơn giản hóa quy trình thiết kế, giảm chi phí và rút ngắn thời gian đưa sản phẩm vào thị trường.
2.1.2 Kiến trúc chung của một FPGA
Cấu trúc tổng thể của FPGA bao gồm:
- Khối logic có thể tái cấu hình
- Khối kết nối có thể lập trình
Hình 2 1 Cấu trúc tổng thể của một FPGA
7 a Khối logic có thể tái cấu hình
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à bộ nhớ cơ bản cho hệ thống số Một phần tử logic cơ bản bao 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) Nhiều chip FPGA hiện nay tích hợp các khối khác nhau, trong đó có những khối chỉ dành cho chức năng cụ thể như bộ nhớ chuyên dụng, bộ nhân hoặc bộ ghép kênh 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 từng phần tử bên trong khối.
Các liên kết trong FPGA kết nối các khối logic và I/O để tạo thành thiết kế hoàn chỉnh Chúng bao gồm bộ ghép kênh, transistor và cổng đệm ba trạng thái Transistor và bộ ghép kênh được sử dụng trong cụm logic để kết nối các phần tử logic, trong khi cả ba thành phần hỗ trợ 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, trong khi những FPGA khác có ít kết nối hơn, dẫn đến định tuyến phức tạp hơn.
I/O đóng vai trò quan trọng trong việc kết nối các khối logic với kiến trúc định tuyến và các thành phần bên ngoài Một trong những yếu tố quyết định trong thiết kế kiến trúc I/O là lựa chọn các tiêu chuẩn điện áp cung cấp và điện áp tham chiếu mà hệ thống sẽ hỗ trợ.
Theo thời gian, kiến trúc FPGA đã được cải tiến với việc bổ sung các khối chức năng lập trình như bộ nhớ trong (Block RAMs), logic số học (ALU), bộ nhân, DSP-48 và bộ vi xử lý nhúng, nhằm đáp ứng nhu cầu tài nguyên cho các ứng dụng Điều này đã dẫn đến việc nhiều FPGA hiện nay sở hữu nhiều nguồn tài nguyên hơn so với các thế hệ trước.
Tổng quan về ngôn ngữ VHDL
2.2.1 Giới thiệu ngôn ngữ VHDL
VHDL viết tắt của VHSIC Hardware Description Language VHSIC là viết tắt của Very High Speed Integrated Circuit VHDL là ngôn ngữ mô tả phần cứng được phát
8 triển dùng cho chương trình VHSIC (Very High Speed Integrated Circuit) của bộ quốc phòng Mỹ
VHDL là ngôn ngữ mô tả phần cứng (HDL) dùng để thiết kế hệ thống logic Nó thường được áp dụng trong việc thiết kế CPLD và FPGA, cho phép người dùng nạp chương trình vào các thiết bị này để tạo ra hệ thống logic theo yêu cầu thiết kế.
Trước khi VHDL xuất hiện, thị trường có nhiều ngôn ngữ mô tả phần cứng nhưng thiếu một tiêu chuẩn chung Các ngôn ngữ này thường do các nhà cung cấp thiết bị phát triển, dẫn đến việc chúng mang những đặc điểm riêng và thuộc quyền sở hữu của từng nhà cung cấp.
VHDL là một ngôn ngữ độc lập, không liên kết với bất kỳ phương pháp thiết kế, bộ mô phỏng hay công nghệ phần cứng nào Điều này cho phép các nhà thiết kế tự do lựa chọn công nghệ và phương pháp thiết kế, trong khi vẫn sử dụng một ngôn ngữ duy nhất.
2.2.2 Một số ưu điểm của ngôn ngữ VHDL
VHDL, được phát triển dưới sự bảo trợ của chính phủ Mỹ và hiện là tiêu chuẩn của IEEE, không thuộc sở hữu của bất kỳ cá nhân hay tổ chức nào Điều này giúp VHDL nhận được sự hỗ trợ từ nhiều nhà sản xuất thiết bị và nhà cung cấp công cụ thiết kế mô phỏng hệ thống, góp phần làm tăng tính phổ biến của nó trong ngành công nghiệp.
VHDL hỗ trợ nhiều công nghệ và phương pháp thiết kế, cho phép thiết kế từ trên xuống hoặc từ dưới lên dựa vào các thư viện có sẵn, phục vụ cho nhiều mục đích thiết kế khác nhau, từ các phần tử phổ biến đến IC ứng dụng đặc biệt Đặc biệt, VHDL hoàn toàn độc lập với công nghệ chế tạo phần cứng; mô tả hệ thống sử dụng VHDL có thể chuyển đổi thành các bản tổng hợp mạch khác nhau tùy thuộc vào công nghệ phần cứng được sử dụng Điều này cho phép các nhà thiết kế không cần lo lắng về công nghệ phần cứng khi phát triển hệ thống, và dễ dàng áp dụng công nghệ mới cho các hệ thống đã thiết kế.
VHDL là một ngôn ngữ lập trình bậc cao, được thiết kế để hỗ trợ việc tạo ra các hệ thống lớn với sự tham gia của nhiều người Nó cung cấp nhiều tính năng hữu ích cho việc quản lý, thử nghiệm và chia sẻ thiết kế, đồng thời cho phép tái sử dụng các phần thiết kế đã có sẵn, giúp tiết kiệm thời gian và công sức trong quá trình phát triển.
2.2.3 Cấu trúc một chương trình sử dụng ngôn ngữ VHDL
Cấu trúc gồm 3 thành phần chính như sau:
Trong VHDL, việc khai báo thư viện là cần thiết, tương tự như trong ngôn ngữ lập trình C Các thư viện thường được sử dụng trong thiết kế bao gồm IEEE, STD và work Để chương trình hoạt động đúng, thư viện phải được khai báo ở đầu mỗi chương trình VHDL.
- Khai báo ENTITY (thực thể): Khai báo các chân I/O của mạch thiết kế, các tham số tĩnh dùng chung (generic) của một chương trình VHDL
Khai báo ARCHITECTURE trong VHDL là phần mô tả chính của chương trình, thể hiện các chức năng cốt lõi của thiết kế, hay còn gọi là hàm Ngoài ra, khai báo LIBRARY cũng rất quan trọng trong việc xác định các thư viện cần thiết cho chương trình.
Khai báo thư viện bắt đầu với từ khóa "Library" theo sau là tên thư viện, lưu ý rằng VHDL không phân biệt chữ hoa chữ thường Tiếp theo, mỗi dòng kế tiếp sẽ khai báo các gói thư viện con mà thiết kế sẽ sử dụng, và mỗi dòng phải kết thúc bằng dấu chấm phẩy.
Ví dụ như trong thư viện IEEE gồm các gói sau:
Gói std_logic_1164: định nghĩa các kiểu dữ liệu chuẩn
Gói std_logic_arith: cung cấp các chức năng số học
Gói std_logic_unsigned: Thực hiện các phép toán với kiểu dữ liệu std_logic_vector, dữ liệu coi là không dấu b Khai báo ENTITY (thực thể)
Khai báo thực thể trong VHDL định nghĩa các chỉ tiêu bên ngoài của một phần tử hoặc hệ thống Khai báo Entity chỉ rõ tên và liệt kê các cổng vào/ra, là các tín hiệu mà qua đó entity giao tiếp với môi trường bên ngoài.
Ví dụ, một mạch cộng bán phần được chỉ ra ở hình 2.18:
Hình 2 2 Mạch cộng bán phần Khai báo Entity như sau: entity HALF-ADDER is port (A, B: in bit;
SUM, CARRY: out bit); end HATF-ADDER;
Mạch cộng bán phần bao gồm hai đầu vào A và B, cùng với hai đầu ra là SUM và CARRY BIT là một kiểu cấu trúc ngôn ngữ được định nghĩa trước trong FPGA Việc khai báo ARCHITECTURE (kiến trúc) là cần thiết để thiết lập cấu trúc cho mạch này.
Phần thứ 3 trong chương trình VHDL là khai báo Architecture, yêu cầu mỗi Entity phải đi kèm với ít nhất một Architecture tương ứng Khai báo Architecture cần kết hợp tên của Architecture với một Entity trong chương trình Thân Architecture có thể chứa các khai báo tín hiệu bên trong, các phần tử hệ thống, cùng với các hàm và thủ tục mô tả hoạt động của hệ thống Tên Architecture được đặt theo ý người viết chương trình, và cấu trúc bên trong có thể được viết theo nhiều kiểu mẫu khác nhau.
- Tập hợp kết nối bên trong của các thiết bị
- Tập các câu lệnh đồng thời
- Tập các câu lệnh tuần tự
- Kết hợp của ba dạng trên
Các kiểu mô hình này sẽ được mô tả cụ thể như sau:
Kiểu kiến trúc này được xây dựng từ một tập hợp các thành phần liên kết với nhau, chẳng hạn như mạch cộng bán phần Kiến trúc HA-STRUCTURE của HALF-ADDER sử dụng thành phần XOR2 với các cổng đầu vào X và Y thuộc kiểu BIT.
Trong kiểu này, dữ liệu được truyền qua Entity thông qua các phép gán đồng thời Ví dụ dưới đây minh họa kiểu luồng dữ liệu của mạch cộng bán phần.
Architecture DATAFLOW of HALF-ADDER is Begin
Trong ví dụ này, kiểu luồng dữ liệu sử dụng hai phép gán tín hiệu đồng thời hoặc gán nối tiếp Ký hiệu gán cho tín hiệu là “ New Project Wizard để mở cửa sổ tạo mới dự án, như trong Hình 4.7 Lưu ý rằng tên dự án cần trùng với tên của thực thể thiết kế; bạn có thể đặt tên dự án là TOP_LEVEL và sau đó nhấn Next.
Hình 4 6 Giao diện ban đầu khi mở phần mềm
In the Family & Device Settings window, select the FPGA chip type, specifically the Cyclone IV E EP4CE6E22C8 Click Next to proceed to the next selection window.
Hình 4 7 Cửa sổ chọn đường dẫn và tên dự án
Trong bước 3, chúng ta có thể lựa chọn bất kỳ công cụ của hãng thứ ba nào cần thiết trong cửa sổ tiếp theo Do đó, không cần thay đổi gì trong việc lựa chọn công cụ, chỉ cần nhấn chọn Next.
Bước 4: Quan sát bảng tổng kết các thiết lập vừa thực hiện Nhấn chọn Finish để quay trở về màn hình chính của phần mềm Quartus II
Phần 2: Lựa chọn ngôn ngữ VHDL làm ngôn ngữ thiết kế
Bước 1: Chọn mục File > New, trong cửa sổ New chọn VHDL File, và nhấp chọn OK
Hình 4 8 Cửa sổ chọn loại chip FPGA cho dự án
Sau khi chọn ngôn ngữ thiết kế, phần mềm sẽ hiển thị giao diện cho phép người dùng thiết kế module theo mong muốn của mình.
Để lưu chương trình, hãy chọn mục File > Save As để mở cửa sổ Save As Trong phần "Save as type", chọn "VHDL file" và nhập tên cho chương trình Cuối cùng, nhấn chọn Save để lưu tệp vào thư mục của dự án.
Sau khi hoàn thành việc viết file VHDL thiết kế, để kiểm tra xem chương trình có lỗi hay không hoặc để chuyển đổi sang dạng cổng logic, bạn cần nhấn vào mục 2: Phân tích.
& Synthesis, muốn biên dịch ta nhấn vào mục 1: Compile Design
Hình 4 10 Giao diện để người dùng nhập code
Hình 4 11 Giao diện biên dịch chương trình
Khi biên dịch xong nếu có lỗi xảy ra thì lỗi đó sẽ hiển thị ở phần Complication
Hình 4 12 Biên dịch thành công
Phần 4: Gán chân và nạp chương trình
Đầu tiên, bạn cần nhấn vào mục 1: Pin Planner và điền tên chân tương ứng trên datasheet Tiếp theo, chọn mục 2: Programmer để nạp cho kit FPGA Cửa sổ nạp file output sẽ xuất hiện, bạn hãy nhấn vào mục "add file" để chọn file output của thiết kế sau khi biên dịch từ thư mục hiện tại Cuối cùng, nhấn nút Start để hoàn tất quá trình nạp vào kit FPGA.
Hình 4 13 Biên dịch bị lỗi
Hình 4 14 Giao diện gán chân
Hình 4 15 Giao diện nạp chương trình xuống FPGA
Sơ đồ khối bên trong FPGA bao gồm 7 khối sau:
Hình 4 16 Sơ đồ khối bên trong FPGA Chức năng từng khối:
Khối UART: Nhận dữ liệu ký tự (nhập từ bàn phím PC), dữ liệu màu (chọn từ giao diện C#) và dữ liệu thời gian (lấy từ hệ thống PC)
Khối xử lý dữ liệu (DATA PROCESSING) lưu trữ toàn bộ dữ liệu từ khối UART dưới dạng chuỗi bit Sau đó, khối này thực hiện xử lý để phân loại và gửi dữ liệu màu đến khối điều khiển hiển thị (DISPLAY CONTROL), dữ liệu ký tự đến khối điều khiển ký tự (CHARACTERS CONTROL), và dữ liệu thời gian đến khối điều khiển đồng hồ (CLOCK CONTROL).
Khối I2C: Giao tiếp I2C với module thời gian thực DS1307 để lấy dữ liệu giờ phút giây
Khối CLOCK CONTROL: Chứa dữ liệu để hiển thị đồng hồ kim, được cập nhật thời gian bởi dữ liệu thời gian nhận từ khối I2C
Khối CHARACTERS CONTROL chứa dữ liệu để hiển thị ký tự Nó nhận dữ liệu ký tự từ khối DATA PROCESSING, sau đó xác định vị trí của đèn LED sáng và tắt, và gửi thông tin này đến khối DISPLAY CONTROL.
Khối DISPLAY CONTROL cho phép giao tiếp điều khiển trực tiếp với Module Led P10, nhận dữ liệu màu sắc, ký tự và thông tin hiển thị đồng hồ kim từ các khối khác Sau khi nhận dữ liệu, khối này sẽ xử lý và phát xung PWM, giúp đèn LED phát sáng với màu sắc tương ứng với dữ liệu đã nhận.
Khối SIGNAL CONTROL tạo ra xung chu kỳ 1Hz để cung cấp cho bộ đếm thời gian, xung tần số 100kHz cho chân OE nhằm hiển thị trên Module Led, và xung tần số 1MHz để làm xung CLK cho dữ liệu được chuyển từ khối DISPLAY CONTROL vào Module Led.
Yêu cầu của khối UART: Nhận dữ liệu được truyền xuống từ máy tính, dữ liệu nhận từ máy tính là dạng mã ASCII
Module UART được thiết kế để nhận dữ liệu mà không cần phản hồi về máy tính, hoạt động theo chế độ bán song công Do đó, chỉ cần tạo hai khối cơ bản: khối tạo tốc độ baud (BAUD_RATE_GENERATOR) và khối nhận dữ liệu (UART_RX).
Hình 4 17 Sơ đồ chân khối UART
Quá trình nhận dữ liệu qua khối UART bắt đầu khi tín hiệu từ máy tính xuống mức thấp, báo hiệu sự xuất hiện của start bit FPGA nhận diện bit này vì trong trạng thái bình thường, đường truyền giữ mức ‘1’ Sau khi xác định start bit, FPGA sẽ liên tục lấy mẫu dữ liệu, nhưng chỉ lưu giá trị tại thời điểm giữa chu kỳ bit, trong khi các lần lấy mẫu khác sẽ không được ghi nhận.