目次
- 1 1. Verilog là gì? Tổng quan và mục đích sử dụng
- 2 2. Cú pháp và khái niệm cơ bản của Verilog
- 3 3. Tính năng chính và đặc điểm của Verilog
- 4 4. Ví dụ thiết kế thực hành với Verilog
- 5 5. Tài nguyên và công cụ để học Verilog
- 6 6. Câu hỏi thường gặp (FAQ) về Verilog
- 7 7. Học Verilog để bước tiếp
- 8 Thuật ngữ sử dụng (Glossary)
1. Verilog là gì? Tổng quan và mục đích sử dụng
Định nghĩa cơ bản về Verilog
Verilog là một trong những ngôn ngữ mô tả phần cứng (HDL) được sử dụng để thiết kế mạch số. Nếu ngôn ngữ lập trình phần mềm dùng để mô tả chương trình máy tính, thì Verilog được dùng để mô tả hành vi và cấu trúc của mạch/systems số. Nhờ ngôn ngữ này, việc thiết kế mạch phức tạp trở nên tinh gọn hơn, giúp nhà thiết kế mô phỏng và tổng hợp (chuyển đổi thành dạng có thể sản xuất) hiệu quả. Verilog được phát triển vào năm 1984 và được tiêu chuẩn hóa bởi IEEE vào năm 1995. Sau đó, ngôn ngữ tiếp tục phát triển và hiện được sử dụng rộng rãi trong 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 hệ thống xử lý thông tin bằng tín hiệu điện. Ví dụ điển hình là bộ xử lý và bộ nhớ hoạt động bên trong điện thoại thông minh hay máy tính. Verilog đóng vai trò là công cụ giúp tối ưu hóa quy trình thiết kế các hệ thống số như vậy. Cụ thể, Verilog thường được dùng trong các tình huống sau:- Thiết kế FPGA: FPGA là thiết bị có tính linh hoạt cao. Với Verilog, bạn có thể tự do định nghĩa chức năng của FPGA và sử dụng như một thiết bị có thể lập trình lại.
- Thiết kế ASIC: ASIC là vi mạch tích hợp chuyên dụng cho mục đích cụ thể. Dùng Verilog để thiết kế IC tùy biến.
- Mô phỏng: Mạch được mô tả bằng Verilog có thể mô phỏng trên phần mềm để kiểm tra hành vi trước. Nhờ đó phát hiện và sửa lỗi sớm.
Nội dung học được và đối tượng độc giả
Bài viết này hướng đến người mới bắt đầu học Verilog hoặc muốn ôn lại nền tảng, theo lộ trình:- Cú pháp cơ bản của Verilog và những nền tảng thiết kế
- Các ví dụ thực hành và cách gỡ lỗi (debug)
- Giới thiệu tài nguyên và công cụ hỗ trợ học
- Người mới bắt đầu với Verilog/HDL
- Kỹ sư muốn bắt đầu thiết kế FPGA/ASIC
- Nhà thiết kế hay sinh viên muốn ôn tập kiến thức nền

2. Cú pháp và khái niệm cơ bản của Verilog
Cú pháp và cơ chế hoạt động cơ bản
Định nghĩa và cách dùng mô-đun (module
)
Khi bắt đầu với Verilog, đơn vị cơ bản nhất là “mô-đun (module)”. Mô-đun biểu diễn một thành phần của mạch, nơi bạn mô tả ngõ vào/ra và cấu trúc bên trong. Ví dụ đơn giản:module AND_gate (
input wire a, // 入力a
input wire b, // 入力b
output wire y // 出力y
);
assign y = a & b; // AND演算
endmodule
Đoạn mã trên mô tả mạch thực hiện phép AND giữa hai tín hiệu vào (a
và b
) và đưa kết quả ra (y
). Từ khóa module
dùng để định nghĩa mô-đun, và kết thúc bằng endmodule
.Các kiểu dữ liệu và cách chọn (phân biệt wire
, reg
)
Hai kiểu chính trong Verilog:wire
: Biểu diễn dây nối/tín hiệu, dùng để kết nối giữa các phần của mạch.reg
: Biểu diễn thanh ghi, dùng để lưu giữ giá trị đồng bộ theo xung nhịp.
wire
và reg
:module Example (
input wire clk, // クロック入力
input wire rst, // リセット入力
input wire a, // 入力a
output reg y // 出力y
);
always @(posedge clk or posedge rst) begin
if (rst)
y <= 0; // リセット時、出力を0に
else
y <= a; // クロック時、入力aを出力yに代入
end
endmodule
Ở đây, ngõ ra y
thay đổi theo xung nhịp clk
. Kiểu reg
dùng để giữ giá trị và được cập nhật trong khối always
.Cấu trúc điều khiển (if
, case
) và lưu ý khi mô phỏng
Cách dùng if
if
dùng cho rẽ nhánh điều kiện. Ví dụ:always @(posedge clk) begin
if (a == 1'b1)
y <= 1'b0; // aが1の場合、yを0に設定
else
y <= 1'b1; // それ以外の場合、yを1に設定
end
if
hữu ích khi cần thay đổi hành vi mạch theo điều kiện.Cách dùng case
Khi có nhiều nhánh điều kiện, case
giúp mã dễ đọc hơn. Ví dụ biểu diễn chuyển trạng thái: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; // 不明な状態
endcase
end
Ở ví dụ này, ngõ ra y
thay đổi theo trạng thái state
.Những khái niệm nền tảng người mới nên biết
Khác biệt giữa gán chặn (=
) và gán không chặn (<=
)
Trong Verilog có hai kiểu gán:- Gán chặn (blocking,
=
): Thực thi tuần tự từng câu lệnh. - Gán không chặn (non-blocking,
<=
): Cập nhật song song/đồng thời.
always @(posedge clk) begin
a = b; // ブロッキング代入
c <= d; // ノンブロッキング代入
end
Gán chặn giống hành vi lập trình phần mềm tuần tự; gán không chặn mô tả chính xác phần cứng song song. Trong khối always
đồng bộ xung nhịp, thường dùng <=
.Tư duy xử lý song song và cách mô tả
Verilog hỗ trợ mô tả phần cứng hoạt động song song. Ví dụ hai khốialways
độc lập:always @(posedge clk) begin
a <= b + 1;
end
always @(posedge clk) begin
c <= d - 1;
end
Mỗi khối là một tiến trình độc lập, gần với hành vi phần cứng thực tế.Khác biệt giữa mô phỏng và tổng hợp
- Mô phỏng: Kiểm chứng trên phần mềm xem mạch hoạt động như mong đợi.
- Tổng hợp: Chuyển thiết kế sang phần cứng thực thi.
initial
) sẽ không dùng cho tổng hợp. Vì vậy cần tách bạch mã có thể tổng hợp và mã chỉ dùng cho mô phỏng.3. Tính năng chính và đặc điểm của Verilog
Đặc điểm của Verilog và khác biệt với các HDL khác
Thế mạnh của Verilog
Verilog có các ưu điểm sau so với các HDL khác:- Cú pháp đơn giản
- Cú pháp giống C, dễ tiếp cận với kỹ sư có kinh nghiệm lập trình.
- Các thành phần cơ bản như module, kiểu dữ liệu, toán tử… trực quan, thân thiện với người mới.
- Hỗ trợ rộng rãi
- Được hỗ trợ chuẩn trong các công cụ FPGA/ASIC (Vivado, ModelSim…).
- Nhiều tài nguyên học tập và cộng đồng giúp người mới nhanh tiến bộ.
- Phương pháp thiết kế linh hoạt
- Trung tâm là thiết kế RTL, hỗ trợ từ mức thấp đến mức cao.
So sánh với VHDL và SystemVerilog
Cùng xem khác biệt giữa Verilog và các HDL khác:Ngôn ngữ | Đặc điểm | Ví dụ áp dụng |
---|---|---|
Verilog | Cú pháp gọn, chi phí học thấp; dùng rộng rãi cho FPGA/ASIC. | Prototyping nhanh, thiết kế FPGA |
VHDL | Ngữ pháp chặt chẽ, thiết kế vững chắc; mô tả đặc tả phức tạp tốt. | Hệ thống đòi hỏi mức tin cậy cao |
SystemVerilog | Bản mở rộng của Verilog; hỗ trợ testbench nâng cao và thiết kế hướng đối tượng. | Tạo testbench nâng cao, thiết kế hệ thống |
- Khác VHDL: VHDL chặt chẽ nên giảm lỗi, còn Verilog đơn giản, ít dòng, hiệu quả hơn.
- Khác SystemVerilog: SystemVerilog là siêu tập của Verilog, bổ sung mạnh về kiểm chứng và OOP.
Các ví dụ sử dụng Verilog
Vai trò của Verilog trong thiết kế FPGA
FPGA là vi mạch có thể lập trình bởi người dùng. Với Verilog, bạn mô tả logic phức tạp một cách dễ dàng:- Prototyping
- Kiểm chứng hành vi mạch ở giai đoạn đầu phát triển.
- Thiết kế thử nhanh và linh hoạt trước thay đổi đặc tả.
- Kiểm chứng hoạt động
- Mô phỏng bằng Verilog để phát hiện lỗi sớm.
- Tạo testbench trong công cụ (vd: ModelSim) để kiểm tra mạch.
Quy trình mô phỏng mạch
Quy trình cơ bản:- Mô tả mạch
- Viết Verilog cho đối tượng thiết kế.
- Tạo testbench
- Định nghĩa môi trường kiểm thử. Ví dụ testbench đơn giản:
module Testbench;
reg a, b;
wire y;
// テスト対象のモジュールをインスタンス化
AND_gate uut (
.a(a),
.b(b),
.y(y)
);
initial begin
// テストパターンの適用
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à kiểm tra hành vi.
- Phân tích kết quả
- Phân tích đầu ra mô phỏng để khoanh vùng vấn đề thiết kế.

4. Ví dụ thiết kế thực hành với Verilog
Học qua các đoạn mã mẫu
Ví dụ bộ đếm (counter) kèm giải thích
Bộ đếm là phần tử cơ bản và quan trọng trong thiết kế số. Ví dụ tăng giá trị theo xung nhịp:module Counter (
input wire clk, // クロック入力
input wire rst, // リセット入力
output reg [3:0] count // 4ビットのカウンタ出力
);
always @(posedge clk or posedge rst) begin
if (rst)
count <= 4'b0000; // リセット時にカウンタを0にする
else
count <= count + 1; // クロックが立ち上がるたびにカウンタをインクリメント
end
endmodule
Giải thích:clk
là xung nhịp điều khiển thời điểm hoạt động.rst
là tín hiệu đặt lại, khởi tạo bộ đếm.- Giá trị 4 bit (0–15) tăng theo cạnh lên của xung nhịp.
Mạch chuyển trạng thái (FSM) và ứng dụng
FSM (Finite State Machine) dùng khi thiết kế mạch có nhiều trạng thái:module FSM (
input wire clk, // クロック入力
input wire rst, // リセット入力
input wire in, // 状態遷移のトリガー
output reg [1:0] state // 現在の状態
);
// 状態定義
localparam STATE0 = 2'b00,
STATE1 = 2'b01,
STATE2 = 2'b10;
always @(posedge clk or posedge rst) begin
if (rst)
state <= STATE0; // 初期状態
else begin
case (state)
STATE0: state <= (in) ? STATE1 : STATE0;
STATE1: state <= (in) ? STATE2 : STATE0;
STATE2: state <= (in) ? STATE0 : STATE1;
default: state <= STATE0;
end
end
end
endmodule
Giải thích:- Dùng
localparam
để định nghĩa trạng thái. - Dùng
case
để chuyển trạng thái dựa trênin
. - Áp dụng cho các hệ thống điều khiển đơn giản hoặc sinh tín hiệu.
Thiết kế bộ cộng đơn giản (dành cho người mới)
Ví dụ bộ cộng 2 bit:module Adder (
input wire [1:0] a, // 2ビットの入力a
input wire [1:0] b, // 2ビットの入力b
output wire [2:0] sum // 3ビットの出力(最大値が3ビットになるため)
);
assign sum = a + b; // 加算処理
endmodule
Giải thích:- Dùng
assign
để thực hiện phép cộng. - Ngõ ra 3 bit để tính đến trường hợp nhớ (carry).
- Bộ cộng là nền tảng cho các mạch xử lý số.
Vấn đề thường gặp và cách khắc phục
Lỗi thường gặp khi mô phỏng/tổng hợp
- Lỗi khi mô phỏng
- Ví dụ: Tín hiệu trở thành
x
(không xác định). - Nguyên nhân: Thiếu khởi tạo hoặc nối kết mô-đun sai.
- Khắc phục: Đặt giá trị khởi tạo rõ ràng hoặc khởi tạo trong testbench.
- Lỗi khi tổng hợp
- Ví dụ: Cú pháp không thể tổng hợp (vd:
initial
). - Nguyên nhân: Dùng cấu trúc không được công cụ tổng hợp hỗ trợ.
- Khắc phục: Dùng cấu trúc có thể tổng hợp (vd:
always
).
Cách dùng công cụ debug
Trong thiết kế Verilog, gỡ lỗi rất quan trọng. Các công cụ thường dùng:- Trình mô phỏng (vd: ModelSim)
- Xem kết quả mô phỏng dưới dạng sóng để kiểm tra thời điểm và hành vi tín hiệu.
- Waveform viewer
- Quan sát thay đổi tín hiệu vào/ra để xác định vấn đề.
- Thông điệp debug
- Dùng
display
để in thông tin kiểm tra giá trị/trạng thái:
initial begin
$display("Initial state: %b", state);
end

5. Tài nguyên và công cụ để học Verilog
Tài nguyên khuyến nghị
Sách và tutorial trực tuyến cho người mới
Đối với người mới, nên dùng tài liệu đáng tin cậy. Gợi ý:- Sách
- “HDLによるデジタル設計入門”
- Sách tiếng Nhật so sánh các khái niệm cơ bản Verilog/VHDL.
- “Verilog HDL: A Guide to Digital Design and Synthesis”
- Tiếng Anh, hệ thống từ cơ bản đến thực hành.
- “Digital Design and Verilog HDL Fundamentals”
- Cho người mới đến trung cấp, giải thích chi tiết thiết kế số bằng Verilog.
- Tutorial trực tuyến
- YouTube
- Nhiều video miễn phí bằng tiếng Nhật/Anh; có thể học qua chạy mã thực tế.
- Ví dụ: “Verilog入門”, “FPGA設計の基本”.
- Website
- EDA Playground: Môi trường thử mã Verilog ngay trên trình duyệt.
- ASIC World: Từ cú pháp cơ bản đến ví dụ thiết kế thực tiễn.
Khóa học video và tài liệu thực hành
- Udemy
- Khóa “Verilog for Beginners”, “Học thiết kế FPGA”… học qua video và thực hành.
- Có phí nhưng nội dung có hệ thống, phù hợp người mới.
- Coursera
- Cung cấp khóa đại học chuyên về thiết kế phần cứng; từ nền tảng đến nâng cao.
Công cụ hỗ trợ phát triển
Công cụ mô phỏng/mô hình (ModelSim, Vivado…)
- ModelSim
- Công cụ mô phỏng Verilog kinh điển; dùng để kiểm tra sóng và hành vi tín hiệu.
- Đặc điểm
- Giao diện thân thiện cho người mới.
- Waveform viewer trực quan, tối ưu cho debug.
- Vivado
- Công cụ của Xilinx cho thiết kế FPGA dùng Verilog.
- Đặc điểm
- Tích hợp từ RTL, mô phỏng, tổng hợp đến triển khai.
- Kết nối mượt với board FPGA (Zynq, Artix…).
Cách chọn công cụ tổng hợp và triển khai
- Quartus Prime
- Công cụ của Intel cho FPGA; có bản miễn phí cho người mới.
- Ưu điểm
- Biểu diễn sơ đồ mạch trực quan.
- Dễ tích hợp với dòng Cyclone.
- ISE Design Suite
- Công cụ Xilinx cũ cho FPGA đời trước; phù hợp môi trường giáo dục.
- Ưu điểm
- Tối ưu cho các board học tập (vd: Basys 2).
6. Câu hỏi thường gặp (FAQ) về Verilog
Người mới nên học Verilog như thế nào?
Câu hỏi: Tôi mới bắt đầu học Verilog, nên tiến hành ra sao?
Trả lời:
- Bắt đầu từ nền tảng:
- Hãy thiết kế các mạch đơn giản (AND, OR). Nắm cú pháp cơ bản và cách dùng module.
- Tận dụng công cụ mô phỏng:
- Dùng ModelSim/Vivado để kiểm tra mã. Thực hành mô phỏng giúp hiểu sâu.
- Dùng tài nguyên đáng tin:
- Tận dụng sách/tutorial (xem mục “5. Tài nguyên và công cụ”).
- Thử dự án nhỏ:
- Sau nền tảng, hãy thực hiện bộ đếm 4 bit hoặc FSM để rèn kỹ năng.
Nên chọn VHDL hay Verilog?
Câu hỏi: Nên học VHDL hay Verilog? Dùng trong trường hợp nào?
Trả lời:
- Khi chọn Verilog:
- Cú pháp đơn giản, thân thiện với người mới hoặc người có nền C.
- Dùng rộng rãi trong prototyping và thiết kế FPGA.
- Khi chọn VHDL:
- Phù hợp hệ thống quan trọng, yêu cầu thiết kế chặt chẽ, quy mô lớn.
- Ngữ pháp chặt giúp hạn chế lỗi thiết kế.
- Tiêu chí chọn:
- Dễ học: Verilog phù hợp người mới.
- Yêu cầu dự án: Theo ngôn ngữ mà dự án sử dụng.
- Hỗ trợ công cụ: Đa số công cụ hỗ trợ cả hai; chọn theo mục tiêu (FPGA/ASIC).
Những lỗi người mới hay mắc?
Câu hỏi: Lỗi thường gặp khi học Verilog là gì? Làm sao tránh?
Trả lời:
- Thiếu khởi tạo:
- Trong mô phỏng, tín hiệu dễ thành
x
(không xác định). - Khắc phục: Luôn đặt giá trị ban đầu hoặc khởi tạo trong testbench.
initial begin
signal = 0; // 信号を初期化
end
- Nhầm lẫn giữa gán chặn và không chặn:
- Dùng lẫn
=
và<=
có thể gây hành vi không mong muốn. - Khắc phục: Trong khối
always
đồng bộ, hãy dùng<=
.
- Trộn mã có thể tổng hợp với mã chỉ để mô phỏng:
- Dùng
initial
trong phần tổng hợp sẽ gây lỗi. - Khắc phục: Tách bạch mã tổng hợp và mã mô phỏng.
- Chưa hiểu rõ xử lý song song:
- Verilog mô tả mạch song song, dễ bị nhầm với xử lý tuần tự kiểu phần mềm.
- Khắc phục: Nắm vững khái niệm song song và vai trò các khối
always
độc lập.

7. Học Verilog để bước tiếp
Ôn tập và chuẩn bị giai đoạn tiếp theo
Ôn tập
- Nắm cú pháp cơ bản: Kiểm tra khả năng mô tả module, kiểu dữ liệu, cấu trúc điều khiển.
- Nắm ví dụ thực hành: Qua bộ đếm/FSM, có thể tự tạo mạch số cơ bản.
- Dùng công cụ: Làm quen mô phỏng và debug bằng ModelSim/Vivado.
Chuẩn bị bước tiếp
- Nếu đã vững nền tảng, bạn sẵn sàng cho chủ đề nâng cao.
- Làm theo các bước sau để tích lũy kỹ năng mới.
Tiến tới thiết kế FPGA
Học nền tảng FPGA
FPGA là nền tảng lý tưởng để áp dụng kỹ năng Verilog. FPGA là phần cứng có thể lập trình, phù hợp nhiều kiểu thiết kế.- Chuẩn bị board FPGA
- Board cho người mới: Basys 3, Nexys A7 (Digilent).
- Lý do: Nhiều tài liệu, dễ tích hợp với Vivado.
- Bắt đầu từ dự án cơ bản
- Nháy LED, điều khiển nút nhấn…
- Qua phân chia xung (clock divider) và điều khiển nhiều ngõ vào, học nền tảng thiết kế FPGA.
- Tiến tới hệ thống phức tạp
- Tích hợp nhiều FSM, thiết kế giao tiếp bộ nhớ để mở rộng kỹ năng.
Chuyển sang SystemVerilog
Lý do học SystemVerilog
- SystemVerilog mở rộng Verilog, hỗ trợ kiểm chứng nâng cao và lập trình hướng đối tượng.
- Đặc biệt mạnh khi tạo testbench và thiết kế hệ thống lớn.
Các chủ đề nên học
- Testbench hướng lớp
- Hỗ trợ kiểm thử ngẫu nhiên và phân tích độ phủ (coverage).
- Dùng interface
- Đơn giản hóa mô tả giao tiếp giữa mô-đun phức tạp.
- Cấu trúc điều khiển mở rộng
unique
,priority
… giúp tăng an toàn thiết kế.
Tham gia dự án thực tế
Tham gia dự án mã nguồn mở
Tham gia các dự án thiết kế số trên GitHub để tích lũy kinh nghiệm, ví dụ:- Thiết kế bộ xử lý RISC-V
- Mô-đun DSP đơn giản
Bắt đầu dự án riêng
- Thiết kế số trong lĩnh vực bạn quan tâm.
- Ví dụ: Đồng hồ số, bộ xử lý âm thanh, mạch lọc tín hiệu.
Đề xuất bước học tiếp theo
Nâng cao kỹ năng thiết kế
- Thiết kế pipeline
- Nền tảng cho bộ xử lý nhanh và mạch xử lý tín hiệu.
- Hiểu về miền xung nhịp (clock domain)
- Trao đổi tín hiệu giữa các mô-đun có tốc độ xung khác nhau.
- Thiết kế tiết kiệm điện
- Áp dụng kỹ thuật tối ưu điện năng để có kỹ năng thực tế hơn.
Thuật ngữ sử dụng (Glossary)
- HDL (Hardware Description Language): Ngôn ngữ mô tả phần cứng.
- FPGA: Mảng cổng có thể lập trình hiện trường.
- ASIC: Vi mạch tích hợp chuyên dụng.
- Mô phỏng (simulation): Kiểm chứng hành vi mạch trên phần mềm.
- Tổng hợp (synthesis): Chuyển thiết kế sang dạng phần cứng thực thi.
- RTL: Mức truyền thanh ghi (Register Transfer Level).
- wire: Dây/tín hiệu kết nối giữa các phần tử.
- reg: Thanh ghi lưu giá trị theo xung nhịp.
- Blocking / Non-blocking assignment: Gán chặn (
=
) / gán không chặn (<=
). - FSM: Máy trạng thái hữu hạn.