TỔNG QUAN HỌC THUẬT VÀ PHÂN TÍCH TÀI LIỆU HỌC TẬP "THỰC HÀNH HỆ THỐNG NHÚNG"

Tài liệu học tập Thực hành Hệ thống nhúng (Mã học phần: 1.CMP335) do ThS. Phạm Hùng Kim Khánh và TS. Nguyễn Trọng Hải biên soạn, được phát hành nội bộ phục vụ đào tạo tại Trường Đại học Công nghệ TP.HCM (HUTECH) thuộc Bộ Giáo dục và Đào tạo. Bản phân tích học thuật dưới đây hệ thống hóa toàn bộ cấu trúc kiến trúc phần cứng, phần mềm nhúng, công cụ triển khai và phương pháp luận thực nghiệm được thể hiện trong tài liệu.


Tổng quan về giáo trình

Môn học và vị trí trong chương trình đào tạo

Tài liệu học tập Thực hành Hệ thống nhúng là tài liệu thực hành chính thức được xây dựng nhằm hỗ trợ trực tiếp cho học phần lý thuyết Hệ thống nhúng. Trong khung chương trình đào tạo đại học các ngành Kỹ thuật Điện tử - Viễn thông, Kỹ thuật Máy tính và Công nghệ Thông tin, học phần này nằm ở giai đoạn chuyên ngành, kết nối giữa các khối kiến thức về kỹ thuật số, kiến trúc máy tính với kỹ thuật thiết kế vi xử lý chuyên dụng và lập trình nhúng bậc thấp.

Mục tiêu học tập (Learning Outcomes)

Văn bản xác định rõ mục tiêu trang bị cho người học năng lực thực hiện các mạch phần cứng số trên chip khả trình và viết chương trình phần mềm điều khiển để hiện thực hóa một hệ thống nhúng SoC (System-on-Chip) hoàn chỉnh. Kết thúc học phần, người học có khả năng:

  • Sử dụng thành thạo hai ngôn ngữ mô tả phần cứng VHDL và Verilog HDL để thiết kế các khối mạch tuần tự và mạch tổ hợp.
  • Khởi tạo, tích hợp và đóng gói hệ thống vi xử lý Nios II cùng hệ thống ngoại vi thông qua công cụ Altera Qsys.
  • Ánh xạ sơ đồ logic và gán chân vật lý lên các dòng chip FPGA Cyclone II và Cyclone IV E.
  • Lập trình phần mềm C trên môi trường Nios II Software Build Tools for Eclipse để quản lý luồng dữ liệu I/O, kỹ thuật hỏi vòng (polling) và ngắt cứng (interrupt).

Cấu trúc và cách tiếp cận

Tài liệu được xây dựng theo phương pháp tiếp cận từ dưới lên (bottom-up approach). Tiến trình học tập đi từ việc thiết kế các phần tử logic cơ bản (D-FF, mạch giải mã, mạch mã hóa ưu tiên, máy trạng thái FSM), tích hợp hệ vi xử lý mềm 32-bit Nios II cùng bộ nhớ On-chip và ngoại vi PIO, sau đó nâng dần độ phức tạp với các cơ chế điều khiển I/O nâng cao và giao tiếp hiển thị trên màn hình LCD.

Điểm đặc sắc của giáo trình

Tài liệu tập trung tuyệt đối vào quy trình thực hành thực tế ("hands-on"), cung cấp chi tiết từng bước thao tác giao diện người dùng (GUI), các ảnh chụp màn hình thông số cấu hình, cây thư mục dự án, mã nguồn mẫu cho cả phần cứng (VHDL, Verilog) và phần mềm (C), cũng như các bảng kiểm tra trạng thái tương ứng với tín hiệu thực tế trên kit thí nghiệm Altera DE2 và DE2-115.


Nội dung kiến thức cốt lõi

Các chương/chủ đề chính

Bài 1: Ngôn ngữ mô tả phần cứng (Hardware Description Languages - HDL)

Nội dung bài học khởi đầu bằng việc hướng dẫn quy trình tạo dự án trên phần mềm Altera Quartus II (phiên bản 13.0sp1 Web Edition), lựa chọn dòng chip Cyclone IV E (EP4CE115F29C7) hoặc Cyclone II (EP2C35F672C6). Người học tiếp cận song song hai ngôn ngữ mô tả phần cứng tiêu chuẩn:

  • VHDL: Cấu trúc thực thể (ENTITY) và kiến trúc hành vi (ARCHITECTURE DFF_BEHAVIOR OF D_FF) mô tả mạch D Flip-Flop có chân Preset và Reset không đồng bộ. Đóng gói mạch thành khối biểu tượng (Block Diagram/Schematic File - .bdf), gán chân vật lý thông qua tệp DE2_115_pin_assignments.csv, biên dịch tạo tệp cấu hình .sof và nạp xuống kit DE2-115 qua giao thức JTAG bằng công cụ Altera Programmer với cáp USB-Blaster. Thực hành viết mã VHDL cho mạch giải mã 3 sang 8 (3 to 8 Decoder) kết nối công tắc gạt SW[0]-SW[2], SW[10] với LED đơn LEDG[0]-LEDG[7] và mạch mã hóa ưu tiên 8 sang 3 (8 to 3 Priority Encoder).
  • Verilog HDL: Cú pháp khai báo module d_ff(clk, reset, d, q, qnot) sử dụng khối lệnh always @(posedge clk or posedge reset) để hiện thực chức năng tương đương. Tái lập các bài tập giải mã 3 sang 8 và mã hóa ưu tiên 8 sang 3 bằng Verilog.
  • Máy trạng thái hữu hạn (State Machine Editor): Sử dụng tệp .smf, công cụ State Tool và Transition Tool để thiết kế bộ đếm MOD 10 lên/xuống 4-bit (10 trạng thái từ state1 đến state10, các ngõ vào clk, reset, up và ngõ ra Y[3:0]). Tự động phát sinh mã HDL (Generate HDL File), gán chân (KEY[0], SW[0], SW[1], LEDR) và thiết kế mạch tuần tự nhận diện chuỗi bit nối tiếp "1101".

Bài 2: Thiết kế hệ thống nhúng đơn giản

Bài học hướng dẫn xây dựng một vi hệ thống SoC mang tên sw2_led8 bằng công cụ Altera Qsys:

  • Khởi tạo phần cứng: Tích hợp bộ vi xử lý 32-bit Nios II/e (nios2_proc), bộ nhớ On-Chip Memory (RAM or ROM) 32 KB độ rộng dữ liệu 32 bits (onchip_memory), khối giao tiếp song song PIO 2-bit ngõ vào (sw), khối PIO 8-bit ngõ ra (led) và khối định danh hệ thống System ID Peripheral (sysid_1337).
  • Kết nối bus liên kết Avalon (Avalon-MM): Thiết lập kết nối clock (clock_main), kết nối đường reset hệ thống, kết nối đường truyền lệnh (instruction_master) và đường truyền dữ liệu (data_master) từ Nios II đến các cổng slave của bộ nhớ RAM và các ngoại vi PIO. Sử dụng tính năng Assign Base Addresses để cấp phát không gian địa chỉ tự động; cấu hình địa chỉ Reset Vector và Exception Vector trỏ về vùng nhớ onchip_memory.s1 tại độ lệch địa chỉ 0x00000020.
  • Tích hợp và nạp phần cứng: Xuất thiết kế Qsys sang tệp tổng hợp .qip, đưa vào Quartus II, gán chân qua DE2_115_pin_assignments.csv và biên dịch sinh file .sof.
  • Phát triển phần mềm nhúng: Sử dụng Nios II Software Build Tools for Eclipse, liên kết tệp sw2_led8.sopcinfo để tạo dự án BSP (sw2_led8_bsp) và dự án ứng dụng (sw2_led8_board). Lập trình C điều khiển hệ thống thông qua các hàm/macro truy xuất bộ nhớ trong tệp tiêu đề io.h: IORD(SW_BASE, 0) để đọc trạng thái công tắc và IOWR(LED_BASE, 0, value) để xuất dữ liệu ra LED.

Bài 3: Hỏi vòng và ngắt (Polling and Interrupts)

Chương này đi sâu vào hai cơ chế thu thập dữ liệu từ ngoại vi:

  • Cơ chế hỏi vòng (Polling): Xây dựng hệ thống gồm Nios II/e, RAM 32 KB, ngoại vi sw (8-bit input), ledg (8-bit output), sysid_1339 và khối key (4-bit input) được cấu hình thanh ghi lưu vết cạnh xung (Synchronously capture, kiểu cạnh FALLING). Phần mềm sử dụng con trỏ bộ nhớ truy cập trực tiếp địa chỉ thanh ghi edgecapture qua *(key_ptr + 3) để kiểm tra trạng thái nhấn nút và xóa cờ bằng lệnh gán *(key_ptr + 3) = 0.
  • Cơ chế ngắt phần cứng (Hardware Interrupt): Cấu hình khối PIO keys trong Qsys để phát tín hiệu yêu cầu ngắt (Generate IRQ, kiểu Edge). Cấu hình phần mềm cho phép ngắt tại ngoại vi thông qua thanh ghi mặt nạ *(key_ptr + 2) = 0x0F (interruptmask), kích hoạt ngắt tại bộ điều khiển ngắt Nios II thông qua hàm nội tại __builtin_wrctl(3, 1) (thanh ghi ienable) và bật ngắt toàn cục với __builtin_wrctl(0, 1) (bit PIE trong thanh ghi status). Hàm phục vụ ngắt interrupt_handler đọc giá trị thanh ghi ipending thông qua __builtin_rdctl(4) để định tuyến chính xác đến chương trình con phục vụ ngắt key_isr().

Bài 4: Màn hình tinh thể lỏng (LCD)

Chương này hiện thực giao tiếp ngoại vi hiển thị phức hợp:

  • Phần cứng: Cấu hình hệ thống gồm vi xử lý Nios II/e, On-chip RAM mở rộng lên dung lượng 128 KB, PIO 2-bit cho nút bấm (KEY0, KEY1), sysid_1338 và khối điều khiển LCD Controller tích hợp sẵn trên kit DE2.
  • Phần mềm: Lập trình hàm khởi tạo lcd_init() tuân thủ nghiêm ngặt giản đồ thời gian hiển thị bằng cách gửi các mã lệnh điều khiển thông qua macro IOWR(LCD_BASE, 0, cmd) kết hợp các khoảng trễ microsecond của hàm usleep(): mã lệnh 0x38 (thiết lập chức năng 8-bit, 2 dòng, font 5x8), 0x0C (bật hiển thị, tắt con trỏ), 0x06 (chế độ dịch điểm ghi), 0x01 (xóa toàn màn hình), 0x02 (quay về đầu dòng). Xây dựng hàm lcd_printf() định vị con trỏ tại dòng 1 (0x80) hoặc dòng 2 (0xC0) và xuất từng byte ký tự ra thanh ghi dữ liệu qua IOWR(LCD_BASE, 2, message[i]). Hiện thực bài toán bộ đếm tăng/giảm giá trị độc lập trên hai dòng màn hình theo sự kiện bấm phím.

Kiến thức nền tảng được xây dựng

  • Kỹ thuật thiết kế mạch logic số: Cơ chế chốt dữ liệu của Trigger (D-FF), bảng chân trị của mạch tổ hợp giải mã/mã hóa, mô hình biểu diễn máy trạng thái trạng thái hữu hạn dạng Mealy/Moore.
  • Kiến trúc hệ thống máy tính: Cấu trúc vi xử lý RISC (Nios II), cơ chế phân định bus dữ liệu/lệnh riêng biệt theo kiến trúc Harvard, chuẩn giao tiếp nội chip Avalon Memory-Mapped, kỹ thuật ánh xạ không gian địa chỉ cho ngoại vi (Memory-Mapped I/O).
  • Nguyên lý tương tác phần cứng - phần mềm: Hoạt động của thanh ghi cấu hình hướng (direction), thanh ghi dữ liệu vào/ra (data), thanh ghi lưu vết cạnh xung (edgecapture) và thanh ghi mặt nạ ngắt (interruptmask).

Kỹ năng phát triển

  • Kỹ năng thiết kế và tổng hợp phần cứng: Khả năng đọc hiểu báo cáo tổng hợp tài nguyên (Flow Summary: tổng số Logic Elements, Combinational Functions, Dedicated Logic Registers, Memory Bits, PLLs).
  • Kỹ năng định cấu hình SoC trên EDA tools: Thao tác phân bổ bus, giải quyết xung đột địa chỉ và kết nối Clock/Reset tự động trong Qsys.
  • Kỹ năng lập trình hệ thống: Khai thác các macro HAL, thao tác con trỏ bộ nhớ truy cập trực tiếp địa chỉ vật lý, cấu hình và xử lý ngắt bằng các lệnh hợp ngữ nhúng (__builtin_wrctl, __builtin_rdctl).

Phương pháp giảng dạy và học tập

Phương pháp tiếp cận sư phạm

Tài liệu áp dụng phương pháp đào tạo tích hợp giữa thiết kế phần cứng và phần mềm (Hardware/Software Co-design). Mỗi bài học đại diện cho một chu trình hoàn chỉnh: từ khâu đặc tả yêu cầu chức năng, thiết kế phần cứng trong Quartus II / Qsys, gán chân, nạp cấu hình bitstream, đến viết phần mềm nhúng trên Eclipse và kiểm chứng hành vi thực tế trên kit.

Hệ thống bài tập và thực hành

Các bài tập được thiết kế phân tầng từ cơ bản đến phức tạp:

  • Cấp độ mô phỏng logic phần cứng: Viết mã VHDL/Verilog cho mạch giải mã 3 sang 8, mã hóa ưu tiên 8 sang 3, máy trạng thái phát hiện chuỗi bit (Bài 1.1 đến 1.6).
  • Cấp độ lập trình ứng dụng ngoại vi đơn giản: Xử lý logic LED đơn sáng dần/tắt dần với hàm usleep(), điều khiển hiển thị quét số trên các LED 7 đoạn (HEX[0], HEX[1]) từ 0 đến 99 (Bài 2.1 đến 2.5).
  • Cấp độ xử lý ngắt và truyền thông hiển thị: Xử lý đa phím bấm bằng ngắt cạnh xung (Bài 3.1 đến 3.4), xây dựng hệ thống hiển thị chuỗi ký tự và biến đếm 2 kênh độc lập trên màn hình LCD (Bài 4.1 đến 4.2).

Phương pháp đánh giá môn học

Văn bản quy định rõ phương thức đánh giá học phần tại mục thông tin môn học:

  • Điểm quá trình: Chiếm trọng số 50% tổng điểm đánh giá môn học.
  • Hình thức triển khai: Đánh giá trực tiếp trên kết quả vận hành mạch tại các buổi học thực hành trên board thí nghiệm kết hợp với việc chấm báo cáo thí nghiệm nộp lại theo quy định của giảng viên phụ trách và quy chế đào tạo của nhà trường.

Hướng dẫn tự học và chuẩn bị bài

Để tiếp thu nội dung học phần hiệu quả, tài liệu đặt ra các yêu cầu khắt khe:

  • Người học bắt buộc phải tham dự đầy đủ các buổi lên lớp tại phòng thí nghiệm.
  • Người học phải viết chương trình mã nguồn và giải trước toàn bộ các bài tập thiết kế logic tại nhà trước khi thực hiện các bài đo, nạp mạch trên board thí nghiệm thực tế.

Điểm nổi bật và cập nhật

Nền tảng công cụ thiết kế

Giáo trình sử dụng phiên bản phần mềm Altera Quartus II 13.0sp1 Web Edition (64-bit). Điểm tiến bộ quan trọng được thể hiện trong tài liệu là việc ứng dụng công cụ tích hợp hệ thống Altera Qsys (thay thế hoàn toàn cho công cụ SOPC Builder cũ), giúp trực quan hóa việc kết nối mạng lưới bus Avalon Memory Mapped với cơ chế tự động tạo trọng tài phân xử bus (Arbitration Shares) và quản lý xung nhịp thông minh.

Hệ thống phần cứng thí nghiệm chuẩn mực

Tài liệu xây dựng toàn bộ quy trình thực nghiệm dựa trên hai nền tảng phần cứng FPGA tiêu chuẩn giáo dục của hãng Terasic / Altera:

  • Kit Altera DE2: Trang bị chip FPGA Cyclone II EP2C35F672C6 (với 33.216 Logic Elements).
  • Kit Altera DE2-115: Trang bị chip FPGA Cyclone IV E EP4CE115F29C7 (với 114.480 Logic Elements, 529 chân I/O khả dụng, mức điện áp lõi 1.2V).

Tính gắn kết thực tế và khả năng vận hành

Tài liệu hướng dẫn trực tiếp cách giải quyết các bài toán kỹ thuật thực tế:

  • Quản lý gán chân đồng loạt qua tệp cấu hình CSV (DE2_115_pin_assignments.csv).
  • Xử lý lỗi lệch đồng bộ thời gian và nhận dạng hệ thống giữa phần cứng và phần mềm thông qua việc kiểm tra System ID (0x1337) và thiết lập các cờ Ignore mismatched system ID, Ignore mismatched system timestamp trên cấu hình chạy phần mềm Eclipse.

Đối tượng sử dụng giáo trình

Phân loại người học

  • Sinh viên chuyên ngành: Phù hợp cho sinh viên đại học năm thứ 3 và năm thứ 4 theo học các ngành Kỹ thuật Điện tử - Viễn thông, Kỹ thuật Máy tính, Tự động hóa và Công nghệ Thông tin cần hoàn thành học phần Thực hành Hệ thống nhúng.
  • Kỹ sư và người nghiên cứu tự do: Kỹ sư thiết kế vi mạch FPGA và lập trình viên hệ thống nhúng cần tài liệu tham khảo thực hành chuẩn mực về quy trình thiết kế SoC dựa trên lõi mềm Nios II.

Yêu cầu kiến thức tiền đề (Prerequisites)

Theo quy định trong tài liệu, người học bắt buộc phải có kiến thức nền tảng về:

  • Lý thuyết môn học Hệ thống nhúng.
  • Nguyên lý mạch logic và thiết kế số cơ bản.
  • Kỹ năng lập trình cơ bản với ngôn ngữ C (đặc biệt là thao tác con trỏ và toán tử thao tác bit).

Hướng dẫn dành cho giảng viên

Giảng viên có thể sử dụng cấu trúc 4 bài thực hành trong tài liệu làm khung đề cương chi tiết cho 30-45 tiết thực hành chuyên đề tại phòng lab vi xử lý - FPGA, đồng thời sử dụng các bài tập nâng cao ở cuối mỗi bài để đánh giá khả năng tự thiết kế của sinh viên.


Câu hỏi thường gặp (FAQ)

1. Giáo trình này phù hợp với ai?

Tài liệu được biên soạn phục vụ trực tiếp cho sinh viên đại học đang học môn Thực hành Hệ thống nhúng (mã học phần 1.CMP335) tại Đại học Công nghệ TP.HCM (HUTECH) cùng sinh viên khối ngành kỹ thuật phần cứng, điện tử máy tính tại các trường đại học kỹ thuật.

2. Cần kiến thức nền nào để học giáo trình này?

Người học cần học xong hoặc đang học song hành môn lý thuyết Hệ thống nhúng, nắm vững lý thuyết kỹ thuật số (cổng logic, Flip-Flop, bộ đếm) và có kỹ năng lập trình ngôn ngữ C căn bản.

3. Điểm khác biệt của giáo trình này so với các tài liệu lập trình nhúng vi điều khiển khác là gì?

Các tài liệu vi điều khiển truyền thống (như ARM, AVR, PIC) chỉ tập trung viết phần mềm trên một cấu trúc phần cứng cố định. Tài liệu này hướng dẫn người học tự thiết kế kiến trúc phần cứng (vi xử lý Nios II, bus kết nối Avalon, bộ nhớ, ngoại vi) trên chip FPGA bằng HDL và Qsys trước khi tiến hành viết mã C điều khiển phần cứng đó.

4. Làm sao để tự học và thực hành hiệu quả theo tài liệu?

Người học cần cài đặt phần mềm Quartus II 13.0sp1, môi trường Nios II SBT for Eclipse, viết sẵn mã nguồn HDL và phần mềm C ở nhà, nghiên cứu kỹ tệp gán chân DE2_115_pin_assignments.csv và tuân thủ các bước cấu hình địa chỉ trên Qsys trước khi nạp thử nghiệm lên board mạch.

5. Có tài liệu bổ trợ nào kèm theo không?

Tài liệu học tập này được thiết kế đi kèm với giáo trình lý thuyết chính thức:

  • [1] Phạm Hùng Kim Khánh - Giáo trình Hệ thống nhúng - ĐH Công nghệ TPHCM.
    Mọi đóng góp ý kiến học thuật được tài liệu hướng dẫn gửi về địa chỉ e-mail: tailieuhoctap@hutech.vn.

Kết luận

Tài liệu học tập Thực hành Hệ thống nhúng của Đại học Công nghệ TP.HCM (HUTECH) là tài liệu hướng dẫn thực hành kỹ thuật mạch số và hệ thống vi xử lý trên chip chuẩn xác và có tính ứng dụng thực tế cao. Bằng việc phân chia lộ trình chặt chẽ từ mô tả phần cứng logic rời rạc (VHDL/Verilog), tích hợp vi xử lý SoC (Qsys/Nios II), lập trình cơ chế I/O (Polling/Interrupt) đến điều khiển hiển thị phức hợp (LCD), tài liệu cung cấp đầy đủ các cơ sở kỹ thuật cần thiết cho sinh viên khối kỹ thuật. Việc kết hợp chặt chẽ giữa tài liệu thực hành này và Giáo trình Hệ thống nhúng của tác giả Phạm Hùng Kim Khánh sẽ giúp người học làm chủ trọn vẹn quy trình đồng thiết kế phần cứng và phần mềm trên nền tảng công nghệ FPGA hiện đại.