Trước hết, một sự thật
Bạn không cần cài gì để học Verilog. Mọi trình soạn thảo tương tác trong bộ tài liệu này đều chạy Verilog thật bằng Icarus Verilog trong sandbox, kể cả trình xem dạng sóng. Nếu bạn đến đây để học ngôn ngữ, cứ bỏ qua trang này và quay lại khi muốn làm một dự án dài hơn trên máy.
Vẫn muốn cài trên máy? Đọc tiếp nhé.
"Cài đặt Verilog" thực ra nghĩa là gì
Verilog là một ngôn ngữ, không phải một chương trình. Để chạy nó, bạn cần:
- Một trình mô phỏng (simulator): công cụ biên dịch các tệp
.vrồi chạy chúng. Với phần lớn người học, đó là Icarus Verilog, cung cấp trình biên dịchiverilogvà runtimevvp. - Một trình xem dạng sóng (waveform), thường là GTKWave, để đọc các tệp
.vcdmà testbench tạo ra. - Một trình soạn thảo văn bản. VS Code kèm extension Verilog là lựa chọn phổ biến, nhưng trình nào cũng được.
Các bộ công cụ của hãng (Xilinx Vivado, Intel Quartus, Synopsys VCS, Cadence Xcelium) dành cho lập trình FPGA và thiết kế ASIC. Chúng nặng, thường cần giấy phép và quá thừa cho việc học. Cứ dùng Icarus.
Cài trên macOS
Cách nhanh nhất là Homebrew:
brew install icarus-verilog gtkwave
Lệnh này cài cả trình biên dịch lẫn trình xem dạng sóng. Kiểm tra lại:
iverilog -V
gtkwave --version
Bạn sẽ thấy số phiên bản của cả hai. iverilog tự thêm mình vào PATH. GTKWave cài một app bundle trong /Applications và lệnh gtkwave để bạn mở từ terminal.
Nếu chưa có Homebrew, làm theo hướng dẫn ở brew.sh trước (chỉ một lệnh curl), rồi quay lại đây.
Cài trên Linux
Trên các bản phân phối dựa trên Debian (Ubuntu, Mint, Pop!_OS):
sudo apt update
sudo apt install iverilog gtkwave
Trên Fedora / các hệ thống kiểu RHEL:
sudo dnf install iverilog gtkwave
Trên Arch:
sudo pacman -S iverilog gtkwave
Sau đó kiểm tra theo cách tương tự:
iverilog -V
gtkwave --version
Phiên bản trong kho gói đôi khi chậm hơn upstream một bản phát hành. Để học thì như vậy là ổn. Nếu cần bản mới hơn, hãy build từ mã nguồn: repository GitHub của dự án có hướng dẫn, và chỉ cần chạy ./configure && make && sudo make install.
Cài trên Windows
Cách dễ nhất là bộ cài dựng sẵn do cộng đồng iverilog duy trì tại bleyer.org (tìm "iverilog Windows"). Bộ cài này gói sẵn Icarus Verilog, GTKWave và bộ công cụ GCC mà Icarus cần dùng bên trong.
- Tải bộ cài mới nhất (thường là
iverilog-vXX-setup.exe). - Chạy nó. Giữ các thiết lập mặc định trừ khi bạn có lý do để đổi.
- Khi bộ cài hỏi, để nguyên ô "Add to PATH" được chọn.
- Mở một cửa sổ PowerShell hoặc Command Prompt mới và kiểm tra:
iverilog -V
gtkwave --version
Nếu bạn quên thêm vào PATH, tệp thực thi nằm ở đâu đó như C:\iverilog\bin\iverilog.exe. Hãy thêm C:\iverilog\bin vào PATH của người dùng trong System Properties, hoặc chạy lại bộ cài và đánh dấu ô đó.
WSL2 cũng là một lựa chọn tốt trên Windows: cài Ubuntu từ Microsoft Store rồi làm theo hướng dẫn Linux bên trong. Bạn sẽ có quy trình làm việc kiểu Unix quen thuộc hơn.
Biên dịch và chạy tệp đầu tiên
Sau khi cài xong, quy trình trông như sau. Lưu một tệp tên hello.v:
module hello;
initial begin
$display("hello from verilog");
$finish;
end
endmodule
Biên dịch nó thành một tệp nhị phân mô phỏng:
iverilog -o hello hello.v
iverilog là trình biên dịch. -o hello đặt tên cho đầu ra. hello.v là tệp nguồn.
Chạy mô phỏng:
vvp hello
Bạn sẽ thấy:
hello from verilog
Đó là toàn bộ vòng làm việc trên máy. Từ đây bạn có thể chia thiết kế ra nhiều tệp (iverilog -o sim *.v), dùng cờ -g2012 để bật các tính năng SystemVerilog-2012, hoặc chuyển đầu ra sang script của riêng bạn.
Tạo và xem dạng sóng
Thêm $dumpfile và $dumpvars vào testbench, chạy nó, rồi mở tệp VCD được tạo ra trong GTKWave:
initial begin
$dumpfile("dump.vcd");
$dumpvars(0, test);
// ...
end
Sau khi vvp sim chạy xong, bạn sẽ có tệp dump.vcd nằm cạnh tệp nguồn. Mở nó:
gtkwave dump.vcd
GTKWave nạp tệp và hiển thị cây tín hiệu ở bên trái. Kéo các tín hiệu bạn quan tâm vào vùng dạng sóng ở bên phải. Chúng ta sẽ nói kỹ hơn trong bài Dumpfile và VCD.
Các lỗi thường gặp
iverilog: command not found: tệp thực thi không nằm trong PATH. Trên Windows, điều này thường có nghĩa là bộ cài đã chạy mà không bật cập nhật PATH. Trên macOS/Linux, thường là Homebrew/apt chưa cài xong, hoặc shell bạn đang dùng chưa nạp lại PATH (đóng terminal rồi mở lại).
syntax error ở một dòng trông có vẻ đúng: kiểm tra xem bạn có đang dùng tính năng SystemVerilog ở chế độ Verilog thường không. Truyền -g2012 cho iverilog để bật SystemVerilog-2012:
iverilog -g2012 -o sim main.v
Unknown module khi biên dịch: hoặc tệp nguồn của module chưa được truyền cho iverilog, hoặc tên module ở chỗ khởi tạo không khớp chính xác với khai báo module. Verilog phân biệt chữ hoa và chữ thường.
Dạng sóng trống trong GTKWave: testbench chưa gọi $dumpfile và $dumpvars, hoặc mô phỏng đã chạm $finish trước khi có tín hiệu nào thay đổi. Thêm ít nhất một lệnh $dumpvars(0, top) và để mô phỏng chạy đủ lâu cho các chuyển trạng thái xảy ra.
Tiếp theo là gì
Dù bạn cài trên máy hay dùng trình duyệt, bài tiếp theo hướng dẫn bạn viết module hoàn chỉnh đầu tiên từ đầu: khai báo module, các port, một mạch logic tổ hợp nhỏ và một testbench bao quanh nó.
Câu hỏi thường gặp
Làm sao để cài Verilog?
Không có chương trình nào tên là 'Verilog': Verilog là một ngôn ngữ, thứ bạn cài là trình biên dịch và trình mô phỏng cho nó. Để học, lựa chọn phổ biến là Icarus Verilog (các lệnh iverilog và vvp), đi kèm GTKWave để xem dạng sóng. Trên macOS dùng brew install icarus-verilog gtkwave; trên Debian/Ubuntu dùng apt install iverilog gtkwave; trên Windows tải bộ cài dựng sẵn từ trang Bleyer.
Có cần cài gì để học Verilog không?
Không. Trình soạn thảo trên trang này chạy code của bạn bằng iverilog và vvp trên cloud và hiển thị dạng sóng VCD ngay trong trang. Bạn có thể học hết mọi bài trong bộ tài liệu này mà không cần cài gì. Cài trên máy sẽ hữu ích khi bạn muốn lưu tệp, quản lý dự án bằng version control hoặc làm một thiết kế quá lớn so với trình soạn thảo trên trình duyệt.
iverilog và vvp khác nhau thế nào?
iverilog là trình biên dịch: nó biến các tệp nguồn .v thành một tệp nhị phân mô phỏng. vvp là runtime thực thi tệp nhị phân đó. Chuỗi lệnh thường gặp là iverilog -o sim main.v test.v rồi đến vvp sim. Phần lớn các script trong quy trình làm việc đều gói cả hai lệnh này.
Icarus Verilog có miễn phí không?
Có. Icarus Verilog là phần mềm mã nguồn mở theo giấy phép GPL/LGPL. Không có máy chủ cấp phép, không có thời gian dùng thử, và bạn dùng được cả để học lẫn cho mục đích thương mại. Các lựa chọn thương mại (ModelSim, VCS, Xcelium) đều trả phí; với mọi nội dung trong bộ tài liệu này, Icarus là đủ.
Làm sao để kiểm tra phiên bản iverilog?
Mở terminal và chạy iverilog -V. Bạn sẽ thấy số phiên bản kiểu Icarus Verilog version 12.0. Nếu gặp 'command not found', tệp thực thi chưa nằm trong PATH: chạy lại bộ cài hoặc thêm thư mục bin vào cấu hình shell.