Khối initial
Thuộc phần Kiến thức nền tảng trong hành trình Verilog của Coddy. Bài học 47 trên 90.
Verilog có hai khối thủ tục: initial (chạy một lần) và always (chạy liên tục). Bây giờ, hãy tìm hiểu về khối initial.
Khối initial là gì?
Khối initial chỉ chạy một lần khi bắt đầu mô phỏng (thời điểm 0). Khi chạy xong, khối này không chạy lại.
Nó chủ yếu được dùng trong testbench để:
- Đặt các giá trị ban đầu
- Tạo tín hiệu kiểm thử
- Hiển thị thông báo
- Bắt đầu mô phỏng
Cú pháp
initial begin
// Các câu lệnh (statements) chạy một lần, theo thứ tự
endVí dụ cơ bản
initial begin
$display("Simulation started");
$display("This runs once");
$finish;
endĐầu ra:
Simulation started
This runs onceDùng khối initial để tạo tín hiệu kiểm thử
initial begin
a = 0;
#10 a = 1;
#10 a = 0;
#10 $finish;
endĐoạn code này thay đổi a tại các thời điểm: 0, 10 và 20.
Ban đầu và luôn luôn
initial | always | |
|---|---|---|
| Thực thi | Một lần | Liên tục (mãi mãi) |
| Dùng cho | Testbench, khởi tạo | Phần cứng (flip-flop, bộ đếm) |
| Có thể tổng hợp? | Chỉ dùng cho giá trị ban đầu (FPGA) | Có (với danh sách độ nhạy) |
Ghi chú quan trọng
- Các khối
initialchủ yếu dùng để mô phỏng. Công cụ tổng hợp không thể chuyển các khoảng trễ như#10hoặc các tác vụ như$displaythành phần cứng - Chủ yếu dùng
initialtrong testbench. Trong một module thiết kế, chỉ các công cụ tổng hợp FPGA mới dùng nó, và chỉ để đặt giá trị ban đầu cho một thanh ghi hoặc bộ nhớ - Nếu testbench có đồng hồ chạy liên tục (ví dụ:
always #5 clk = ~clk;), mô phỏng sẽ chạy mãi trừ khi bạn gọi$finish; nếu chỉ có khốiinitial, trình mô phỏng sẽ tự dừng khi không còn sự kiện nào, nhưng thêm$finishvẫn là một thói quen tốt
Thử thách
Thêm khối initial còn thiếu để đặt a thành 0, sau đó đặt a thành 1 sau 10 đơn vị thời gian.
Cần làm:
- Thêm
initial beginvàend - Đặt
a = 0 - Chờ
#10 - Đặt
a = 1 - Thêm $finish để kết thúc mô phỏng
Tự làm thử
module test;
reg a;
// TODO: Thêm khối lệnh initial vào đây
// Gán a = 0
// Chờ #10
// Gán a = 1
// Thêm $finish; để kết thúc mô phỏng
endmoduleBài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Kiến thức nền tảng
1Giới thiệu
Verilog là gìPhần cứng và phần mềmModule đầu tiênChú thíchCác mức trừu tượng hóa thiết kế4Toán tử phần 1
Toán tử số họcToán tử moduloToán tử so sánhÔn tập: phép tính đơn giảnToán tử thao tác bit7Gán và cổng logic
Gán liên tụcGán bằng toán tửCác cổng nguyên thủy tích hợp sẵnCổng AND, OR, NOTCổng XOR, XNORÔn tập: mạch cổng logic10Ra quyết định
Câu lệnh ifIf và elseÔn tập: Bộ so sánh đơn giảnCâu lệnh caseCasex và casezÔn tập: Thiết kế ALU5Các toán tử, phần 2
Toán tử logicToán tử rút gọnToán tử dịch bitToán tử nốiToán tử điều kiệnÔn tập: thử thách về toán tử11Vòng lặp
Vòng lặp forVòng lặp whileVòng lặp repeatVòng lặp vô hạnCâu lệnh vô hiệu hóaÔn tập: các mẫu vòng lặp3Hệ thống số
Biểu diễn nhị phânSố có kích thướcSố không có kích thướcSố âmCác giá trị đặc biệt X và ZÔn tập: định dạng số6Module
Cấu trúc moduleCổng đầu vào và đầu raCổng vào ra hai chiềuKhởi tạo moduleÁnh xạ cổng theo tênÁnh xạ cổng theo thứ tựÔn tập: xây dựng module9Khối thủ tục
Khối alwaysKhối initialDanh sách độ nhạyPhép gán chặnPhép gán không chặnÔn tập: always và initial12Dự án bộ ghép kênh
Thiết kế bộ ghép kênh 2 thành 1Thiết kế bộ ghép kênh 4 thành 115Bộ điều khiển đèn giao thông
Xác định các trạng tháiLogic máy trạng tháiTự luyện tập: Trình biên dịch Verilog online