Giáo trình Ngôn ngữ Mô tả Phần cứng Verilog

Tác giả: TS. Vũ Đức Lung, ThS. Lâm Đức Khải, Ks. Phan Đình Duy
Đơn vị xuất bản: Trường Đại học Công nghệ Thông tin – Đại học Quốc gia Thành phố Hồ Chí Minh
Năm xuất bản: 2012
Tài liệu tham khảo chính: IEEE Standard for Verilog Hardware Description Language (2006); Verilog Digital System Design (Second Edition, McGraw-Hill); The Complete Verilog Book (Vivek Sagdeo, Sun Microsystems, Inc.).


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

Giáo trình Ngôn ngữ mô tả phần cứng Verilog được biên soạn nhằm phục vụ công tác đào tạo bậc đại học và sau đại học thuộc khối ngành Kỹ thuật máy tính, Điện tử – Viễn thông và Thiết kế vi mạch. Trong chương trình đào tạo, học phần này giữ vai trò cầu nối giữa lý thuyết thiết kế logic số cơ bản và quy trình hiện thực hóa vi mạch số phức tạp trên các nền tảng phần cứng chuyên dụng.

Mục tiêu học tập của giáo trình là trang bị cho người học phương pháp luận thiết kế hệ thống số hiện đại bằng ngôn ngữ mô tả phần cứng Verilog HDL. Sau khi hoàn thành nội dung, người học có khả năng:

  1. Nắm vững cú pháp chuẩn, các loại dữ liệu đặc thù của phần cứng và hệ thống toán tử trong Verilog.
  2. Mô hình hóa chính xác các mạch số tổ hợp và mạch số tuần tự ở nhiều mức độ trừu tượng khác nhau (từ mức chuyển mạch, mức cổng logic, mức truyền thanh ghi RTL đến mức thuật toán/hành vi).
  3. Vận hành quy trình thiết kế tự động bằng công cụ EDA/CAD: từ mô tả thiết kế, viết testbench kiểm tra chức năng, phân tích cú pháp, tối ưu hóa logic, binding, sắp xếp cell và đi dây (place and route), phân tích định thời, đến tổng hợp phần cứng trên FPGA/CPLD hoặc ASIC.

Cấu trúc giáo trình gồm 9 chương, được thiết kế theo tiến trình sư phạm từ nền tảng cú pháp, cấu trúc phân cấp, đến các phương pháp mô hình hóa và kỹ thuật kiểm tra thiết kế chuyên sâu. Giáo trình tiếp cận trực tiếp từ các tiêu chuẩn công nghiệp quốc tế của IEEE (IEEE Std 1364-1995, IEEE Std 1364-2001) và các nghiên cứu chuyên khảo từ Sun Microsystems và McGraw-Hill, đảm bảo tính chuẩn xác về mặt học thuật và khả năng ứng dụng thực tế trong môi trường công nghiệp bán dẫn.


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

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

  • Chương 1: Dẫn nhập thiết kế hệ thống số với Verilog
    Trình bày lịch sử hình thành ngôn ngữ từ Gateway Design Automation, Cadence, Open Verilog International (OVI) đến quá trình chuẩn hóa IEEE. Khái quát quy trình thiết kế tự động (EDA Flow) cho ASIC, Custom IC và FPGA/PLD: mô tả thiết kế, kiểm tra tiền tổng hợp (presynthesis verification), phân tích cú pháp, chuyển đổi cấu trúc phần cứng, tối ưu hóa logic Boolean, quá trình binding, sắp xếp cell và đi dây kết nối (place and route), mô phỏng hậu tổng hợp (postsynthesis simulation) và phân tích định thời (timing analysis).

  • Chương 2: Qui ước về từ khóa và cú pháp cơ bản
    Định nghĩa các quy tắc cú pháp cơ bản: xử lý khoảng trắng, hai kiểu chú thích (dòng đơn // và khối /* */), biểu diễn hằng số nguyên (định dạng cơ số nhị phân b, thập phân d, bát phân o, thập lục phân h, số có dấu s), số bù 2, giá trị logic không xác định (x) và tổng trở cao (z). Trình bày chuẩn số thực IEEE 754-1985, xử lý chuỗi ký tự ASCII 8-bit, quy tắc định danh (identifier, escaped identifier với ký tự \), cùng hệ thống tác vụ/hàm hệ thống ($time, $display, $monitor, $stop, $finish) và giao tiếp lập trình PLI (Programming Language Interface).

  • Chương 3: Loại dữ liệu trong Verilog
    Phân tích chi tiết hai nhóm kiểu dữ liệu chính:

    • Nhóm kiểu dữ liệu net (dây nối vật lý): wire, wand, wor, tri, tri0, tri1, triand, trior, trireg, supply0, supply1. Bảng phân giải logic (resolution tables) khi có nhiều nguồn cùng điều khiển net. Mô hình hóa mức độ mạnh logic (128 trạng thái) và đặc tính lưu trữ điện dung / phân rã điện tích trên trireg.
    • Nhóm kiểu dữ liệu biến (variable): reg (thanh ghi lưu trữ giá trị), integer (số nguyên 32-bit tính toán bù 2), time (thời gian mô phỏng 64-bit), real (số thực dấu chấm động).
    • Quy tắc khai báo cổng (input, output, inout), khai báo mảng bit-vector 1 chiều (vectored, scalared), và mảng bộ nhớ 2 chiều (memory array). Cơ chế quản lý tham số thiết kế qua parameter, localparam và phát biểu gán tham số defparam.
  • Chương 4: Toán tử, toán hạng và biểu thức
    Hệ thống toán tử hoàn chỉnh: toán tử số học (+, -, *, /, %, **), toán tử quan hệ (>, <, >=, <=), toán tử so sánh bằng (==, !=, ===, !==), toán tử logic (&&, ||, !), toán tử thao tác bit (&, |, ^, ~, ~^), toán tử giảm/thu gọn (reduction), toán tử dịch bit logic và số học (>>, <<, >>>, <<<), toán tử điều kiện (?:), toán tử ghép nối ({}) và lặp bit ({{}}). Quy tắc xác định độ rộng bit (bit-length evaluation) và quy tắc tính toán biểu thức có dấu/không dấu.

  • Chương 5: Cấu trúc phân cấp và module
    Khái niệm module mức cao nhất (top-level module), kỹ thuật gọi và khởi tạo linh kiện (instantiation). Quy tắc khai báo, liên kết port theo thứ tự danh sách (by ordered list) và theo tên tường minh (by name). Xử lý ghép nối port không tương đồng về kích thước và kiểu dữ liệu.

  • Chương 6: Mô hình thiết kế cấu trúc (Structural Model)
    Xây dựng mạch từ các cổng logic cơ bản (and, nand, or, nor, xor, xnor, buf, not), cổng ba trạng thái (bufif1, bufif0, notif1, notif0), công tắc truyền tín hiệu MOS/CMOS, nguồn kéo pullup/pulldown. Định nghĩa phần tử cơ bản người dùng tự định nghĩa (User Defined Primitives – UDP) cho cả mạch tổ hợp và mạch tuần tự (tích cực mức hoặc tích cực cạnh). Mô hình hóa thời gian trễ cổng theo định dạng min:typ:max.

  • Chương 7: Mô hình thiết kế hành vi (Behavioral Model)
    Phân biệt hai phương pháp mô tả:

    • Phép gán liên tục (continuous assignment assign) đại diện cho mô hình RTL của mạch tổ hợp.
    • Phép gán quy trình (procedural assignment) bên trong các khối initialalways. Phân tích bản chất và quy tắc sử dụng của phép gán qui trình kín (blocking assignment =) cho mạch tổ hợp và phép gán qui trình hở (non-blocking assignment <=) cho mạch tuần tự. Các cấu trúc rẽ nhánh (if-else-if, case, casex, casez), cấu trúc lặp, điều khiển định thời theo độ trễ (#) và sự kiện (@), khối thực thi tuần tự begin-end và khối song song fork-join. Phương pháp thiết kế máy trạng thái hữu hạn (FSM) kiểu Moore và Mealy.
  • Chương 8: Tác vụ (Task) và Hàm (Function)
    Phân biệt sự khác nhau giữa task (có thể chứa điều khiển thời gian, có nhiều ngõ ra) và function (thực thi không tiêu tốn thời gian mô phỏng, trả về một giá trị duy nhất). Cơ chế truyền tham số, quản lý bộ nhớ, tính đệ quy và ứng dụng hàm hằng số (constant functions) trong việc tính toán tham số cấu hình phần cứng.

  • Chương 9: Kiểm tra thiết kế (Verification)
    Kỹ thuật xây dựng môi trường kiểm tra (testbench) hoàn chỉnh cho mạch tổ hợp và mạch tuần tự. Tạo tín hiệu đồng bộ, phát sinh vector kiểm tra ngẫu nhiên, điều khiển kịch bản mô phỏng. Giới thiệu kỹ thuật xác minh dựa trên assertion (chèn thiết bị giám sát) sử dụng Thư viện kiểm tra mở OVL (Open Verification Library) để phát hiện vi phạm định thời và lỗi logic.

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

  1. Lý thuyết mô hình hóa phần cứng: Khái niệm trừu tượng hóa hệ thống số thành các mức: mức chuyển mạch (switch), mức cổng (gate), mức truyền thanh ghi (RTL) và mức hành vi thuật toán (behavioral).
  2. Nguyên lý phân giải mạch và định thời: Nguyên tắc xử lý xung đột logic trên đường truyền chung (wired-logic, tri-state), cơ chế lưu trữ điện tích trên tụ ký sinh (trireg), và mô hình định thời trễ đường truyền min:typ:max.
  3. Cơ chế hoạt động của công cụ tự động hóa EDA: Các giai đoạn chuyển dịch từ mô tả RTL sang cổng logic (synthesis), tối ưu hóa hàm Boolean, quá trình mapping vào công nghệ phần cứng cụ thể (ASIC standard-cells hoặc FPGA LUTs), và phân tích thời gian tĩnh (STA).

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills): Viết mã nguồn Verilog HDL chuẩn cú pháp; mô tả chính xác mạch tổ hợp (bộ cộng, bộ giải mã, ALU) và mạch tuần tự (thanh ghi, bộ đếm, máy trạng thái FSM); phân định chính xác việc sử dụng phép gán blocking = và non-blocking <=.
  • Kỹ năng phân tích (Analytical skills): Đọc hiểu và phân tích dạng sóng mô phỏng (waveforms); so sánh đối chiếu sự khác biệt giữa mô phỏng tiền tổng hợp (lý tưởng, không trễ cổng) và mô phỏng hậu tổng hợp (chứa trễ thực tế); nhận diện các rủi ro tiềm ẩn về định thời như xung đột tín hiệu (hazards, glitches), hiện tượng chạy đua (race conditions), vi phạm thời gian thiết lập (setup time) và thời gian giữ (hold time).
  • Năng lực thực hành (Practical competencies): Xây dựng module testbench độc lập; tạo xung nhịp clock và reset tự động; tích hợp thư viện OVL để giám sát thiết kế; sử dụng các công cụ EDA tiêu chuẩn (như Altera Quartus II, ModelSim) để biên dịch, tối ưu và tổng hợp netlist phần cứng.

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

Giáo trình áp dụng phương pháp sư phạm tích hợp lý thuyết ngôn ngữ với thực hành quy trình công nghệ:

Thành phần phương pháp Cách thức triển khai chi tiết trong giáo trình
Tiếp cận sư phạm (Pedagogical approach) Kết hợp phương pháp tiếp cận từ dưới lên (bottom-up - nắm vững cú pháp, toán tử, loại dữ liệu) và từ trên xuống (top-down - phân rã hệ thống thành cấu trúc phân cấp các module con). Lý thuyết luôn đi kèm sơ đồ mạch nguyên lý hoặc mã nguồn đối sánh.
Mẫu thiết kế & Minh họa (Examples) Từng khái niệm đều có đoạn mã nguồn mẫu minh họa trực tiếp (như mã nguồn mạch đếm nhị phân, flip-flop D, bộ cộng fulladder, mạch điều khiển bus tri-state, phân rã điện tích trên nmos). Kết quả mô phỏng được biểu diễn qua dạng sóng thời gian thực hoặc bản ghi văn bản từ hàm $monitor.
Bài tập thực hành (Practical exercises) Cuối mỗi chương đều có hệ thống câu hỏi lý thuyết chuyên sâu và bài tập ứng dụng (như so sánh Verilog và VHDL, so sánh Verilog và C, giải thích cơ chế hàm hệ thống, viết mô hình mạch số cụ thể).
Phương pháp đánh giá (Assessment) Đánh giá năng lực người học qua 3 mức độ: (1) Tính chuẩn xác về cú pháp và ngữ nghĩa Verilog; (2) Khả năng tổng hợp ra phần cứng thực tế (synthesizable code); (3) Độ bao phủ kiểm tra (verification coverage) thông qua testbench và assertion.
Hướng dẫn tự học (Self-study guidelines) Người học được định hướng thực hiện chu trình khép kín trên máy tính: Đọc hiểu cú pháp -> Soạn thảo mã nguồn module -> Xây dựng testbench -> Chạy mô phỏng trên ModelSim/Quartus II -> Phân tích dạng sóng -> Tổng hợp phần cứng và tối ưu.

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

  • Cập nhật tiêu chuẩn IEEE: Giáo trình được biên soạn dựa trên tiêu chuẩn quốc tế IEEE Std 1364-1995IEEE Std 1364-2001/2006. Nội dung tích hợp các tính năng mở rộng của chuẩn Verilog-2001 như: khai báo port trực tiếp tại tiêu đề module, xử lý số học có dấu (signed), các hàm hệ thống nâng cao cho phép truy xuất tập tin ngẫu nhiên, và cơ chế quản lý cấu hình thư viện.
  • Gắn liền với công cụ EDA công nghiệp: Giáo trình không dừng lại ở mức mô tả lý thuyết ngôn ngữ thuần túy mà liên kết trực tiếp với các bộ công cụ phát triển phần cứng phổ biến như Altera Quartus IIModelSim. Người học được tiếp cận giao diện mô phỏng dạng sóng thực tế và kết quả tổng hợp sơ đồ mạch (RTL viewer / technology map viewer).
  • Tích hợp kỹ thuật xác minh nâng cao: Điểm nổi bật trong phương pháp kiểm tra thiết kế của giáo trình là việc đưa vào kỹ thuật kiểm tra bằng assertion thông qua Open Verification Library (OVL). Phương pháp này giúp người thiết kế giám sát trực tiếp các điều kiện biên và phát hiện vi phạm định thời mà không cần phụ thuộc hoàn toàn vào việc dò tìm thủ công trên dạng sóng mô phỏng.

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

  1. Sinh viên đại học: Dành cho sinh viên năm thứ 2, năm thứ 3 và năm thứ 4 chuyên ngành Kỹ thuật máy tính, Công nghệ kỹ thuật Điện tử – Viễn thông, Công nghệ vi mạch bán dẫn và Khoa học máy tính định hướng phần cứng.
  2. Học viên cao học: Học viên theo học các chương trình thạc sĩ chuyên ngành Kỹ thuật máy tính, Kỹ thuật điện tử, phục vụ cho các hướng nghiên cứu về thiết kế hệ thống nhúng (Embedded Systems), kiến trúc máy tính (Computer Architecture) và thiết kế vi mạch tích hợp (VLSI/ASIC Design).
  3. Điều kiện tiên quyết (Prerequisites): Người học cần trang bị trước các kiến thức nền tảng bao gồm: Đại số Boolean, Lý thuyết mạch số và Hệ thống số (thiết kế mạch logic tổ hợp, flip-flop, thanh ghi, bộ đếm, máy trạng thái FSM). Kiến thức cơ bản về một ngôn ngữ lập trình cấu trúc (như C) là lợi thế khi tiếp cận các cấu trúc điều khiển quy trình.
  4. Giảng viên và kỹ sư nghiên cứu: Giảng viên sử dụng làm tài liệu giảng dạy chính thức cho học phần Ngôn ngữ mô tả phần cứng hoặc Thiết kế vi mạch số; kỹ sư thiết kế phần cứng tại các doanh nghiệp sử dụng làm tài liệu tra cứu chuẩn về cú pháp, bảng phân giải logic và kỹ thuật viết testbench.

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

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

Giáo trình được thiết kế chuẩn hóa cho sinh viên đại học, học viên cao học chuyên ngành Kỹ thuật máy tính, Điện tử, cũng như các kỹ sư bắt đầu tiếp cận lĩnh vực thiết kế vi mạch số sử dụng ngôn ngữ Verilog HDL.

2. Cần kiến thức nền nào để học?

Người học cần hoàn thành học phần cơ sở về Thiết kế số / Hệ thống số. Cần nắm vững bảng chân trị logic, các cổng logic cơ bản, phương pháp tối thiểu hóa hàm Boolean, nguyên lý hoạt động của flip-flop, thanh ghi và máy trạng thái hữu hạn.

3. Điểm khác biệt cốt lõi của giáo trình là gì?

Giáo trình trình bày đồng thời và phân định rạch ròi 3 mô hình thiết kế: mô hình cấu trúc (gate/switch/UDP), mô hình RTL (phép gán liên tục assign), và mô hình hành vi thuật toán (always/initial). Đồng thời, nội dung gắn liền với quy trình tự động hóa EDA thực tế và tích hợp kỹ thuật xác minh hiện đại với thư viện OVL.

4. Làm sao để tự học hiệu quả?

Người học cần kết hợp song song việc đọc hiểu lý thuyết cú pháp với việc thực hành trên các phần mềm EDA (như Altera Quartus II, ModelSim). Sau khi viết mô hình phần cứng, bắt buộc phải viết testbench kiểm tra chức năng, chạy mô phỏng đối chiếu dạng sóng, và thực hiện bước tổng hợp để quan sát sơ đồ phần cứng thực sự được tạo ra.

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

Giáo trình dựa trên 3 nguồn tài liệu tham khảo chính:

  • IEEE Standard for Verilog Hardware Description Language (IEEE Std 1364, 2006).
  • Verilog Digital System Design (Second Edition, McGraw-Hill).
  • The Complete Verilog Book (Vivek Sagdeo, Sun Microsystems, Inc.).
    Ngoài ra, cuối mỗi chương đều cung cấp các câu hỏi định hướng nghiên cứu sâu về công cụ và công nghệ.

Kết luận

Giáo trình Ngôn ngữ mô tả phần cứng Verilog cung cấp hệ thống tri thức hoàn chỉnh và chuẩn xác về ngôn ngữ Verilog HDL, phục vụ trực tiếp cho công tác đào tạo thiết kế vi mạch số tại bậc đại học và sau đại học. Lộ trình học tập được thiết kế khoa học từ cú pháp cơ bản (Chương 1–4), tổ chức module phân cấp (Chương 5), các phương pháp mô hình hóa cấu trúc và hành vi (Chương 6–7), cho đến tối ưu hóa mã nguồn và kỹ thuật xác minh thiết kế nâng cao (Chương 8–9). Để mở rộng kiến thức chuyên sâu về phân tích định thời tĩnh (STA) và tối ưu hóa diện tích/công suất trên silicon, người học có thể tham khảo thêm các tiêu chuẩn IEEE Std 1364 và tài liệu hướng dẫn kỹ thuật của các bộ công cụ EDA liên quan.