- 1 1. Verilog là gì? Tổng quan và Các trường hợp sử dụng
- 2 2. Cú pháp và Khái niệm Cơ bản của Verilog
- 3 3. Các Tính Năng Chính của Verilog
- 4 4. Các Ví Dụ Thiết Kế Thực Tế Sử Dụng Verilog
- 5 5. Tài Nguyên và Công Cụ Học Verilog
- 6 6. Câu hỏi thường gặp về việc học Verilog
- 7 7. Tiến tới Bước Tiếp theo với Verilog
1. Verilog là gì? Tổng quan và Các trường hợp sử dụng
Định nghĩa cơ bản của Verilog
Verilog là một trong những ngôn ngữ mô tả phần cứng (HDL) được dùng để thiết kế mạch số. Trong khi các ngôn ngữ lập trình phần mềm mô tả các chương trình máy tính, Verilog được dùng để mô tả hành vi của các mạch và hệ thống số. Bằng cách sử dụng ngôn ngữ này, bạn có thể đơn giản hoá các thiết kế mạch phức tạp và thực hiện mô phỏng cũng như tổng hợp (chuyển đổi thành mạch có thể sản xuất) một cách hiệu quả.
Verilog được phát triển vào năm 1984 và được tiêu chuẩn hoá bởi IEEE (Institute of Electrical and Electronics Engineers) vào năm 1995. Kể từ đó, nó không ngừng phát triển và hiện nay được sử dụng rộng rãi cho thiết kế FPGA (Field-Programmable Gate Array) và ASIC (Application-Specific Integrated Circuit).
Vai trò của Verilog trong thiết kế mạch số
Thiết kế mạch số là quá trình xây dựng các hệ thống xử lý thông tin bằng tín hiệu điện. Các ví dụ bao gồm bộ xử lý và bộ nhớ trong điện thoại thông minh và máy tính. Verilog là công cụ hiệu quả để thiết kế các hệ thống số như vậy.
Cụ thể, nó được dùng trong các trường hợp như:
- Thiết kế FPGA : FPGA là các thiết bị rất linh hoạt. Verilog cho phép kỹ sư tự do định nghĩa chức năng của FPGA và lập trình lại thiết bị khi cần.
- Thiết kế ASIC : ASIC là các mạch tích hợp chuyên dụng cho các ứng dụng cụ thể. Verilog hỗ trợ việc thiết kế IC tùy chỉnh.
- Mô phỏng : Các mạch được mô tả bằng Verilog có thể được mô phỏng trong phần mềm để xác minh hành vi trước khi thực hiện, giúp phát hiện và sửa lỗi thiết kế sớm.
Những gì bạn sẽ học trong bài viết này
Bài viết này cung cấp giải thích từng bước cho người mới bắt đầu học Verilog lần đầu hoặc những người muốn ôn lại các kiến thức cơ bản. Các chủ đề bao gồm:
- Cú pháp cơ bản và các khái niệm nền tảng của Verilog
- Các ví dụ thiết kế thực tế và kỹ thuật gỡ lỗi
- Các tài nguyên hữu ích và đề xuất công cụ
Đối tượng độc giả:
- Người mới bắt đầu muốn học Verilog hoặc HDL
- Kỹ sư đang bắt đầu thiết kế FPGA hoặc ASIC
- Nhà thiết kế hoặc sinh viên muốn ôn lại kiến thức nền tảng

2. Cú pháp và Khái niệm Cơ bản của Verilog
Cú pháp và Cấu trúc Verilog
Định nghĩa và Sử dụng Module
Trong Verilog, đơn vị cơ bản nhất là “module”. Các module đại diện cho các thành phần mạch và chứa mô tả về đầu vào, đầu ra và cấu trúc nội bộ. Dưới đây là một ví dụ về một module đơn giản:
module AND_gate (
input wire a, // input a
input wire b, // input b
output wire y // output y
);
assign y = a & b; // AND operation
endmodule
Mã này thực hiện phép AND trên hai đầu vào (a và b) và xuất kết quả ra y. Module được định nghĩa bằng từ khóa module và kết thúc bằng endmodule.
Lựa chọn Kiểu Dữ liệu (wire vs. reg)
Verilog sử dụng hai kiểu dữ liệu chính:
- wire : Đại diện cho một dây dẫn vật lý. Dùng để kết nối các tín hiệu.
- reg : Đại diện cho một thanh ghi. Dùng để lưu giá trị dựa trên các sự kiện đồng hồ.
Ví dụ:
module Example (
input wire clk, // clock input
input wire rst, // reset input
input wire a, // input a
output reg y // output y
);
always @(posedge clk or posedge rst) begin
if (rst)
y <= 0; // output = 0 on reset
else
y <= a; // assign input a to output y on clock edge
end
endmodule
Ở đây, y cần giữ một giá trị, vì vậy kiểu reg được sử dụng trong một khối always.
Cấu trúc Điều khiển (if, case) và Ghi chú về Mô phỏng
Sử dụng câu lệnh if
Verilog dùng if để thực hiện nhánh điều kiện:
always @(posedge clk) begin
if (a == 1'b1)
y <= 1'b0; // set y = 0 when a is 1
else
y <= 1'b1; // otherwise set y = 1
end
Sử dụng câu lệnh case
Đối với các điều kiện đa nhánh:
always @(state) begin
case (state)
2'b00: y = 1'b0;
2'b01: y = 1'b1;
2'b10: y = 1'b0;
2'b11: y = 1'b1;
default: y = 1'bx; // unknown state
endcase
end
Các Khái Niệm Cơ Bản cho Người Mới Bắt Đầu
Blocking vs. Non-Blocking Assignments
Verilog cung cấp hai loại gán:
- Blocking (
=) : Thực thi tuần tự. - Non-blocking (
<=) : Thực thi đồng thời.
Ví dụ:
always @(posedge clk) begin
a = b; // blocking
c <= d; // non-blocking
end
Tư duy song song
Verilog hỗ trợ thực thi song song:
always @(posedge clk) begin
a <= b + 1;
end
always @(posedge clk) begin
c <= d - 1;
end
Sự Khác Biệt Giữa Mô Phỏng và Tổng Hợp
- Simulation : Xác minh hành vi trong phần mềm.
- Synthesis : Chuyển đổi thiết kế thành phần cứng.
Một số cấu trúc như initial chỉ dành cho mô phỏng.
3. Các Tính Năng Chính của Verilog
Điểm mạnh và So sánh với Các HDL Khác
Điểm mạnh của Verilog
- Cú pháp đơn giản
- Verilog giống C, giúp các lập trình viên dễ học.
- Các thành phần cơ bản—module, kiểu dữ liệu, toán tử—rất trực quan.
- Hỗ trợ rộng rãi
- Tiêu chuẩn trong các công cụ FPGA/ASIC như Vivado và ModelSim.
- Cộng đồng học tập lớn và nhiều tài nguyên.
- Phương pháp thiết kế linh hoạt
- Hỗ trợ thiết kế RTL và hơn thế nữa.
So sánh Verilog, VHDL và SystemVerilog
| Language | Features | Use Cases |
|---|---|---|
| Verilog | Simplified syntax, low learning cost. Widely used for FPGA/ASIC. | Rapid prototyping, FPGA design |
| VHDL | Strict grammar, supports robust and precise designs. | Mission-critical systems |
| SystemVerilog | Enhanced version of Verilog. Supports advanced testbenches and class-based design. | Advanced verification and system design |
- Khác biệt với VHDL : VHDL nhấn mạnh cú pháp chặt chẽ, trong khi Verilog ưu tiên biểu đạt ngắn gọn.
- Khác biệt với SystemVerilog : SystemVerilog bổ sung các tính năng hướng đối tượng và khả năng xác minh nâng cao.
Các Trường Hợp Ứng Dụng Thực Tế của Verilog
Vai trò của Verilog trong thiết kế FPGA
FPGAs là các mạch tích hợp có thể lập trình cho phép cấu hình phần cứng linh hoạt. Verilog giúp thiết kế logic số phức tạp một cách hiệu quả. Các vai trò chính bao gồm:
- Lập mẫu
- Được sử dụng để xác minh hành vi mạch sớm trong quá trình phát triển sản phẩm.
- Lập mẫu nhanh chóng với khả năng thích nghi dễ dàng với các thay đổi yêu cầu.
- Xác minh hành vi
- Mô phỏng với Verilog giúp phát hiện sớm các vấn đề thiết kế.
- Các công cụ như ModelSim cho phép kỹ sư xây dựng testbench và quan sát hành vi hệ thống.
Quy trình Cơ bản của Mô phỏng Mạch
Các bước chung cho mô phỏng dựa trên Verilog là:
- Mô tả mạch
- Triển khai mạch mục tiêu bằng Verilog.
- Tạo testbench
- Testbench định nghĩa môi trường để xác minh hành vi mạch.
- Ví dụ:
module Testbench; reg a, b; wire y; // Instantiate the module under test AND_gate uut ( .a(a), .b(b), .y(y) ); initial begin // Apply test patterns a = 0; b = 0; #10; a = 0; b = 1; #10; a = 1; b = 0; #10; a = 1; b = 1; #10; end endmodule
- Chạy mô phỏng
- Thực thi testbench trong trình mô phỏng và xác minh hành vi mong đợi.
- Phân tích kết quả
- Kiểm tra các đầu ra dạng sóng và xác định các vấn đề thiết kế.

4. Các Ví Dụ Thiết Kế Thực Tế Sử Dụng Verilog
Học qua Mã Verilog Mẫu
Ví dụ Thiết kế Bộ đếm (kèm Giải thích Mã)
Bộ đếm là thành phần cơ bản trong thiết kế số. Dưới đây là một bộ đếm đơn giản tăng giá trị dựa trên tín hiệu đồng hồ:
module Counter (
input wire clk, // clock input
input wire rst, // reset input
output reg [3:0] count // 4-bit counter output
);
always @(posedge clk or posedge rst) begin
if (rst)
count <= 4'b0000; // reset counter to 0
else
count <= count + 1; // increment on rising edge
end
endmodule
Giải thích:
clkđiều khiển thời gian.rstkhởi tạo bộ đếm.- Bộ đếm tăng từ 0 đến 15 đồng bộ với đồng hồ.
Ví dụ và Ứng dụng FSM (Finite State Machine)
FSM được sử dụng để thiết kế các mạch có nhiều trạng thái. Dưới đây là một ví dụ đơn giản với ba trạng thái:
module FSM (
input wire clk, // clock input
input wire rst, // reset input
input wire in, // trigger input
output reg [1:0] state // current state
);
// State definitions
localparam STATE0 = 2'b00,
STATE1 = 2'b01,
STATE2 = 2'b10;
always @(posedge clk or posedge rst) begin
if (rst)
state <= STATE0; // initial state
else begin
case (state)
STATE0: state <= (in) ? STATE1 : STATE0;
STATE1: state <= (in) ? STATE2 : STATE0;
STATE2: state <= (in) ? STATE0 : STATE1;
default: state <= STATE0;
endcase
end
end
endmodule
Giải thích:
- Các trạng thái được định nghĩa bằng
localparam. casexử lý các chuyển đổi dựa trênin.- Cấu trúc này có thể được áp dụng cho các bộ điều khiển hoặc mạch tạo tín hiệu.
Thiết Kế Bộ Cộng Đơn Giản (Thân Thiện Với Người Mới Bắt Đầu)
Một bộ cộng 2-bit cơ bản:
module Adder (
input wire [1:0] a, // 2-bit input a
input wire [1:0] b, // 2-bit input b
output wire [2:0] sum // 3-bit output to handle carry
);
assign sum = a + b; // addition
endmodule
Giải thích:
- Sử dụng
assigncho logic tổ hợp. - Đầu ra 3-bit tính đến carry‑out.
- Đây là khối xây dựng nền tảng cho logic số học.
Các Vấn Đề Thường Gặp và Giải Pháp
Lỗi Điển Hình (Mô Phỏng & Tổng Hợp)
- Lỗi Mô Phỏng
- Triệu chứng: Tín hiệu trở nên không xác định (
x). - Nguyên nhân: Thiếu khởi tạo hoặc kết nối module không đúng.
- Giải pháp: Định nghĩa giá trị khởi tạo hoặc khởi tạo qua testbench.
- Lỗi Tổng Hợp
- Triệu chứng: Sử dụng các cấu trúc không thể tổng hợp (ví dụ,
initial). - Nguyên nhân: Bao gồm mã chỉ dành cho mô phỏng.
- Giải pháp: Sử dụng các cấu trúc có thể tổng hợp (như
always).
Sử Dụng Công Cụ Gỡ Lỗi Hiệu Quả
Thiết kế Verilog đòi hỏi việc gỡ lỗi mạnh mẽ. Các công cụ phổ biến bao gồm:
- Trình mô phỏng (ví dụ, ModelSim)
- Kiểm tra hành vi tín hiệu và xác nhận thời gian qua hiển thị waveform.
- Trình xem Waveform
- Phân tích trực quan các tín hiệu đầu vào/đầu ra để xác định vấn đề thiết kế.
- Thông Điệp Gỡ Lỗi
- Sử dụng
$displayđể in giá trị trong quá trình mô phỏng:initial begin $display("Initial state: %b", state); end

5. Tài Nguyên và Công Cụ Học Verilog
Tài Nguyên Học Tập Được Đề Xuất
Sách & Hướng Dẫn cho Người Mới Bắt Đầu
Đối với người mới, tài liệu học tập đáng tin cậy là rất quan trọng. Các lựa chọn được đề xuất bao gồm:
- Sách
“Introduction to Digital Design with HDL”
- Giải thích các khái niệm cơ bản của cả Verilog và VHDL.
“Verilog HDL: A Guide to Digital Design and Synthesis”
Một cuốn sách tiếng Anh toàn diện bao phủ từ nền tảng đến thiết kế nâng cao.
“Digital Design and Verilog HDL Fundamentals”
Thích hợp cho người mới bắt đầu đến trình độ trung cấp, với trọng tâm mạnh vào thiết kế dựa trên Verilog.
- Hướng Dẫn Trực Tuyến
YouTube
- Các hướng dẫn miễn phí có sẵn bằng cả tiếng Anh và tiếng Nhật.
- Cho phép người học theo dõi cùng mã thực tế.
Trang Web
EDA Playground : Môi trường dựa trên trình duyệt để chạy Verilog.
- ASIC World : Cung cấp các hướng dẫn từ cú pháp đến ví dụ thiết kế thực tế.
Các Khóa Học Video và Học Thực Hành
- Udemy
- Các khóa học như “Verilog for Beginners” và “Learn FPGA Design” cung cấp nội dung có cấu trúc.
- Coursera
- Các khóa học cấp đại học tập trung vào thiết kế phần cứng.
Công Cụ Hỗ Trợ Phát Triển
Công Cụ Mô Phỏng (ModelSim, Vivado)
- ModelSim
- Công cụ mô phỏng Verilog hàng đầu.
Tính năng:
- Giao diện thân thiện với người dùng.
- Trình xem waveform trực quan để gỡ lỗi.
- Vivado
- Bộ công cụ thiết kế FPGA của Xilinx.
Tính năng:
- Hỗ trợ tích hợp từ RTL đến triển khai.
- Kết nối liền mạch với các bo mạch FPGA của Xilinx.
Chọn và Cài đặt Công cụ Tổng hợp
- Quartus Prime
- Bộ công cụ phát triển FPGA của Intel, có các phiên bản miễn phí.
- ISE Design Suite
- Được sử dụng cho các thiết bị FPGA Xilinx cũ hơn.
6. Câu hỏi thường gặp về việc học Verilog
Người mới nên bắt đầu học Verilog như thế nào?
Câu hỏi: Tôi vừa mới bắt đầu học Verilog. Cách tốt nhất để bắt đầu là gì?
Trả lời:
- Bắt đầu với những nền tảng cơ bản
- Bắt đầu bằng việc thiết kế các mạch đơn giản như cổng AND/OR. Hiểu cú pháp cơ bản và cấu trúc module là rất quan trọng.
- Sử dụng công cụ mô phỏng
- Các công cụ như ModelSim hoặc Vivado giúp kiểm tra mã của bạn. Chạy mô phỏng giúp tăng cường hiểu biết.
- Sử dụng nguồn tài liệu đáng tin cậy
- Tham khảo sách và các hướng dẫn trực tuyến để xây dựng nền tảng vững chắc (xem Phần 5 để biết đề xuất).
- Thử thực hiện các dự án nhỏ
- Sau khi nắm vững các kiến thức cơ bản, hãy thử xây dựng các dự án nhỏ như bộ đếm 4-bit hoặc các máy trạng thái hữu hạn (FSM) đơn giản.
Tôi nên chọn VHDL hay Verilog?
Câu hỏi: Tôi nên học ngôn ngữ nào—VHDL hay Verilog? Khi nào nên sử dụng mỗi ngôn ngữ?
Trả lời:
- Khi nào nên chọn Verilog
- Cú pháp đơn giản của Verilog khiến nó thân thiện với người mới, đặc biệt với những người có kinh nghiệm lập trình C.
- Được sử dụng rộng rãi cho việc tạo mẫu và phát triển FPGA.
- Khi nào nên chọn VHDL
- Lý tưởng cho các hệ thống quan trọng yêu cầu kiểm chứng thiết kế chặt chẽ.
- Kiểm tra kiểu dữ liệu mạnh mẽ giảm khả năng lỗi thiết kế.
- Tiêu chí lựa chọn
- Dễ học : Verilog thường dễ hơn cho người mới.
- Yêu cầu dự án : Tuân theo ngôn ngữ được sử dụng trong môi trường thiết kế.
- Hỗ trợ công cụ : Hầu hết các công cụ đều hỗ trợ cả hai, nhưng lựa chọn phụ thuộc vào FPGA/ASIC mục tiêu.
Những Sai lầm Thường gặp mà Người mới Nên Tránh
Câu hỏi: Những sai lầm nào mà người mới thường gặp khi học Verilog, và làm sao tránh chúng?
Trả lời:
- Thiếu khởi tạo
- Các tín hiệu có thể xuất hiện dưới dạng
x(không xác định) trong quá trình mô phỏng. - Giải pháp: Luôn khởi tạo tín hiệu hoặc đặt giá trị trong testbench của bạn.
initial begin signal = 0; // initialize signal end
- Nhầm lẫn giữa gán blocking và non-blocking
- Sử dụng sai
=(blocking) và<=(non-blocking) có thể gây hành vi không mong muốn. - Giải pháp: Sử dụng gán non-blocking trong các khối
alwayscó đồng hồ.
- Kết hợp mã có thể tổng hợp và mã chỉ dùng cho mô phỏng
- Bao gồm các cấu trúc chỉ dùng cho mô phỏng (ví dụ,
initial) trong logic có thể tổng hợp sẽ gây lỗi. - Giải pháp: Tách logic có thể tổng hợp ra khỏi các khối chỉ dùng cho mô phỏng.
- Hiểu sai về thực thi song song
- Verilog mô tả hành vi phần cứng song song, không phải logic phần mềm tuần tự.
- Giải pháp: Hiểu rằng mỗi khối
alwayschạy độc lập.

7. Tiến tới Bước Tiếp theo với Verilog
Đánh giá Tiến độ Học Verilog của Bạn
Danh sách Kiểm tra
- Hiểu cú pháp cơ bản : Đảm bảo bạn có thể mô tả các module, kiểu dữ liệu và cấu trúc điều khiển.
- Kinh nghiệm thiết kế thực tế : Các bộ đếm, FSM và các thiết kế tương tự nên trở nên quen thuộc.
- Sử dụng công cụ : Bạn nên có khả năng mô phỏng và gỡ lỗi với ModelSim hoặc Vivado.
Chuẩn bị cho Bước Tiếp theo
- Nếu bạn đã nắm vững các kiến thức cơ bản, bạn đã sẵn sàng chuyển sang các chủ đề nâng cao hơn.
- Sử dụng các bước dưới đây để mở rộng kỹ năng kỹ thuật của bạn.
Tiến tới Thiết kế FPGA
Học các Nguyên tắc Cơ bản của FPGA
FPGA (Field-Programmable Gate Array) là một trong những nền tảng thực tiễn nhất để áp dụng kỹ năng Verilog.
- Chuẩn bị một bo mạch phát triển FPGA
- Bo mạch dành cho người mới bắt đầu được đề xuất: Basys 3, Nexys A7 (Digilent)
- Lý do: Hỗ trợ cộng đồng mạnh mẽ và tích hợp dễ dàng với Vivado.
- Bắt đầu với các dự án đơn giản
- Bắt đầu với việc nhấp nháy LED hoặc các mạch điều khiển bằng công tắc.
- Học cách chia tần số đồng hồ và logic điều khiển cơ bản.
- Tiến tới các hệ thống phức tạp hơn
- Thiết kế các bộ điều khiển multi-FSM, giao diện bộ nhớ và hệ thống tích hợp.
Chuyển sang SystemVerilog
Tại sao nên học SystemVerilog?
- SystemVerilog mở rộng Verilog với các tính năng xác thực nâng cao và hướng đối tượng.
- Hữu ích cho việc xây dựng các testbench phức tạp và hệ thống quy mô lớn.
Các chủ đề chính cần học
- Testbench dựa trên lớp
- Cho phép kiểm thử ngẫu nhiên và phân tích coverage.
- Sử dụng giao diện
- Đơn giản hoá việc giao tiếp giữa các mô-đun.
- Cấu trúc điều khiển mở rộng
- Học các tính năng như
uniquevàpriorityđể cải thiện độ an toàn của thiết kế.
Làm việc trên các dự án thực tế
Tham gia các dự án mã nguồn mở
- Thiết kế bộ xử lý RISC-V
- Các mô-đun DSP (Xử lý tín hiệu số) đơn giản
Bắt đầu dự án của riêng bạn
- Tạo các thiết kế gốc dựa trên sở thích của bạn.
- Ví dụ: đồng hồ kỹ thuật số, bộ xử lý âm thanh, mạch lọc tín hiệu.
Các bước học tiếp theo được đề xuất
Nắm vững kỹ năng thiết kế nâng cao
- Thiết kế pipeline
- Học các nguyên tắc cơ bản được sử dụng trong các bộ xử lý hiệu năng cao.
- Hiểu về miền đồng hồ
- Thành thạo các kỹ thuật xử lý tín hiệu qua nhiều miền đồng hồ.
- Thiết kế tiêu thụ năng lượng thấp
- Áp dụng các phương pháp thiết kế tiết kiệm năng lượng cho các ứng dụng thực tế.


